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进行配置
这样就可以了。
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