下面详细讲解一下“Java向数据库插入中文出现乱码解决方案”的完整攻略。
问题描述
在使用Java向数据库插入中文字符时,可能会出现乱码现象。这是由于Java和数据库之间的字符集不一致所导致的。
解决方案
解决方法有两种:修改Java代码或修改数据库配置。
方案一:修改Java代码
在Java代码中添加如下内容,用于指定字符集为UTF-8:
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
Connection conn = DriverManager.getConnection(url, username, password);
以上代码中,url字符串中的useUnicode和characterEncoding参数指定了字符集为UTF-8,serverTimezone参数指定了时区为UTC。
在执行插入操作时,需要使用PreparedStatement对象,代码如下:
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users(name, age) VALUES (?, ?)");
pstmt.setString(1, "张三");
pstmt.setInt(2, 18);
pstmt.executeUpdate();
以上代码中,pstmt.setString(1, "张三")语句用于设置name字段的值为“张三”,这个中文字符将在Java中被编码为UTF-8格式,然后发送到数据库中。
方案二:修改数据库配置
如果无法修改Java代码,可以尝试修改数据库配置。
在MySQL数据库中,可以使用以下命令修改默认字符集为UTF-8:
ALTER DATABASE database_name CHARACTER SET utf8 COLLATE utf8_general_ci;
执行以上命令后,重新连接数据库即可。
同时,为了确保表和表中的字段也是UTF-8格式的,需要使用以下命令修改表和表中的字段:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
示例
以下是Java代码示例:
public class InsertDataTest {
public static void main(String[] args) throws Exception {
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC";
String username = "root";
String password = "root";
Connection conn = DriverManager.getConnection(url, username, password);
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO users(name, age) VALUES (?, ?)");
pstmt.setString(1, "张三");
pstmt.setInt(2, 18);
pstmt.executeUpdate();
pstmt.close();
conn.close();
}
}
以下是MySQL数据库配置示例:
ALTER DATABASE test CHARACTER SET utf8 COLLATE utf8_general_ci;
ALTER TABLE users CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java向数据库插入中文出现乱码解决方案 - Python技术站