-
Все таблицы находятся в
utf_unicode_ci
.Я сделал это, чтобы проверить
SELECT table_schema, table_name, column_name, character_set_name, collation_name FROM information_schema.columns WHERE collation_name <> 'utf8_unicode_ci' AND table_schema LIKE 'my_database' ORDER BY table_schema, table_name, ordinal_position;
И преобразует каждую таблицу на всякий случай
ALTER TABLE `my_database`.`table_name` DEFAULT COLLATE utf8_unicode_ci; ALTER TABLE `my_database`.`table_name` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
-
Настройки настройки моей базы данных находятся в
utf8_unicode_ci
.кодировки
mysql> show variables like 'char%'; +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8 | | character_set_connection | utf8 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | utf8 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.02 sec)
сопоставления
mysql> show variables like 'colla%'; +----------------------+-----------------+ | Variable_name | Value | +----------------------+-----------------+ | collation_connection | utf8_unicode_ci | | collation_database | utf8_unicode_ci | | collation_server | utf8_unicode_ci | +----------------------+-----------------+ 3 rows in set (0.00 sec)
-
возникает ошибка при вызове хранимой процедуры через веб-браузер или через клиент mysql bash. на всякий случай, если у меня установлены настройки локали ubuntu/linux:
$ locale LANG=es_ES.UTF-8 LANGUAGE=es_ES.UTF-8 LC_CTYPE=es_ES.UTF-8 LC_NUMERIC="es_ES.UTF-8" LC_TIME="es_ES.UTF-8" LC_COLLATE=es_ES.UTF-8 LC_MONETARY="es_ES.UTF-8" LC_MESSAGES=es_ES.UTF-8 LC_PAPER="es_ES.UTF-8" LC_NAME="es_ES.UTF-8" LC_ADDRESS="es_ES.UTF-8" LC_TELEPHONE="es_ES.UTF-8" LC_MEASUREMENT="es_ES.UTF-8" LC_IDENTIFICATION="es_ES.UTF-8" LC_ALL=
Единственный способ решить эту проблему - использовать convert
внутри каждого запроса, который вызывает ошибку (или используя COLLATE
внутри запроса), но проблема в том, что существует много довольно сложного хранимые процедуры, поэтому трудно идентифицировать "плохие" запросы и занимает много времени.
Я предполагаю, что каким-то образом переменные, переданные в хранимую процедуру из моей системы (ubuntu: mysql client, browser), отправляются в utf8_general_ci, поэтому он конфликтует с ut8_unicode_ci из моей базы данных.
Кажется, что os работает с utf8_general_ci, даже если для соединения mysql установлено значение utf_unicode_ci.