mysql处理Latin 中文繁体字乱码解决方案
2013-01-30 14:33
120 查看
问题描述:
1. 对于一些中文繁体字符select出来出现乱码,出问题的繁体字如:燈、龍等
环境描述:
数据库编码:
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| auto_increment_offset | 1 |
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:/Program Files/mysql/share/charsets/ |
+--------------------------+----------------------------------------+
数据库表编码:也同意使用latin1编码方式
由于数据库由DBA负责,并且库结构为了保持一致(我们使用备份库),从而不能修改数据库编码
问题排查:
1.mysql 的jdbc驱动源代码拷贝下来DEBUG,最终发现了问题根源在驱动中CharSetMapping.class该类中的getJavaEncodingForMysqlEncoding(String mysqlEncoding,Connection conn)方法,该方法源代码如下:
[java]
view plaincopyprint?
public final static String getJavaEncodingForMysqlEncoding(String mysqlEncoding,
Connection conn) throws SQLException {
if (conn != null && conn.versionMeetsMinimum(4, 1, 0) &&
"latin1".equalsIgnoreCase(mysqlEncoding)) {
return "Cp1252";
}
return (String) MYSQL_TO_JAVA_CHARSET_MAP.get(mysqlEncoding);
}
出处:http://blog.csdn.net/workwithwebis3w/article/details/5875314
个人理解:可以将数据库里查出来的数据强转new String(str.getBytes("GBK"),"cp1252");
保存时直接强转: new String(str.getBytes("cp1252"),"GBK");
1. 对于一些中文繁体字符select出来出现乱码,出问题的繁体字如:燈、龍等
环境描述:
数据库编码:
+--------------------------+----------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------+
| auto_increment_offset | 1 |
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | D:/Program Files/mysql/share/charsets/ |
+--------------------------+----------------------------------------+
数据库表编码:也同意使用latin1编码方式
由于数据库由DBA负责,并且库结构为了保持一致(我们使用备份库),从而不能修改数据库编码
问题排查:
1.mysql 的jdbc驱动源代码拷贝下来DEBUG,最终发现了问题根源在驱动中CharSetMapping.class该类中的getJavaEncodingForMysqlEncoding(String mysqlEncoding,Connection conn)方法,该方法源代码如下:
[java]
view plaincopyprint?
public final static String getJavaEncodingForMysqlEncoding(String mysqlEncoding,
Connection conn) throws SQLException {
if (conn != null && conn.versionMeetsMinimum(4, 1, 0) &&
"latin1".equalsIgnoreCase(mysqlEncoding)) {
return "Cp1252";
}
return (String) MYSQL_TO_JAVA_CHARSET_MAP.get(mysqlEncoding);
}
[java] view plaincopyprint? public final static String getJavaEncodingForMysqlEncoding(String mysqlEncoding, Connection conn) throws SQLException { if (conn != null && conn.versionMeetsMinimum(4, 1, 0) && "latin1".equalsIgnoreCase(mysqlEncoding)) { return "gbk"; } return (String) MYSQL_TO_JAVA_CHARSET_MAP.get(mysqlEncoding); } public final static String getJavaEncodingForMysqlEncoding(String mysqlEncoding, Connection conn) throws SQLException { if (conn != null && conn.versionMeetsMinimum(4, 1, 0) && "latin1".equalsIgnoreCase(mysqlEncoding)) { return "gbk"; } return (String) MYSQL_TO_JAVA_CHARSET_MAP.get(mysqlEncoding); }
出处:http://blog.csdn.net/workwithwebis3w/article/details/5875314
个人理解:可以将数据库里查出来的数据强转new String(str.getBytes("GBK"),"cp1252");
保存时直接强转: new String(str.getBytes("cp1252"),"GBK");
相关文章推荐
- mysql处理Latin 中文繁体字乱码解决方案
- (转)Mysql中文乱码完美解决方案
- MySQL插入表数据中文乱码问题解决方案
- Mysql与JSP网页中文乱码问题的解决方案
- Linux mysql 中文乱码处理
- PHP 链接Mysql中文乱码的解决方案
- Linux下mysql中文乱码解决方案
- Mysql中文乱码问题完美解决方案
- 阿里云新建linux mysql中中文乱码的解决方案
- mySQL写入中文乱码 免重装 处理character_set_server编码
- PHP MYSQL 中文 乱码 终极解决方案,
- Mysql中文乱码问题完美解决方案
- Mac版MySQL插入中文乱码解决方案
- MySQL编程(0) - Mysql中文乱码问题解决方案
- mysql 插入中文乱码解决方案
- c#连接mysql中文乱码解决方案(MySql.Data.dll)
- Java链接Mysql中文乱码问题处理
- mysql中文乱码解决方案
- JavaEE应用中MySQL中文乱码完全解决方案----转自:http://www.blogjava.net/bolo
- MySQL的中文乱码编码集解决方案