这些天我一直在使用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:乌鲁木齐市
提前致谢
答案 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;