Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL]Illegal mix of collations
jacusek
post 6.10.2010, 21:16:26
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Ten post edytował jacusek 6.10.2010, 21:26:19
Go to the top of the page
+Quote Post
nospor
post 6.10.2010, 21:32:35
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie zgadzają ci się collate na polach które ze sobą porównujesz. Musisz ustawić collate dla tych pól a nie tabel


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
jacusek
post 6.10.2010, 22:21:20
Post #3





Grupa: Zarejestrowani
Postów: 262
Pomógł: 3
Dołączył: 18.10.2009
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 24.07.2025 - 21:50