MySQL Java + Mysql UTF8 问题
在使用Java连接MySQL数据库时,经常会遇到中文乱码的情况。这个问题与MySQL表的字符集设置有关,因为默认情况下,MySQL使用的字符集为Latin1,而Java使用的字符集为UTF-8,因此在数据传输时产生了字符集不匹配的问题。在本文中,我们将介绍如何避免这个问题。
阅读更多:MySQL 教程
设置MySQL字符集为UTF-8
要解决这个问题,首先需要将MySQL表的字符集设置为UTF-8,这样就能够在Java和MySQL之间正确传输数据了。设置字符集的方法如下:
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
其中,database_name为你要设置的数据库名。如果想要设置表的字符集为UTF-8,可以使用以下语句:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
Java代码设置
在Java代码中,你需要设置正确的字符集,以便正确地读取和写入数据。创建Connection时需要设置正确的字符集:
String url = "jdbc:mysql://localhost:3306/database_name?useSSL=false&useUnicode=true&characterEncoding=utf8";
Connection conn = DriverManager.getConnection(url, "username", "password");
其中,database_name是你要连接的数据库名,username和password是数据库的用户名和密码。在连接的URL中,useUnicode和characterEncoding参数需要设置为utf8,这样就能够正确地调用中文。
为了保证所有的数据表能够正常地使用UTF-8字符集,你也需要在Java代码中设置字符集。例如:
PreparedStatement p = c.prepareStatement("SELECT * FROM table_name WHERE name = ?");
p.setString(1, name);
ResultSet rs = p.executeQuery();
在上面的代码中,setString()方法会使用utf8字符集作为默认字符集,从而正确地查询中文数据。
示例
以下是一个示例代码,它演示了如何在Java中正确地使用UTF-8字符集连接MySQL数据库:
import java.sql.*;
public class MySQLDemo {
public static void main(String[] args) throws SQLException {
// 连接到MySQL数据库
String url = "jdbc:mysql://localhost:3306/database_name?useSSL=false&useUnicode=true&characterEncoding=utf8";
Connection conn = DriverManager.getConnection(url, "username", "password");
// 查询表中的数据
PreparedStatement p = conn.prepareStatement("SELECT * FROM table_name WHERE name = ?");
p.setString(1, "张三");
ResultSet rs = p.executeQuery();
// 输出结果
while (rs.next()) {
System.out.println(rs.getString("name"));
}
// 关闭连接
conn.close();
}
}
在上面的代码中,我们使用UTF-8字符集连接MySQL数据库,并查询名字为“张三”的记录。
总结
在Java中连接MySQL数据库时,需要正确设置字符集,以避免中文乱码的问题。要设置MySQL表的字符集为UTF-8,并在Java代码中设置正确的字符集,以保证正确地读取和写入中文数据。
极客教程