idea用JDBC连MySQL中文乱码

数据库表

img

idea查询数据库

img

idea往数据库添加数据

img

无论是idea查询数据库还是往数据库添加数据,中文都是乱码

建议你还是贴下mysql配置用的url

保存数据前,先在控制台输出,控制台是否乱码。

但是用idea查询idea添加的数据,中文正常输出

以下内容引用CHATGPT、有用望采纳:

问题的原因是数据库连接时没有设置正确的字符集,导致中文乱码。解决思路是在连接数据库时设置字符集为UTF-8。

具体实现方法如下:

  1. 在连接数据库时添加参数useUnicode=true&characterEncoding=UTF-8,表示使用Unicode编码,并将字符集设置为UTF-8。
String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8";
Connection conn = DriverManager.getConnection(url, "root", "password");
  1. 在创建Statement时,设置ResultSet.TYPE_SCROLL_SENSITIVE和ResultSet.CONCUR_UPDATABLE,表示可以滚动且可以更新ResultSet中的数据。
Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
  1. 在查询数据库时,使用ResultSet获取结果集后,调用ResultSet.getString()方法获取字符串时,需要将字符串转换为UTF-8编码。
ResultSet rs = stmt.executeQuery("select * from user");
while (rs.next()) {
    String name = new String(rs.getString("name").getBytes("ISO-8859-1"), "UTF-8");
    String sex = new String(rs.getString("sex").getBytes("ISO-8859-1"), "UTF-8");
    System.out.println(name + "\t" + sex);
}
  1. 在往数据库中插入数据时,需要将字符串转换为UTF-8编码后再插入。
PreparedStatement ps = conn.prepareStatement("insert into user(name, sex) values (?, ?)");
ps.setString(1, new String("张三".getBytes("UTF-8"), "ISO-8859-1"));
ps.setString(2, new String("男".getBytes("UTF-8"), "ISO-8859-1"));
ps.executeUpdate();

以上是解决问题的思路和具体实现方法,需要注意的是,数据库表的字符集也需要设置为UTF-8,否则还会出现中文乱码的问题。

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632

当在idea中使用JDBC连接MySQL时,出现中文乱码问题可能是因为以下原因:

  1. MySQL数据库默认的字符集为latin1,而JDBC默认的字符集是UTF-8,这导致MySQL无法正确地解析UTF-8编码的中文字符。要解决此问题,需要将MySQL的字符集更改为UTF-8。

  2. JDBC驱动程序也需要正确配置以使用UTF-8字符集。可以通过在JDBC连接URL末尾加上一个参数useUnicode=true&characterEncoding=utf-8来告诉JDBC使用UTF-8编码。

  3. 当向MySQL数据库写入数据时,一定要确保使用与数据库字符集相匹配的编码方式。例如,在Java代码中使用String.getBytes("UTF-8")将字符串转换为字节数组,然后将其写入MySQL数据库。

以下是一些可能有用的解决方案:

  1. 修改MySQL默认字符集

在MySQL 5.5及以下版本中,默认使用latin1字符集。如果您想更改它,请编辑my.cnf文件,将以下行添加或修改为mysqld节下:

[mysqld]
character_set_server=utf8
collation-server=utf8_general_ci

保存并重新启动MySQL服务。

  1. 指定JDBC连接URL参数

请将JDBC连接URL修改为包含useUnicode=true和characterEncoding=UTF-8参数的形式:

jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8

  1. 在Java代码中设置编码方式

如果仍然无法解决中文乱码问题,请在Java代码中使用UTF-8编码与MySQL交互。例如:

Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8",
    "root", "password");
PreparedStatement pstmt = conn.prepareStatement(
    "INSERT INTO table (column) VALUES (?)");
String value = "中文";
byte[] utf8Bytes = value.getBytes("UTF-8");
pstmt.setBytes(1, utf8Bytes);
pstmt.executeUpdate();

以上是一些可能有用的解决方案,希望能够帮助您解决问题。