MySQL 配置使用 utf8 字符编码的 JDBC url
Posted
技术标签:
【中文标题】MySQL 配置使用 utf8 字符编码的 JDBC url【英文标题】:JDBC url for MySQL configuration to use utf8 character encoding 【发布时间】:2013-08-06 04:02:03 【问题描述】:mysql 5.6 配置
我已手动配置/etc/mysql/my.cnf
以使用utf8
。见下文:
[mysqld]
character-set-server=utf8
character-sets-dir=/usr/share/mysql/charsets
[mysql]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqladmin]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlcheck]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqldump]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlimport]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[mysqlshow]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
[client]
character-sets-dir=/usr/share/mysql/charsets default-character-set=utf8
从控制台:
mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)
应用配置
现在对于网络应用,我在 Tomcat 的 context.xml
中使用了这两个连接 url
url="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8"
url="jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&characterSetResults=utf8&connectionCollation=utf8_general_ci"
以上不起作用,并为我提供了以下应用程序。
show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
这里可能有什么问题?为什么显示utf8mb4
而不是utf8
?
【问题讨论】:
【参考方案1】:您可能需要处理以下问题:
Changes in MySQL Connector/J 5.1.13 (2010-06-24)
Connector/J 不支持服务器 5.5.2 和更高版本的 utf8mb4。
Connector/J 现在自动检测配置了character_set_server=utf8mb4
的服务器,或者在建立连接时在SET NAMES=
调用中将使用characterEncoding=...
传递的Java 编码utf-8 视为utf8mb4
。 (错误 #54175)
【讨论】:
更新到最新的mysql驱动解决了我的问题。 @William 提示是正确的。utf8mb4
是 MySQL 的 UTF-8
。如果您在 MySQL 中使用 utf8
,您将错过 Unicode 的重要部分(星体符号)。将所有内容、表格、数据库切换到utf8mb4
,否则您可能会丢失数据。是的,我知道,很荒谬,对吧?他们一定是在为晚上外出编写代码的那一天弄糊涂了。
不过,它似乎应该将 character_set_connection
设置为 utf8mb4,就像 SET NAMES
所做的那样。
MySQL原来用3个字节编码utf8
...这是错误的。 UTF8 最多使用maximum of 4 bytes。但是必须保持与旧错误的向后兼容,他们通过引入utf8mb4
来修复它,这与世界其他地方称为UTF8 的编码相同。所以,use utf8mb4 if you want full unicode support。不好的是很少有人知道这一点,所以新系统不断使用错误的编码创建。
你说的这个版本不适合我,我用mysql-connector-java-8.0.26.jar代替【参考方案2】:
对于您的网络应用,请尝试使用characterEncoding=utf8
而不是 UTF-8。这解决了我的 SonarQube 容器问题。
【讨论】:
以上是关于MySQL 配置使用 utf8 字符编码的 JDBC url的主要内容,如果未能解决你的问题,请参考以下文章