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/