批量修改 mysql数据库编码格式(Illegal mix of collations (utf8_unicode_ci,IMPLICIT) and (utf8_general_ci,IMPLICIT) for operation '='格式错误)

SELECT
CONCAT(
'ALTER TABLE `',
table_name,
'` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;'
)
FROM
information_schema.TABLES
WHERE
table_schema = 'scmsales'
LIMIT 10000

  1、修改数据表默认的数据格式:执行上面的语句,然后将获取到的sql,执行获取到的SQL。

2、修改数据表中已有数据格式,执行下面的sql语句,然后再执行获取到的sql语句:

SELECT
/*
CONCAT(
'ALTER TABLE `',
table_name,
'` DEFAULT CHARACTER SET=utf8 COLLATE=utf8_unicode_ci;'
),*/
CONCAT(
'ALTER TABLE `',
table_name,
'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;'
)
FROM
information_schema.TABLES
WHERE
table_schema = 'scmsales'
LIMIT 10000

3、深入——知其然知其所以然

为什么 utf8-unicode-ci与 utf8_general_ci  格式不同的两个表,不能联合查询呢?它们两者有什么区别呢?

   首先,每一种编码格式,对应着一组字符语义解析表,就如汉语中的 a ,既可以表示英语 A,也可以表示拼音 “啊”,当然在俄语,阿拉伯语中又表示着其它的含义,因此这就需要一组对照表来存储其意义。而utf8-unicode-ci 格式对应的对照表存储的字符意义比较多,也相对完整;utf8_general_ci 格式对应的对照表存储的字符意义相对简单;但都有各自的一套对照表;所以在两个不同编码格式(核对格式)不同的表进行联合查询时,由于参考的对照表不同,就无法查询到数据,就如同两个表中的ID对不上号一样,查询不到任何数据了;

   其次,由于utf8-unicode-ci 格式对应的对照表相对复杂,那么其准确率就相对要高,性能就相对低一些;然而这两种格式在我本人实际应用中,还没有发觉出有多大的差异;两者基本都能满足项目的要求;

   再深入的就需要更专业的人继续讲解了。

原文地址:https://www.cnblogs.com/qiupiaohujie/p/13390038.html