java使用utf8操作jdbc时数据库是latin1编码时乱码解决

  • java使用utf8操作jdbc时数据库是latin1编码时乱码解决已关闭评论
  • 284 views
  • A+
所属分类:MySql

1,正确配置jdbc的url

#6.0之后就是com.mysql.cj.jdbc.Driver了
jdbc.driverClassName=com.mysql.cj.jdbc.Driver

jdbc.url=jdbc:mysql://localhost:3306/loocode?user=root&password=123456&characterEncoding=Cp1252

characterEncoding=Cp1252意义:

jdbc会在执行SQL之前将sql语句字符串转换成对应的characterEncoding编码字节

为什么编码配置是Cp1252呢,可以看下jdbc官方文档:

able 5.3 MySQL to Java Encoding Name Translations

MySQL Character Set NameJava-Style Character Encoding Name
asciiUS-ASCII
big5Big5
gbkGBK
sjisSJIS (or Cp932 or MS932 for MySQL Server < 4.1.11)
cp932Cp932 or MS932 (MySQL Server > 4.1.11)
gb2312EUC_CN
ujisEUC_JP
euckrEUC_KR
latin1Cp1252
latin2ISO8859_2
greekISO8859_7
hebrewISO8859_8
cp866Cp866
tis620TIS620
cp1250Cp1250
cp1251Cp1251
cp1257Cp1257
macromanMacRoman
macceMacCentralEurope
utf8UTF-8
ucs2UnicodeBig

这个是java和mysql的编码对照表。

2,处理正确的字符串编码

    java中不需要执行SET NAMES UTF8 这种语句.

    在代码中字符串应该是使用GBK而非Cp1252.

this.jdbcTemplate = new JdbcTemplate(dataSource);
        //int count = this.jdbcTemplate.queryForObject("SELECT count(*) FROM posts", Integer.class);

SimpleJdbcInsert insert = new SimpleJdbcInsert(this.jdbcTemplate);        insert.withTableName("posts");
insert.usingColumns(new String[] {"user_id", "user_name"});        
HashMap<String, Object> stringObjectHashMap = new HashMap<String, Object>();
stringObjectHashMap.put("user_id", 1);        
//注意这句话的GBK,不能再用Cp1252
stringObjectHashMap.put("user_name", new String("你好测试".getBytes("GBK")));
insert.execute(stringObjectHashMap);
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin