Java中文保存到数据库乱码问题彻底解决

您所在的位置:网站首页 java向数据库写入数据 Java中文保存到数据库乱码问题彻底解决

Java中文保存到数据库乱码问题彻底解决

2023-04-18 01:32| 来源: 网络整理| 查看: 265

一、背景

最近写一个程序从网站上爬一些股票数据,其中股票名称有中文信息,但保存到数据库一直是乱码。

其实这个问题应该是老生常谈了,网上搜索了一下好多是在客户端设置,即Java代码中设置连接字符串:

jdbc:mysql://127.0.0.1:3306/stock?useUnicode=true;characterEncoding=UTF-8

即加上useUnicode和characterEncoding两个参数;

还有就是设置编辑器的编码,在IDEA里设置文件编码格式,这个只影响代码中字符串常量的情况:

可在我的场景下上述方法依然无效。

二、问题定位

为了排除是不是代码问题,试了直接写字符串常量到数据库,代码如下:

/** * 写入到数据库 * @param str */ private void writeToDb(String str){ try { String connStr; connStr = "jdbc:mysql://127.0.0.1:3306/stock?useUnicode=true;characterEncoding=UTF-8"; Connection conn = DriverManager.getConnection(connStr, "root", ""); conn.setAutoCommit(false); PreparedStatement pst = conn.prepareStatement(""); String sql = "INSERT INTO test(str) VALUES ('" + str + " ')"; pst.addBatch(sql); pst.executeBatch(); conn.commit(); pst.close(); conn.close(); }catch (Exception ex){ } }

直接调用:

writeToDb("中国平安");

发现还是乱码,初步可以排除客户端的问题,然后看服务端配置,执行以下SQL:

show GLOBAL variables like "%chara%";

结果如下:

原来是服务端编码设置问题,加上以下配置问题解决:

character_set_client=utf8character_set_server=utf8

三、总结

1、保证服务端编码正确

通过执行以下命令看结果,重点看character_set_client和character_set_server:

show GLOBAL variables like "%chara%";

如果不行,在my.ini配置文件加上配置,具体字符集看自己的场景:

character_set_client=utf8character_set_server=utf8

2、Java连接字符串:

jdbc:mysql://127.0.0.1:3306/stock?useUnicode=true;characterEncoding=UTF-8

注意字符集是UTF-8不是UTF8

3、设置IDE

这个因每个ID情况而定,主要解决常量字符串乱码的问题。

程序员如何提高解决问题的能力

Spring Cloud系列二:Ribbon

MyBatis源码分析四:动态Sql实现



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3