昨天晚上用Eclipse连接MySQL,然后插入数据测试一下,结果插入成功了,可是乱码了。
Class.forName("com.mysql.jdbc.Driver"); // 加载驱动 Connection connection = DriverManager.getConnection( "jdbc:mysql://localhost:3306/jdbc_text01?useUnicode=true&characterEncoding=UTF8", "root", "123"); // 连接数据库 Statement state = connection.createStatement(); // sql处理 int influenceLine = state .executeUpdate("INSERT INTO newtable VALUES(null,'测试数据','天国')"); System.out.println("影响行数:" + influenceLine);
数据我用Navicat查看后,发现中文被?取代了,本来想着不就编码问题嘛,以前也发生过,然后我查看了Eclipse的开发环境编码,发现编码格式是GBK,那就难怪了,我数据库的编码格式是UTF-8,然后我怀着乐观的心态修改了开发环境的编码格式,还有工程的编码格式,最后还把文件的编码也检查了,确保无误。
PS:
1、开发环境编码修改:
点击Eclipse菜单栏的Window - - - 选择Preferences - - - 在查询框输入 Workspaces - - - 选择Workspaces - - - 在Text file encoding的Other处选择UTF8
2、工程编码修改:
右击工程 - - - 选择Properties - - - 在Text file encoding的Other处选择UTF8
3、文件编码修改:
右击.java文件 - - - 选择Properties - - - 在Text file encoding的Other处选择UTF8
好了,正如上面修改的步骤一样,我修改完Eclipse的编码后,又在Navicat里查询了数据库的编码格式:
SHOW VARIABLES LIKE '%char%'; character_set_client = utf8 character_set_connection = utf8 character_set_database = utf8 character_set_filesystem = binary character_set_results = utf8 character_set_server = utf8 character_set_system = utf8
结果如我所料,没有问题,然后我就信心满满的重新插入数据了,结果中文还是被?取代,这里我就有点疑惑了,妈妈告诉我,接着我就上百度查了,结果发现很多同僚都有这个问题阿,可是我看了很多博客和疑问解答后,都没找到根本原因,网上的同僚都说是编码不一致、myini文件没设置好、重装MySQL、还有的说用gbk,这些方式我逐一都试过了,结果还是一样,这可谓是让我信心大跌阿,本来以为只是个小问题,没想到要倒腾那么久,从昨天下午6点多弄到晚上11点多都没弄好,然后由于我有早起的习惯,所以11点多就关电脑了,打算第二天再弄。
第二天起床,洗漱完就打开电脑,又上网查有关资料,结果还是没啥用,然后又问了几个朋友,他们都说是编码问题,说让我仔细看看,我表示我已经看了十几遍了,每次都带着侥幸的心理说会不会我眼花了,结果还是一样。
后来我对着Eclipse发呆,突然想到会不会是数据库驱动问题,然后就上网下载了一个mysql-connector-java-5.1.14-bin,而我原来用的是mysql-connector-java-3.0.10-stable-bin,结果插入中文成功了!
所以有时候编码问题如果确保没错,可能是驱动的问题,大家要记得用比较新的驱动,我的可能是驱动版本太低了(不过我朋友用倒是没问题),好了,这些就是鄙人的见解,第一次写博客哈,有什么不好的地方还请大家多多指点迷津!谢谢!