Java中文保存到数据库乱码问题彻底解决 |
您所在的位置:网站首页 › java向数据库写入数据 › Java中文保存到数据库乱码问题彻底解决 |
一、背景 最近写一个程序从网站上爬一些股票数据,其中股票名称有中文信息,但保存到数据库一直是乱码。 其实这个问题应该是老生常谈了,网上搜索了一下好多是在客户端设置,即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=utf82、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 |