在将测试库的新增表通过Navicat向阿里云的MySql数据库复制后,发现前端页面申请查问失败。
指标数据库的默认排序规定是utf8mb4_0900_ai_ci
,已存在的表都应用了这个编码,而起源数据库的排序规定是utf8mb4_unicode_ci
,新复制的表都用的是后者。
数据库进行多表关联查问时,如果两张表的字符集或者排序规定不统一,就会报错。
从Navicat里手动批改编码效率很低,若只是改一下表,也用不了多久,但问题是只改表是不行的,表内所有varchar的编码并不会跟着表走。
因而还是须要走批量操作的路子。
批量批改字段
SELECT CONCAT( 'ALTER TABLE `', TABLE_NAME, '` MODIFY `', COLUMN_NAME, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci', ( CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END ), ';' ) FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '数据库名' AND ( DATA_TYPE = 'varchar' OR DATA_TYPE = 'char')
批量批改表
SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;' ) FROM information_schema.TABLES WHERE TABLE_SCHEMA = '数据库名';
将以上SQL语句中的utf8mb4
、utf8mb4_unicode_ci
、数据库名
别离改成本人须要的值,胜利执行后,将执行后果即SQL语句复制进去,再执行这些SQL语句即可。