Post
utf8mb4 最好从第一天就设成默认
字符集这类基础设置一旦拖到中后期再补,迁移成本通常会远高于一开始就设对。
这类坑我又栽了一次,所以顺手把最小处理清单记下来。对一套已经上线的系统来说,字符集问题一旦拖到后面再补,代价通常会比一开始设对高很多。
如果你的库后面迟早要支持 emoji、多语言或者更复杂的字符,utf8mb4 最好从第一天就作为默认配置。
我当时的处理步骤大致是:
- 在
my.cnf里把character-set-server改成utf8mb4 - 对已有表执行
alter table ... convert to character set utf8mb4 collate utf8mb4_bin - 升级 Java 的
mysql-driver
第三步也别漏。驱动版本太老的话,数据库即使已经切到 utf8mb4,应用侧还是可能继续掉坑。我当时确认可用的是 5.1.25,理论上 5.1.14 之后应该就可以,但这一点我没有再往下细抠。
所以这件事最实际的结论还是:如果是新建库,先把字符集想清楚,不要等业务跑起来之后再返工。