【发布时间】:2012-03-01 02:57:18
【问题描述】:
-
所有表格都在
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> 显示变量,如 'char%'; +--------------------------+---------- ------+ |变量名 |价值 | +--------------------------+---------- ------+ | character_set_client | utf8 | |字符集连接 | utf8 | |字符集数据库 | utf8 | |字符集文件系统 |二进制 | |字符集结果 | utf8 | | character_set_server | utf8 | |字符集系统 | utf8 | |字符集目录 | /usr/share/mysql/charsets/ | +--------------------------+---------- ------+ 一组 8 行(0.02 秒)排序规则是
mysql> 显示变量,如 'colla%'; +---------------------------------+-----------------+ |变量名 |价值 | +---------------------------------+-----------------+ | collation_connection | utf8_unicode_ci | | collation_database | utf8_unicode_ci | |排序服务器 | utf8_unicode_ci | +---------------------------------+-----------------+ 3 行一组(0.00 秒)
-
无论我是通过 Web 浏览器还是通过 mysql bash 客户端调用存储过程,都会触发错误。以防万一我的 ubuntu/linux 语言环境设置是:
$ 语言环境 LANG=es_ES.UTF-8 语言=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 客户端,浏览器)传递给存储过程的变量是在 utf8_general_ci 中发送的,因此它与我的数据库中的 ut8_unicode_ci 发生冲突。
即使mysql连接设置为utf_unicode_ci,操作系统似乎也在使用utf8_general_ci。
【问题讨论】:
-
我的猜想是对的,系统以某种方式设置为 utf8_general_ci。如果我将每个表排序规则都转换为 utf_general_ci,我就不会再收到错误消息了。所以看来问题是我的系统正在使用 utf8_general_ci
标签: mysql ubuntu unicode utf-8 collation