MySQL字符集有哪些问题?

  • 回答 (1)
  • 关注 (0)
  • 查看 (147)

请教下,MySQL字符集有哪些问题?

为啥吃兔兔为啥吃兔兔修改于
帅的惊动我国计算机大神回答于
推荐

是不是你的业务连在腾讯云的cdb上一切正常,连在自建数据库上,很多emoji表情出不来, 重点是你已经把能改的字符集都改成utf8mb4了,为什么还是不行 ?

你可能初始化的时候选择了utf8mb4,这其实是把character_set_server = utf8mb4写入到了my.cnf中mysqld下了,自己的自建数据库安装的时候没有指定字符集,那默认就是latin1了,业务跑了发现有问题,去修改了字符集,发现不管用,修改步骤如下:

1、修改my.cnf中字符集参数

mysqld

character_set_server = utf8mb4

重启数据库

2、修改表的字符集

alter table test charset=utf8mb4;

乍一看,没毛病,其实不然

#原因分析:

1、这个问题,其实你不用修改配置文件,只需用命令把现有业务表中所有列改成utf8mb4即可,恰巧你以为他做的第二步可以实现需求,殊不知,这个命令是不对的,这个命令的效果是让test表后面新增的列是utf8mb4,而原先存在的列是不会改变的,正确姿势是这样的, alter table t convert to character set utf8mb4;

友情提醒:线上业务alter table须谨慎,会锁表,请业务低峰期间操作。

2、另一个与该案例无关的小坑,如果一开始默认字符集是latin1,实例中已存在库test,修改配置文件重启数据库,在test中创建的表还是latin1字符,而非utf8mb4,重启之后需要执行alter database test default character set utf8mb4;方可解决此问题。

#总结:

部署业务时, 安装初始化数据库的时候建议将默认字符集修改为utf8mb4 ,不要等业务上线了再来改。

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动