Mysql编码引起的Illegal mix of collations

前几天写了个Mysql存储过程,在本地环境能执行成功,但是Linux服务器里却报:

Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)错误。

让我很无解,我对比了这个错误相关的两张表的编码,发现字符序collation都是utf8_unicode_ci,就连两表的连接查询的字段也同样是utf8_unicode_ci。

我再检查了下数据库的编码,一样是 CHARSET=utf8 COLLATE=utf8_unicode_ci,所以执行存储过程报这个Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT)错误让人很无解。

后来想起是不是Mysql的编码和库、表里的不一致,用命令看了下

mysql> show variables where Variable_name like 'collation%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_unicode_ci |
+----------------------+-----------------+

里面的collation有不一致,而mysql5.5默认的collation为utf8_general_ci,查看服务器的my.cnf文件有配置

    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    character-set-server=utf8

可能是存储过程执行中创建临时表时collation用的是utf8_general_ci,造成创建临时表和实际的两张表字段collation不匹配才报的这个错误,那么要真是这样的话,就得配置my.cnf让Mysql和我们的表的collation一样,就可以了。

于是在my.cnf文件中修改成这样:

    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    [mysqld]
    character-set-server=utf8
    collation_server=utf8_general_ci

重启Mysql,再把存储过程中的两张表和字段全部使用utf8_general_ci,然后把数据库也设置成utf8_general_ci,再执行存储过程,OK!可以运行了


  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误提示是与MySQL数据库中的字符集(collation)相关的问题。它表示在进行比较操作时,出现了不同的字符集的混合。通常,这个错误会出现在数据库查询语句中的操作符(比如=、<>等)的两边使用了不同的字符集。比如,utf8mb4_general_ci和utf8mb4_unicode_ci是两种不同的字符集,当它们混合使用时就会导致此错误。 解决这个问题的方法是确保在进行比较操作时,两边使用相同的字符集。可以通过在比较操作符两边使用COLLATE关键字来指定相同的字符集。 例如,如果你的查询是这样的:SELECT * FROM table WHERE column1 = 'value',你可以修改为:SELECT * FROM table WHERE column1 COLLATE utf8mb4_general_ci = 'value'。这样就可以避免字符集混合导致的错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [mysql字段编码不一致导致Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_...](https://blog.csdn.net/chen417980762/article/details/127068037)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operat](https://blog.csdn.net/guyue35/article/details/108846249)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [mysql报错Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT)](https://blog.csdn.net/summer089089/article/details/109595986)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值