MySQL 版本和驱动
- MySQL 至少是 5.5.3+
- mysql-connector-java 至少是 5.1.13,修改连接串参数
characterEncoding=UTF-8
历史数据迁移
生成表字符迁移 SQL:
SELECT
CONCAT(
'ALTER TABLE `',
TABLE_NAME,
'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;'
) AS mySQL
FROM
INFORMATION_SCHEMA. TABLES
WHERE
TABLE_SCHEMA = 'your_schema'
生成后执行一把,这样表和列的字符集就改完了。我这里通过修改表的字符集就自动修改列的了,最好自己确认下列是否已经改对。
修改库字符集:
ALTER DATABASE `your_schema` CHARACTER
SET = utf8mb4 COLLATE = utf8mb4_general_ci;
上面示例代码中的 COLLATE
(排序规则)请按需修改。
关于连接串参数 characterEncoding
有的时候可能会觉得是写错了,应该用 characterEncoding=utf8
。其实 UTF-8
是允许客户端发送多种字符集(三字节 utf8 /四字节 utf8mb4)的配置。
如果要使用 utf8mb4 有两种方案:
- 在连接串中指定
characterEncoding=UTF-8
,MySQL 服务端不用做任何修改 - 修改 MySQL 服务端配置后重启,连接串中移除
characterEncoding=utf8
[mysql] default-character-set = utf8mb4 [mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_general_ci
这样多爽呐!
:rolling_on_the_floor_laughing:







️:slightly_smiling:
:face_with_cowboy_hat::clown_face:
:duck:
:bat:





















卧槽?终于可以输入emoji了???














前天刚刚从sqlite切换到mysql
http://tujie8.net/blogs/linker
哈哈,
MySQL 用着还行
mysql的坑啊,为啥不考虑用PostgreSQL?
百度说会
数据库编码不同关联会 导致不走索引吗?
嗯
是不是 utf8mb4 才能保存 Emoji