字符串转换问题

时间:2013-07-01 13:27:12

标签: java mysql utf-8 character-encoding

这些天我一直在使用java和mysql。 问题是,我有一个mysql数据库。一个表中有一列显示中国城市名称。一个同事将每个字符(连接,数据库,结果,服务器和系统)的数据库更改为utf8。结果是,只有当我将%字符%设置回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:乌鲁木齐市

提前致谢

2 个答案:

答案 0 :(得分:0)

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

SET NAMES utf8

SET CHARACTER SET utf8

答案 1 :(得分: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;