共计 1306 个字符,预计需要花费 4 分钟才能阅读完成。
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 Name | Java-Style Character Encoding Name |
---|---|
ascii |
US-ASCII |
big5 |
Big5 |
gbk |
GBK |
sjis |
SJIS (or Cp932 or MS932 for MySQL Server < 4.1.11) |
cp932 |
Cp932 or MS932 (MySQL Server > 4.1.11) |
gb2312 |
EUC_CN |
ujis |
EUC_JP |
euckr |
EUC_KR |
latin1 |
Cp1252 |
latin2 |
ISO8859_2 |
greek |
ISO8859_7 |
hebrew |
ISO8859_8 |
cp866 |
Cp866 |
tis620 |
TIS620 |
cp1250 |
Cp1250 |
cp1251 |
Cp1251 |
cp1257 |
Cp1257 |
macroman |
MacRoman |
macce |
MacCentralEurope |
utf8 |
UTF-8 |
ucs2 |
UnicodeBig |
这个是 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);
正文完
发表至: MySql
2019-06-06