如何更改mysql数据库的连接排序规则?
我在ubuntu 14中使用Mysql workbench 5.5和mysql 5.5。
当我执行存储过程时,会发生错误:
错误代码:1267。操作'='的非法混合排序(utf8_general_ci,IMPLICIT)和(utf8_unicode_ci,IMPLICIT)
我通过互联网搜索,它有一个临时解决方案,即修改
COLLATE utf8_unicode_ci;
在存储过程中。
但我想在将来为所有存储过程解决此问题。我已经找到
SHOW VARIABLES LIKE 'collation%';
返回这个。
collation_connection utf8_general_ci
collation_database utf8_unicode_ci
collation_server latin1_swedish_ci
我怎样才能将utf8_general_ci
改为utf8_unicode_ci
?
看看你的my.cnf
,找到collation_server
附近的内容:
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
然后将您的排序规则变量更改为:
collation_connection utf8_unicode_ci
collation_server latin1_swedish_ci
记得重启MySQL服务器服务。
对于DB排序规则,您可以使用以下SQL:
ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf8_unicode_ci;
或者您可以在MySQL Workbench的Alter数据库屏幕上执行此操作(始终将其更新到最新版本!)
首先,我认为错误消息是因为存储过程(连接)的排序规则与表不匹配。但我错了,错误的原因是因为列的排序规则与表的排序规则不匹配。
在我的情况下,我想将列更改为'utf8_unicode_ci'。所以我已经发表了这样的声明:
alter table <YourTableName>
MODIFY <YourColumnName> VARCHAR(XXX) COLLATE 'utf8_unicode_ci';
请注意,更改整理可能会导致数据丢失。对我来说,一般 - > Unicode,varchar
专栏中的所有英文。空无一人。
进一步阅读:http://dev.mysql.com/doc/refman/5.7/en/charset-column.html
http://dev.mysql.com/doc/refman/5.7/en/charset-connection.html
http://dev.mysql.com/doc/refman/5.7/en/charset-database.html