所有表格都采用
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
。字符集如下:character_set_client、character_set_connection、character_set_database、character_set_filesystem、character_set_results、character_set_server、character_set_system,所有值都为utf8
。校对如下:collation_connection、collation_database和collation_server,所有值都为utf8_unicode_ci
。触发错误的方式是无论是通过Web浏览器还是MySQL Bash客户端调用存储过程都会触发。我的Ubuntu / Linux语言环境设置为es_ES.UTF-8。目前唯一解决这个问题的方法是在每个导致错误的查询中使用convert
(或在查询中使用COLLATE
)。但问题是有许多相当复杂的存储过程,因此很难识别“不良”查询并且耗时很长。我想某种方式从我的系统(ubuntu:mysql客户端、浏览器)传递给存储过程的变量正在以utf8_general_ci的形式发送,因此与来自我的数据库的ut8_unicode_ci发生冲突。似乎操作系统正使用utf8_general_ci,即使MySQL连接设置为utf_unicode_ci。