java读写Mysql数据库乱码
来源:互联网 发布:sql timestampdiff 编辑:程序博客网 时间:2024/06/11 08:40
写代码又遇到了万恶的中文乱码问题,比较奇怪的是server上已有的代码,在链接时通过"useUnicode=true&characterEncoding=gbk"转码后无乱码,但在本机上使用同样的代码读写得到的确实中文乱码。数据库是远程server,环境不能改动,在网上搜到的大部分方法都是抄来抄去且不能解决实际问题的方法。所幸搜了半天还是找到了一个。查看server数据库编码,执行sql:“ show variables like 'char%'; ” 得到各种字符编码如下:
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 /usr/share/mysql/charsets/
可知:mysql使用的是Latin1字符集,那么下面的问题就是怎样在java端把从数据库中读取出的内容转为Latin1编码了搜索一番后找到下面的内容。
【以下是搜到的内容,原文网址:http://ghostgate.blog.163.com/blog/static/20570131200811442747326/】
MySQL默认使用 ISO-8859-1 ( 即Latin1 ) 字符集,而JAVA内部使用Unicode编码,因此在JAVA中向MYSQL数据库插入数据时,或者读取数据时,都需要先转换一下编码方式:
插入数据如:
...
String str="中文";
String sql = "insert into Tb (xxx) values (?)"
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,str);
pstmt.executeUpdate();
这样插入到Mysql数据库后,用mysql.exe连接查看数据可以看到,插入数据变成了几个“?”呈,也即成了乱码。
解决方法是:
String str="中文";
str = new String(str.getBytes(),"ISO8859_1"); //加入此句,改变编码为iso-8859-1
String sql = "insert into Tb (xxx) values (?)"
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1,str);
pstmt.executeUpdate();
读取数据:方法与插入数据类似,如下:
...
String str = rs.getString(1);
str = new String(str.getBytes("ISO8859_1"); //由ISO8859-1编码还原为JAVA内部默认字符集
//或者 str = new String(str.getBytes("ISO8859_1","GBK");
- java读写Mysql数据库乱码
- PHP MySQL读写数据库乱码
- java数据库插入mysql乱码
- Mysql:关于数据库数据读写的乱码问题
- Java读写MySQL数据库小实例
- java实现mysql数据库的读写
- java读取mysql数据库中文乱码问题
- java连接mysql数据库乱码的解决方案
- java 链接mysql数据库以及乱码
- java连接mysql数据库乱码的解决方法
- java servlet 连接mysql数据库乱码
- java、MySQL数据库中文乱码问题
- java使用jdbc访问mysql数据库乱码
- java读写文件乱码
- java 中文 乱码 读写
- java连接mysql数据库;java读写excel表格
- Hibernate读写MySQL数据库
- mysql数据库读写分离
- 避免Java应用中NullPointerException的技巧和最佳实践
- 关于如果自己定义安卓的布局界面的初学研究
- 手斧Linux – 从LFS到Funtoo (62)
- 互联网思维
- 手斧Linux – 从LFS到Funtoo (63)
- java读写Mysql数据库乱码
- 结构体数组
- 手斧Linux – 从LFS到Funtoo (64)
- swift中单例实现
- Python和tornado的下载、安装及配置
- Python.for loop 之坑
- ubuntu下创建eclipse桌面图标
- 手斧Linux – 从LFS到Funtoo (65)
- 手斧Linux – 从LFS到Funtoo (66)