mysql出现1051错误(记一次MySQL库SQLerror:)

概述

最近在做一次从mysql5.7到mysql8的结构同步,发现报错,具体信息如下:

MySQL SQL error: #1271 - Illegal mix of collations for operation 'UNION'

下面简单记录下解决的过程及思路。

mysql出现1051错误(记一次MySQL库SQLerror:)(1)


思路:

MySQL在使用UNION查询时或者创建视图时报异常:SQL error: #1271 - Illegal mix of collations for operation 'UNION',此类问题是由于UNION Mysql的Table的时候对应的字段Collation字符序不同导致的,如果这时候用MySQL在使用UNION查询时或者创建视图时就会报异常:SQL error: #1271 - Illegal mix of collations for operation 'UNION'

解决过程如下:


1、查看表详细信息

可以发现排序规则不一致

SELECT c.TABLE_SCHEMA '数据库', c.TABLE_NAME '表', c.COLUMN_NAME '字段', c.COLUMN_DEFAULT '默认值', c.IS_NULLABLE '是否为空', c.DATA_TYPE '字段类型', c.character_set_name '原字符集', c.collation_name '原排序规则', CONCAT( 'ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' MODIFY COLUMN ', COLUMN_NAME, ' ', COLUMN_TYPE, ' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci ', CASE WHEN c.is_nullable = 'NO' THEN 'NOT NULL' ELSE 'NULL' END, CASE WHEN c.COLUMN_DEFAULT = '' THEN ' DEFAULT ''''' WHEN c.COLUMN_DEFAULT IS NULL THEN ' DEFAULT NULL' ELSE concat( ' DEFAULT ', '''', c.COLUMN_DEFAULT, '''' ) END, ' comment ', '''', c.COLUMN_COMMENT, '''', ';' ) '修正SQL' FROM information_schema.`COLUMNS` c WHERE TABLE_SCHEMA='xxx';

mysql出现1051错误(记一次MySQL库SQLerror:)(2)

2、通过修正sql统一调整字符集规则

应用修正sql做调整:

ALTER TABLE xxx MODIFY COLUMN xx CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' comment ''; ...

3、调整后检查

可以发现已经没有不一致的字符排序规则了。

SELECT DISTINCT character_set_name FROM information_schema.`COLUMNS` c WHERE TABLE_SCHEMA = 'xxxx'

mysql出现1051错误(记一次MySQL库SQLerror:)(3)

4、重新结构同步

测试后没有问题。


后面会分享更多devops和DBA方面内容,感兴趣的朋友可以关注下~

mysql出现1051错误(记一次MySQL库SQLerror:)(4)

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页