数据库不同的编码支持的字符集是不一样的,(比如utf8不支持emoji,utf8mb4可以支持)。如果数据库中的表的编码不一致,轻则能够影响关联查询的效率(无法使用索引),重则直接出错(无法关联)。因此,绝大多数情况下,统一库表编码是有必要的。
下面给出修改表编码的DDL命令
1.修改表
此方式,是修改表的默认不编码,单字段如果单独指定了编码不受影响
ALTER TABLE `test`
COLLATE = utf8mb4_general_ci ;
2.修改字段
此方式,修改表指定字段的编码。
ALTER TABLE `test`
COLLATE = utf8mb4_general_ci ,
CHANGE COLUMN `product_id` `product_id` VARCHAR(45) CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci' NOT NULL COMMENT '商品id' ;
3.修改表的表下所有字段
此方式,强制统一整个表的所有字段编码。
alter table `test` convert to character set utf8mb4 ,COLLATE utf8mb4_general_ci ;
4.修改整个库
似乎没有一个sql完成的方式,可以使用脚本,show tables ,循环读表 ,执行第三步。
统一库表编码的作用
当进行多表join操作时,如果join的两个字段编码不一致,查询可能会报错,即使不报错,也会影响查询性能。