0

这些天我一直在使用 java 和 mysql。问题是,我有一个 mysql 数据库。一个表中有一个列显示中国城市名称。一位同事将每个字符(连接、数据库、结果、服务器和系统)的 db 更改为 utf8 结果是,只有当我将 %character% 设置回 latin1 时,更改前的数据才不再正确显示。在任一字符集中,我只能正确检索一半的数据。你能帮我解决这个问题吗?我试过用java来解决这个问题,但它不起作用。

String sql = "SELECT * FROM customer_addresses";
ResultSet result = query.executeQuery(sql);
while (result.next()) {
    byte b[] = result.getBytes("city");
    c = new String(result.getBytes("city"), "UTF-8");
}

For example: there is one city in db like this 乌é²æœ¨é½å¸‚
the java print:  乌�?木�?市
it should be:乌鲁木齐市

提前致谢

4

2 回答 2

0

MySQL 服务器的默认字符集可能不是 UTF8。在从数据库中获取数据之前,尝试执行以下 SQL 查询:

SET NAMES utf8

SET CHARACTER SET utf8
于 2013-07-01T13:38:42.963 回答
0

添加characterEncoding=UTF-8连接字符串,您可以在其中连接到数据库。例如:

"jdbc:mysql://servername:3306/databasename?characterEncoding=UTF-8"

顺便说一句,数据库中的数据似乎已损坏。如果你想让数据库存储乌鲁木齐市,那就是应该在表中,而不是乌é²æœ¨é½å¸。

更新:使用数据库自​​己的工具而不是 Java 更容易解决数据如何存储在数据库中的问题。对于存储文本的每个表,请执行以下操作:

ALTER TABLE tablename CONVERT TO CHARACTER SET binary;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8;
于 2013-07-01T13:57:07.563 回答