mysql jdbc 连接数据库,当产生SQL异常,包含中文信息时,异常信息中文乱码。mysql驱动版本
5.1.40
产生这个提问题的主要原因是驱动对异常处理信息有BUG(MYSQL,JVM JAVA文件等所有的编码都一一致),MYSQL驱动在处理编码时使用CharsetMapping类获取编码,MYSQL语言为ENGLISH,自动从:
MaptempMap = new HashMap (); tempMap.put("czech", "latin2"); tempMap.put("danish", "latin1"); tempMap.put("dutch", "latin1"); tempMap.put("english", "latin1"); tempMap.put("estonian", "latin7"); tempMap.put("french", "latin1"); tempMap.put("german", "latin1"); tempMap.put("greek", "greek"); tempMap.put("hungarian", "latin2"); tempMap.put("italian", "latin1"); tempMap.put("japanese", "ujis"); tempMap.put("japanese-sjis", "sjis"); tempMap.put("korean", "euckr"); tempMap.put("norwegian", "latin1"); tempMap.put("norwegian-ny", "latin1"); tempMap.put("polish", "latin2"); tempMap.put("portuguese", "latin1"); tempMap.put("romanian", "latin2"); tempMap.put("russian", "koi8r"); tempMap.put("serbian", "cp1250"); tempMap.put("slovak", "latin2"); tempMap.put("spanish", "latin1"); tempMap.put("swedish", "latin1"); tempMap.put("ukrainian", "koi8u"); ERROR_MESSAGE_FILE_TO_MYSQL_CHARSET = Collections.unmodifiableMap(tempMap);
ERROR_MESSAGE_FILE_TO_MYSQL_CHARSET 中获取编码,获取后为latin1,就没有UTF8 或GBK所以报错,把ENGLISHI对应的latin1 修改为UTF-8解决。