Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL]Illegal mix of collations
Forum PHP.pl > Forum > Przedszkole
jacusek
Witam.
Mam dwie table:
  1. CREATE TABLE `statystyka` (
  2. `ID_STAT` MEDIUMINT(9) NOT NULL AUTO_INCREMENT,
  3. `ID_LEK` VARCHAR(5) NOT NULL,
  4. `DATA` DATE NOT NULL,
  5. `09_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  6. `10_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  7. `11_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  8. `12_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  9. `13_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  10. `14_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  11. `15_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  12. `16_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  13. `17_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  14. `18_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  15. `19_00` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
  16. PRIMARY KEY (`ID_STAT`),
  17. UNIQUE INDEX `ID_LEK_DATA` (`ID_LEK`, `DATA`),
  18. CONSTRAINT `FK_statystyka_lekarze_old` FOREIGN KEY (`ID_LEK`) REFERENCES `lekarze_old` (`ID_LEK`)
  19. )
  20. COLLATE='utf8_general_ci'
  21. ENGINE=InnoDB
  22. ROW_FORMAT=DEFAULT


i drugą tablę
  1. CREATE TABLE `lekarze_old` (
  2. `ID_LEK` VARCHAR(5) NOT NULL,
  3. `NAZWISKO_IMIE` VARCHAR(30) NOT NULL,
  4. `TYTUL` VARCHAR(15) NOT NULL,
  5. `SPECJALNOSC` VARCHAR(40) NOT NULL,
  6. `SPOLKA` VARCHAR(10) NOT NULL,
  7. `wlas` TINYINT(3) NULL DEFAULT NULL,
  8. `UWAGI` VARCHAR(1000) NULL DEFAULT NULL,
  9. PRIMARY KEY (`ID_LEK`),
  10. UNIQUE INDEX `ID_LEK_1` (`ID_LEK`)
  11. )
  12. COLLATE='utf8_general_ci'
  13. ENGINE=InnoDB
  14. ROW_FORMAT=DEFAULT


Do tego małą procedurę:
  1. CREATE PROCEDURE `wlas2`(IN `lek` VARCHAR(5), IN `mmrr` vaRCHAR(4))
  2. LANGUAGE SQL
  3. NOT DETERMINISTIC
  4. CONTAINS SQL
  5. SQL SECURITY DEFINER
  6. COMMENT ''
  7. BEGIN
  8. SELECT DISTINCT DATA, count(09_00)+count(10_00)+count(11_00)+count(12_00)
  9. +count(13_00)+count(14_00)+count(15_00)+count(16_00)+count(17_00)
  10. +count(18_00)+count(19_00) AS ile_godz FROM statystyka
  11. JOIN lekarze_old USING(ID_LEK)
  12. WHERE date_format(DATA,'%m%y')=mmrr AND id_lek=lek
  13. GROUP BY DATA;
  14. END


Przy wywołaniu procedury dostaję nieszczęsny komunikat o którym pisałem w temacie w dokładnie takiej treści:
Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='
Kroki które już podłąłem to zmiana collete razem z convert, zmiana wszystkich collate ww obu tabelach. Nie znalazłem innych pomysłów. Zrobiłem kopie tych tabel, od początku ale też nie pomogło. Nie bardzo mam pomysł co ewentualnie mogę zrobić dalej.
nospor
Nie zgadzają ci się collate na polach które ze sobą porównujesz. Musisz ustawić collate dla tych pól a nie tabel
jacusek
na to wpadłem i to niestety nie to. Choć zastanawia mnie inna rzecz. Jak zmienię collation (korzystam z programu heidisql) w tabeli to kiedy wchodzę w edycję ponownie to niestety pokazuje jakby się nic nie zmieniło. Więc może tu leży problem. Ale z czego może on wynikać?
Jak skorzystam z "show create table" to w ogóle nie pokazuje informacji o collate. Uprawnienia wszystkie posiadam, bo jest to baza na localhoscie.

ROZWIĄZANIE DLA ZAINTERESOWANYCH - może się komuś przyda na przyszłość:
wewnątrz zmiana ciała procedury w sposób następujący:
  1. --zapytanie
  2. WHERE date_format(DATA,'%m%y')=mmrr AND id_lek=CONVERT(lek USING utf8)
  3. collate utf8_general_ci

I śmiga jak trzeba. smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.