JDBC url为MySQL配置使用utf8字符编码 [英] JDBC url for MySQL configuration to use utf8 character encoding
问题描述
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>显示变量,如char%;
+ -------------------------- + ------------------ ---------- +
| Variable_name |价值|
+ -------------------------- + ------------------ ---------- +
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem |二进制|
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | / usr / share / mysql / charsets / |
+ -------------------------- + ------------------ ---------- +
8行(0.01秒)
< h2>应用程序配置
现在,对于Web应用,我在Tomcat的 context.xml中使用了这两个连接url
url =jdbc:mysql:// localhost:3306 / test?autoReconnect = true& amp; amp; useUnicode = true& amp ; characterEncoding = UTF-8
url =jdbc:mysql:// localhost:3306 / test?autoReconnect = true& amp; useUnicode = true& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; characterSetResults = utf8& amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; amp; 显示变量,如char%;
+ -------------------------- + ------------------ ---------- +
| Variable_name |价值|
+ -------------------------- + ------------------ ---------- +
| character_set_client | utf8mb4 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem |二进制|
| character_set_results | utf8mb4 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | / usr / share / mysql / charsets / |
+ -------------------------- + ------------------ ---------- +
这里可能有什么问题?为什么它显示 utf8mb4
而不是 utf8
?
解决方案您可能需要执行以下操作:
MySQL Connector / J 5.1.13(2010-06-24)中的更改
-
连接器/ J不支持服务器5.5.2和更新版本的utf8mb4。
Connector / J now auto-检测配置了character_set_server = utf8mb4的服务器,或者在建立连接时使用的SET NAMES =调用中处理使用characterEncoding = ...作为utf8mb4传递的Java编码utf-8。 (Bug#54175)
MySQL 5.6 Configuration
I have configured /etc/mysql/my.cnf
manually to use utf8
. See below:
[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
From console:
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)
Application configuration
Now for the web-app I used both of this connection url in Tomcat's context.xml
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"
Above does not work and gives me following for the application.
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/ |
+--------------------------+----------------------------+
What might be wrong here? Why it is showing utf8mb4
instead utf8
?
解决方案 You may have to do with the following:
Changes in MySQL Connector/J 5.1.13 (2010-06-24)
Connector/J did not support utf8mb4 for servers 5.5.2 and newer.
Connector/J now auto-detects servers configured with character_set_server=utf8mb4 or treats the Java encoding utf-8 passed using characterEncoding=... as utf8mb4 in the SET NAMES= calls it makes when establishing the connection. (Bug #54175)
这篇关于JDBC url为MySQL配置使用utf8字符编码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!