字符编码知识以及mysql中文乱码的解决

概述

在写团购网站项目是出现了中文乱码情况。这里总结了相关知识及解决方法和大家分享。

问题及现象描述

Jsp页面除数据库查询出来的中文字符有乱码情况外,其他中文字符一切正常如图1-1。什么原因?如何解决?

相关知识

什么是字符编码:字符编码就是用二进制表示的字符。不同的二进制表示形式形成了不同的字符编码集,他们用不同的。具有代表性的有UTF-8,GBK,GB2312,ISO-8859-1

UTF-8又称为万国码,它的字节长度是可变的从1-6个字节不等。它能表示的字符集也非常的大。

GBKGB2312的拓展,它是中华人民共和国全国信息技术标准技术委员会于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的向导改,不好用。有时给不过来。

你可能感兴趣的:(mysql)