0

我确实将数据从一个数据库复制到另一个数据库。第一个 DB 有 cp1251 代码页。

第一步

我确实使用简单的 java 程序将数据从第一个 db 复制到简单的 csv 文件。在从数据库中提取数据期间,控制台输出是可读的。

csv文件utf-8的代码页(我在几个文本编辑器中检查了它,所有数据都是可读的,文本编辑器将文件的字符集定义为utf-8)

java 机器默认字符集是 utf-8 csv 文件在 utf8 字符集中新的 mysql db 在 utf8 文件中

这在 mysql cmd 中的命令状态

Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    cp866
Conn.  characterset:    cp866
TCP port:               3306
Uptime:                 25 min 29 sec

mysql db 中的所有表和字符集都在 utf-8 中

我使用另一个简单的java程序将数据插入mysql

mysql中的数据不可读

mysql服务器的配置

[server]

## UTF 8 Settings
#init-connect=\'SET NAMES utf8\'
collation_server=utf8_unicode_ci
character_set_server=utf8
#skip-character-set-client-handshake
character_sets-dir="C:/Programm/xampp/mysql/share/charsets"

[client]
default-character-set=utf8

在服务器端发现 jvm 使用 utf16 而不是 utf8,这可能是 jdbc 中的preparedstatement 问题。

4

1 回答 1

0

用于 JDBC 通信的 java 连接字符串:

jdbc:mysql://localhost/MYDB?useUnicode=true&characterEncoding=UTF-8

设置中存在重叠/冗余/过多(服务器 + 客户端 + JDBC 通信),但这应该适用于 JDBC 部分。

如果问题仍然存在,请重试默认设置,并在 CREATE DATABASE/TABLE/列上指定 UTF-8。

于 2012-12-05T09:26:00.667 回答