uncategorized SQLException 字段字符集不兼容

报错信息:

; uncategorized SQLException; SQL state [HY000]; error code [1267]; Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='; nested exception is java.sql.SQLException: Illegal mix of collations (utf8_general_ci,IMPLICIT) and (utf8_unicode_ci,IMPLICIT) for operation '='

这个错误通常表示在进行字符串比较时使用了不兼容的字符集或校对规则,导致 MySQL 数据库引擎无法执行操作。

错误信息中提到了两种不同的字符集和校对规则:utf8_general_ciutf8_unicode_ci。 MySQL 数据库使用校对规则来确定如何对字符串进行排序和比较。在使用等于(==)操作符时,要求待比较的两个字符串必须具有相同的字符集和校对规则。

解决这个问题的方法有两种:

        1. 统一字符集和校对规则:将所有涉及到比较的字段和表的字符集和校对规则统一为同一种类型,比如 utf8_general_ciutf8_unicode_ci。可以通过 ALTER TABLE 语句修改表的字符集和校对规则,例如:

ALTER TABLE your_table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
 

         2.显式地指定字符集和校对规则:如果无法修改表的字符集和校对规则,你可以在执行查询时显式地指定字符集和校对规则。例如,在比较字符串时使用 COLLATE 关键字指定校对规则,如下所示:

SELECT *
FROM your_table_name
WHERE your_column_name COLLATE utf8_general_ci = 'your_value';
 

批量修改字符集 

如果需要更改很多表甚至整个数据库所有表都需要更改字符集,可以采用以下方式进行批量修改

 # 根据转换字符集 修改 utf8 ---> utf8_general_ci
SELECT
    CONCAT(
        'ALTER TABLE ',
        TABLE_NAME,
        ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
    )
FROM
    information_schema.`TABLES`
WHERE
    TABLE_SCHEMA = 'DATABASE_NAME';  # 更改 DATABASE_NAME

通过以上语句可以得到批量更新的sql语句,然后复制下来执行就可以了

需要注意的是,在修改字符集和校对规则或者显式指定校对规则时,需谨慎考虑现有数据的影响,并确保所有涉及到比较的字段和表都使用相同的字符集和校对规则。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值