用于 MySQL 配置的 JDBC url 使用 utf8 字符编码

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/18058297/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-31 18:25:43  来源:igfitidea点击:

JDBC url for MySQL configuration to use utf8 character encoding

mysqljdbcencodingutf-8collation

提问by Kowser

MySQL 5.6 Configuration

MySQL 5.6 配置

I have configured /etc/mysql/my.cnfmanually to use utf8. See below:

我已/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

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

现在对于网络应用程序,我在 Tomcat 中使用了这两个连接 url 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 utf8mb4instead utf8?

这里可能有什么问题?为什么它显示utf8mb4代替utf8

回答by wchiquito

You may have to do with the following:

您可能需要处理以下问题:

Changes in MySQL Connector/J 5.1.13 (2010-06-24)

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=utf8mb4or treats the Java encoding utf-8 passed using characterEncoding=...as utf8mb4in the SET NAMES=calls it makes when establishing the connection. (Bug #54175)

  • Connector/J 不支持 utf8mb4 用于服务器 5.5.2 和更新版本。

    现在,Connector/J 会自动检测配置有character_set_server=utf8mb4Java 编码 utf-8 的服务器或将其处理characterEncoding=...utf8mb4SET NAMES=建立连接时进行的调用中使用的 Java 编码 utf-8 。(错误#54175)

回答by J Roysdon

For your web-app please try characterEncoding=utf8instead of UTF-8. That resolved my SonarQube container issue.

对于您的网络应用程序,请尝试characterEncoding=utf8代替 UTF-8。这解决了我的 SonarQube 容器问题。