如何更改Mysql的连接排序规则

问题描述 投票:7回答:2

如何更改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

mysql collation
2个回答
7
投票

看看你的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数据库屏幕上执行此操作(始终将其更新到最新版本!)


0
投票

首先,我认为错误消息是因为存储过程(连接)的排序规则与表不匹配。但我错了,错误的原因是因为列的排序规则与表的排序规则不匹配。

在我的情况下,我想将列更改为'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

© www.soinside.com 2019 - 2024. All rights reserved.