数据库字符集环境:
字符集是utf8mb4
数据库的collation都是uft8mb4_general_ci
在数据库t_col下面创建一张表:
新创建的表的字符集是uft8mb4,collate是uft8mb4_general_ci符合配置设置
接下来生成一个source 文件用来导表结构:
DROP TABLE IF EXISTS `t1`; CREATE TABLE `t1` ( `FIN_ACCOUNT_ID` varchar(60) NOT NULL COMMENT '账户编号') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
表的collate变成了utf8mb4_0900_ai_ci,目前utf8mb4_0900_ai_ci与uft8mb4_general_ci在导数据时还有兼容性问题。这是个很容易忽视的坑。
查找官方文档:
mysql 8.0字符集uft8mb4默认的collate 是utf8mb4_0900_ai_ci ,这个值是参数
default_collation_for_utf8mb4控制,如果创建表时只给了字符集utf8mb4,没指定collate话,就会是默认的
utf8mb4_0900_ai_ci
测试如下:
如下所说的collate取默认值utf8mb4_0900_ai_ci
避免这类问题方法:可在会话级设置参数default_collation_for_utf8mb4
如下:
set session default_collation_for_utf8mb4=utf8mb4_general_ci;
这样变正常了。