修改排序规则后无法更新MariaDB/MySQL数据的解决方案咨询
排序规则修改后的更新冲突问题
我通过phpMyAdmin将表的排序规则从utf8mb4_general_ci修改为utf8mb4_unicode_ci,操作过程简单,但修改完成后更新数据时,发现MariaDB/MySQL仍以原排序规则存储值,每次更新都会报错:
Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
尝试回滚排序规则后,当前字符集及排序规则配置如下:
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | utf8mb4 | | character_set_connection | utf8mb4 | | character_set_database | utf8mb4 | | character_set_filesystem | binary | | character_set_results | utf8mb4 | | character_set_server | utf8mb4 | | character_set_system | utf8mb3 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.003 sec) +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_general_ci | | collation_database | utf8mb4_general_ci | | collation_server | utf8mb4_general_ci | +----------------------+--------------------+
列属性为:varchar(20) utf8mb4_general_ci NULL,但仍持续收到相同报错:
ERROR 1267 (HY000): Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operation '='
我需要找到直接更新列值排序规则的方法,尝试过的转换/强制转换方案均无效,问题出在当前存储的值而非新值。目前仅有的可行方法是先将值设为null再重新赋值,但这仅适用于允许为空的字段,对非空字段不适用。
是否存在无需此类繁琐临时方案的方法,可直接更新列值的排序规则?
编辑1
后续找到一个相对较好但仍繁琐的临时方案:重命名原表,再将数据复制到同名新表中,这样所有记录会以正确的排序规则创建。
内容的提问来源于stack exchange,提问作者user2653774
相关产品推荐
相关产品推荐

