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

    技术2022-05-20  27

    概述

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

    问题及现象描述

    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------系统级,数据库级,表级,字段级。

    在建立数据库表的时候可以设置字段级:

    CREATETABLE goods(

                      id INT(11)NOTNULLPRIMARYKEY 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的向导改,不好用。有时给不过来。


    最新回复(0)