说明
1 字符集分为字符集和具体的字符集排序规则
字符集utf8mb4,字符集规则(空,utf8mb4_bin,utf8mb4_general_ci),一般情况下只需要关注字符集,但是特殊情况需要加排序规则
如果字符集为utf8mb4,那么客户端连接需要使用set names utf8mb4;
2 字符集的优先级为 列级别->表级别->库级别->全局变量级别
升级表字符集
语法: ALTER TABLE T2 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci 更改表以及字段的字符集
批量修改语法: SELECT CONCAT( 'ALTER TABLE ', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;' ) FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'testdb';
注意点:
1. 修改表的字符集是属于copy操作,会阻塞业务,采用pt-osc工具进行修改
2. 原表修改字符集后只能对原表修改后新插入的记录影响,采用pt-osc工具进行修改会避免这个问题,因为属于建立新表插入数据
3. 由utf8->utf8mb4的话可能导致索引长度超过767,全局变量检查 innodb_large_prefix=on innodb_file_format= BARRACUDA 同时开启生效
网友评论