java - 为什么 java 字符串在 MYSQL 中没有保存为 UTF-8?

标签 java mysql character-encoding

message = new String(("round " + id).getBytes("UTF-8"));

conn = DriverManager.getConnection("jdbc:mysql://" + host + "/" + db + "?useUnicode=true&characterEncoding=UTF-8&"
              + "user=" + login + "&password=" + password);

当我插入编码为UTF-8 CI的数据库时,得到类似这样的内容������������������ ���� 179,java文件编码是utf-8,我哪里做错了?

+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+

最佳答案

通常,MySQL 带有一个预定义的系统变量列表。如果要列出它们,可以打开 MySQL 提示符并键入:

mysql> SHOW VARIABLES LIKE  'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | latin1                     |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

如图所示,MySQL的默认编码是latin1。为了更改它,您需要稍微编辑一下您的 my.cnf 文件并添加以下行:

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
collation-server = utf8_unicode_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

当您配置my.cnf 文件并重新启动MySQL 服务器时,您会注意到不同之处。

编辑: 您可以像这样为 JDBC 的 DriverManager 设置编码:

DriverManager.getConnection("jdbc:mysql://" + host + "/" + db + "?useUnicode=true&"
              + "user=" + login + "&password=" + password + "&characterEncoding=utf8");

关于java - 为什么 java 字符串在 MYSQL 中没有保存为 UTF-8?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21092007/

相关文章:

java - setOnScrollListener 无限循环并加载而不在 GridView 中滚动?

php - 检查 while 循环中所有字段的值,无需在每个字段上使用单独的 if 语句

mysql - 选择两个表的差异

string - 如何使用变音符号从 JSP 页面正确解释参数

python - 从 VBA 到 Flask 的 HTTP 请求的编码问题

java - 排序数值的高效搜索

java - 设置OnKeyListener函数错误

Java REGEX XML 解析/缩减同时保持结构 HowTo

php - 无法 ECHO PostgreSQL 查询结果 - PHP

haskell - 使用八进制转义序列解码文本输入