Nielegalny błąd mieszania kolacji w MySql

Właśnie dostałem tę odpowiedź z poprzedniego pytania i działa smakołyk!

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC

Ale jak włożę ten dodatkowy bit to daje ten błąd:

Dokumentacja # 1267-nielegalna mieszanka kolacje (latin1_swedish_ci, IMPLICIT) oraz (latin1_general_ci, IMPLICIT)dla operacja " = "

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM 
ratings WHERE month='Aug' 
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC

Tabela jest następująca:

id, username, rating, month

Author: Rikesh, 2009-08-07

16 answers

Sprawdź typ zestawiania każdej tabeli i upewnij się, że mają taką samą zestawianie.

Następnie sprawdź również Typ zestawiania każdego pola tabeli, którego używasz w działaniu.

Natknąłem się na ten sam błąd, i że triki działają na mnie.

 13
Author: bluish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-16 13:12:45

Oto jak sprawdzić, które kolumny są złym zestawieniem:

SELECT table_schema, table_name, column_name, character_set_name, collation_name

FROM information_schema.columns

WHERE collation_name = 'latin1_general_ci'

ORDER BY table_schema, table_name,ordinal_position; 

A oto zapytanie, aby to naprawić:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';

Link

 67
Author: Dean Rather,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-06 23:59:30

[MySQL]

W tych (bardzo rzadkich) przypadkach:

  • dwie tabele, które naprawdę wymagają różnych typów zestawiania
  • Wartości nie pochodzące z tabeli, ale z wyraźnego wyliczenia, na przykład:

    SELECT 1 AS numbers UNION ALL SELECT 2 UNION ALL SELECT 3

Możesz porównać wartości między różnymi tabelami za pomocą CAST lub CONVERT:

CAST('my text' AS CHAR CHARACTER SET utf8)

CONVERT('my text' USING utf8)

Zobacz konwersja i tworzenie dokumentacji na stronie MySQL.

 8
Author: RotS,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-05-17 11:58:34

Miałem ten sam błąd na PhpMyadmin i zrobiłem rozwiązanie wskazane tutaj, które działało dla mnie

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

Illegal mix of collations MySQL Error Polecam również iść z ogólnym zamiast szwedzkiego, ponieważ ten jest domyślny i nie używać języka, chyba że aplikacja używa szwedzkiego.

 5
Author: pal4life,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:44
  • Sprawdź, czy Twoi użytkownicy.kolumna gender jest liczbą całkowitą.
  • Try: alter table users convert to character set latin1 collate latin1_swedish_ci;
 1
Author: hobodave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 22:31:51

Musisz zmienić każdą kolumnę z latin1_general_ci na latin1_swedish_ci

 1
Author: Swadesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-25 17:50:31

Mam ten sam błąd wewnątrz procedury składowanej, w klauzuli where. odkryłem, że problem dotyczył lokalnej deklarowanej zmiennej, wcześniej załadowanej przez tę samą tabelę / kolumnę.

Rozwiązałem to, rzucając dane do typu single char.

 1
Author: Roberto Camargo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-23 13:49:01

W skrócie, ten błąd jest spowodowany przez MySQL próbuje wykonać operację na dwóch rzeczach, które mają różne ustawienia kolacji. Jeśli ustawienia będą zgodne, błąd zniknie. Oczywiście musisz wybrać odpowiednie ustawienie dla swojej bazy danych, w zależności od tego, do czego będzie używana.

Oto kilka dobrych rad dotyczących wyboru pomiędzy dwoma bardzo powszechnymi kolacjami utf8: Jaka jest różnica między utf8_general_ci a utf8_unicode_ci

Jeśli używasz phpMyAdmin możesz to zrobić systematycznie, przeglądając tabele wymienione w komunikacie o błędzie i sprawdzając Typ zestawiania dla każdej kolumny. Najpierw powinieneś sprawdzić, które jest ogólnym ustawieniem zestawiania dla twojej bazy danych-phpMyAdmin może Ci to powiedzieć i w razie potrzeby zmienić. Ale każda kolumna w każdej tabeli może mieć własne ustawienie. Normalnie będziesz chciał, aby wszystkie te pasowały.

W małej bazie danych jest to dość łatwe do zrobienia ręcznie, a w każdym razie, jeśli odczytasz błąd wiadomość w całości zazwyczaj wskaże Ci właściwe miejsce. Nie zapomnij przyjrzeć się ustawieniom 'struktury' dla kolumn z podzbiorami. Gdy znajdziesz zestawienie, które nie pasuje, możesz go zmienić za pomocą phpMyAdmin bezpośrednio, nie musisz używać okna zapytania. Następnie spróbuj ponownie wykonać operację. Jeśli błąd będzie się powtarzał, szukaj dalej!

 1
Author: Pinkeye,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:31

Myślę, że powinieneś przekonwertować na utf8

--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
 1
Author: Quy Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-03 06:53:20

Problem tutaj głównie, wystarczy rzucić pole jak ten cast (pole jako varchar) lub cast(pola jako data)

 1
Author: reds,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-07 07:01:12
SELECT  username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM    ratings
        WHERE month='Aug'
        AND username COLLATE latin1_general_ci IN
        (
        SELECT  username
        FROM    users
        WHERE   gender = 1
        )
GROUP BY
        username
HAVING
        TheCount > 4
ORDER BY
        TheAverage DESC, TheCount DESC;
 0
Author: Quassnoi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 22:48:01

Użyj ascii_bin tam, gdzie jest to możliwe, będzie pasować do prawie każdego zestawienia. Nazwa użytkownika i tak rzadko akceptuje znaki specjalne.

 0
Author: Kjeld Flarup,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-24 11:46:00

Jeśli chcesz uniknąć zmiany składni, aby rozwiązać ten problem, spróbuj tego:

Zaktualizuj swój MySQL do wersji 5.5 lub nowszej.

To rozwiązało problem dla mnie.

 0
Author: HoldOffHunger,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-13 13:49:16

Mam ten sam problem z ostrzeżeniem o zbiorze dla pola ustawionego od 0 do 1. Wszystkie zbiory kolumn były takie same. Próbujemy ponownie zmienić kolekcje, ale nic nie rozwiązuje tego problemu.

Na końcu zaktualizujemy pole do NULL, a następnie zaktualizujemy do 1 i to rozwiązuje problem z kolekcją.

 0
Author: glg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-07 12:37:51
HAvING TheCount > 4 AND username IN (SELECT username FROM users WHERE gender=1)

Ale dlaczego odpowiadam, nie głosowałeś na mnie jako właściwą odpowiedź:)

 -1
Author: Rufinus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 22:27:53

Upewnij się, że Twoja wersja MySQL obsługuje zapytania podrzędne (4.1+). Następnie możesz spróbować przepisać swoje zapytanie do czegoś takiego:

SELECT ratings.username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM ratings, users 
WHERE ratings.month='Aug' and ratings.username = users.username
AND users.gender = 1
GROUP BY ratings.username
HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
 -2
Author: stereoscott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-06 22:27:49