Java Mysql Emoji 配置

转自:https://blog.csdn.net/kinginblue/article/details/52445143

关键:把 Mysql 的字符集从 utf8 改为 utf8mb4 。

前提

utf8mb4 的最低 Mysql 版本支持版本为 5.5.3+,若不是,请升级到较新版本。

如果你用的是 java 服务器,升级或确保你的 mysql connector 版本高于 5.1.13,否则仍然无法使用 utf8mb4。

准备:查看当前版本及字符集

查看当前版本,Linux 命令:

# mysql -V
  • 1

登录 Mysql 进入命令行模式:

# mysql -uroot -p你的密码
  • 1

查看当前 Mysql 字符集设置:

msql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
  • 1

步骤一:改 Mysql 配置文件 my.cnf

Windows 下配置文件是安装目录下的 my.ini。

Linux 下 Mysql 配置文件一般在:/etc/my.cnf。

字符配置改为:

[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

步骤二:改已有的 database、table 和 column 字符集

msql> ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;

msql> ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

msql> ALTER TABLE table_name CHANGE column_name column_name VARCHAR(191) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
  • 1
  • 2
  • 3
  • 4
  • 5

其中的 database_name、table_name、column_name 要替换成你对应的数据库名、表名、列名。VARCHAR 的长度值也是。

步骤三:重启 Mysql 并检查更改后的字符集设置

Linux 下重启命令:

# service mysql restart
  • 1

再次登陆 Mysql 并查看字符集设置:

msql> SHOW VARIABLES WHERE Variable_name LIKE 'character_set_%' OR Variable_name LIKE 'collation%';
  • 1

此时结果应该如下:

+--------------------------+--------------------+
| Variable_name            | Value              |
+--------------------------+--------------------+
| character_set_client    | utf8mb4            |
| character_set_connection | utf8mb4            |
| character_set_database  | utf8mb4            |
| character_set_filesystem | binary            |
| character_set_results    | utf8mb4            |
| character_set_server    | utf8mb4            |
| character_set_system    | utf8              |
| collation_connection    | utf8mb4_unicode_ci |
| collation_database      | utf8mb4_unicode_ci |
| collation_server        | utf8mb4_unicode_ci |
+--------------------------+--------------------+
rows in set (0.00 sec)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

个中含义,详见鸟哥博客:深入Mysql字符集设置

步骤四:关于 JDBC URL

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=utf8&autoReconnect=true
jdbc.username=root
jdbc.password=password
  • 1
  • 2
  • 3
  • 4

autoReconnect 表示:当数据库连接异常中断时,是否自动重新连接?默认是 false。

有争议的地方

  1. 有人说: characterEncoding=utf8 可以被自动被识别为 utf8mb4(当然也兼容原来的 utf8 )。
  2. 也有人说: connector 版本大于 5.1.13 的不能加 characterEncoding=utf8。
  3. 有人反馈说: 不加 characterEncoding=utf8 才会生效,但是不加会导致中文也变成问号。
  4. 总之有种配置是错误的: characterEncoding=utf8mb4 这样配置 JDBC 会识别不了导致出错。
  5. 我的情况是: Mysql version 5.6.21。jdbc.url 不加 characterEncoding=utf8。

步骤五:迷之不生效

看他人帖子,经过以上步骤,他们都能成功存储 emoji 了,但是我的就是不生效。数据库也重启了,emoji 存进去是???,查出来也是???。

后来又看到别人对数据源进行设置,然后我又改了我的 Druid 数据源配置,新加了一个配置:

<property name="connectionInitSqls" value="set names utf8mb4;"/>
  • 1

至此,终于成功了!


阅读更多
上一篇应用连接redis报max number of clients reached问题的检查
下一篇【性能优化】JMeter使用plugins插件进行服务器性能监控
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭