java向mysql数据库中插入中文乱码问题解决

时间:2023-02-07 06:40:21

1.首先统一页面和数据库的编码(以utf-8)为例

在建立数据库时

create database if not exists test default character set utf8;


在建数据库和数据表时使用default charset=utf8

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键/自动增长',
`username` varchar(40) DEFAULT NULL COMMENT '用户名',
`password` varchar(16) DEFAULT NULL COMMENT '用户密码',
`phone` varchar(40) DEFAULT NULL COMMENT '电话',
`address` varchar(255) DEFAULT NULL COMMENT '地址',
`rdate` datetime DEFAULT NULL COMMENT '注册日期',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8;

2.如果还是插入乱码,则重新对mysql进行配置


java向mysql数据库中插入中文乱码问题解决


这样就可以了。

3.还有一种简单但是繁琐的用法

尽管使用数据库时我们能够正常的添加和显示中文,但是在使用程序连接数据库时并不能够正常显示中文,为此我们需要修改MySQL的默认编码,编辑my.ini(MySQL配置文件)文件对编码进行修改
设置MySQL的默认字符集为utf8,找到客户端配置[client]在下面添加。
default-character-set=utf8
找到服务器配置[mysqld]在下面添加
default-character-set=utf8
设定MySQL数据库以utf8编码运行,连接MySQL数据库时使用utf8编码

4.

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数据库后,查看数据可以看到,插入数据变成了几个“?”,即成了乱码。

插入数据的解决方法是:

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 = new String(record.getString("wname").getBytes("ISO8859_1"));

这种办法治标不治本

5.mysql的字符集问题可以参考官方的文档

http://dev.mysql.com/doc/refman/5.1/zh/charset.html#charset-server