在写团购网站项目是出现了中文乱码情况。这里总结了相关知识及解决方法和大家分享。
Jsp页面除数据库查询出来的中文字符有乱码情况外,其他中文字符一切正常如图1-1。什么原因?如何解决?
相关知识
什么是字符编码:字符编码就是用二进制表示的字符。不同的二进制表示形式形成了不同的字符编码集,他们用不同的。具有代表性的有UTF-8,GBK,GB2312,ISO-8859-1。
UTF-8又称为万国码,它的字节长度是可变的从1-6个字节不等。它能表示的字符集也非常的大。
GBK是GB2312的拓展,它是中华人民共和国全国信息技术标准技术委员会于1995年制定的。是windows采用的字符集编码,它占有2个字节。
ISO-8859-1是欧洲用的字符编码,它占有一个字节。是mysql的默认编码。
字符和它对应的字节是一一对应的吗?
是的,这就是为什么图片要转换成字节存入数据库而字符却不需要的原因。图片如果变成字符后存入数据库,由于它里面的字节有些是在字符集之外的。比如ASCII的前29个字节是没有像对应的字符的,如果你用的是windows那么,数据库存的字节只能再GBK范围内。所以图片就不是原来的图片了。
mysql数据库的字符集有4级------系统级,数据库级,表级,字段级。
在建立数据库表的时候可以设置字段级:
CREATE TABLE goods(
id INT(11) NOT NULL PRIMARY KEY auto_increment,
_describe CHAR(100) charset 'gbk',
price INT(11),
cPrice INT(11),
save INT(11),
city CHAR(10) charset 'gbk',
image CHAR(100),
isOld Boolean
);
系统级,数据库级的设置可以用 。他们默认为ISO8859-1也就是latin1。
查看字段级编码用:show full columns form tablename;命令
查看表级编码用:show create table tablename;命令。
Mysql的连接属性用于设置connection的字符编码,客户端的字符编码,系统的字符编码等。Mysql是以这些编码形式和外界交互的。
查看属性的命令是:show variables like ‘char%’;
修改属性的命令是:set names ‘GBK’;
Jsp页面的contentType是要显示在用户界面的字符编码。contentType是给jvm用的,告诉它jsp代码的字符编码。
最好把my.ini的配置文件的两个default-character-set=latin1改成default-character-set=gbk用mysql的向导改,不好用。有时给不过来。