本贴最后更新于 246 天前,其中的信息可能已经物是人非

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 有两种方案:

  1. 在连接串中指定 characterEncoding=UTF-8,MySQL 服务端不用做任何修改
  2. 修改 MySQL 服务端配置后重启,连接串中移除 characterEncoding=utf8
    [mysql]
    default-character-set = utf8mb4
    [mysqld]
    character-set-server = utf8mb4
    collation-server = utf8mb4_general_ci

具体细节请参考这里这里

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    368 引用 • 390 回帖 • 1117 关注
  • 字符集
    3 引用 • 16 回帖
  • UTF8
    3 引用 • 25 回帖
  • Emoji
    7 引用 • 88 回帖
感谢    关注    收藏    赞同    反对    举报    分享