批量修改 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 格式对应的对照表相对复杂,那么其准确率就相对要高,性能就相对低一些;然而这两种格式在我本人实际应用中,还没有发觉出有多大的差异;两者基本都能满足项目的要求;
再深入的就需要更专业的人继续讲解了。