广告赞助
您好,你访问的页面网站已经改版,如需最新信息,请访问新网站地址为:WWW.DayDayUp.Org.Cn
mysql_4.1/5乱码问题专用
2006-08-24 15:26:45  By: David  View:
mysql_4.1/5乱码问题专用

网页编码是gb2312(如果网页编码是utf-8,php部分可以改成相应的)
【1】命令行,就是Mysql.exe
修改my.ini,
[mysql]
default-character-set=gb2312
(转贴请注明作者)
【2】php->mysql
1 可以修改my.ini的情况下,在[mysqld]添加或修改
init-connect='SET NAMES gb2312'
2 不能修改my.ini
可以在php connect mysql后执行mysql_query('SET NAMES gb2312;');

utf-8编码的文件要比gb2312大,如果网页只有简体中文,只面对国内,没必要转成utf-8
如果网站是多语言,可以考虑utf-8

mysql 4.1版本之后引入多字符编码,我的理解是不论数据库里采用那种编码,只要存入和取出的时候设置的编码相同就不会出现乱码。mysql增加了转码,就是你存入utf-8编码,取出的时候只要告诉mysql你要得到那种编码它就返回正确的结果
如果default-character-set=gb2312 那么就不能存utf8编码的字符,但它的好处是省空间,对数据量大的有用
默认编码是latin1编码,跟gb2312类似,无法插入utf-8编码字符,会提示Data too long for column 'xx' at row
所以网页要采用utf-8编码,数据库也要采用,utf-8编码的网页提交的数据也是utf-8的。
采用latin1或者gb2312,gbk的,只要告诉mysql它你想要的编码就能得到正果
语句就是
SET NAMES xxx;
SET CHARACTER_SET xxx;

实现步骤:

1、让 MySQL 统一使用 UTF-8 编码,首先需要在 my.cnf(或者 my.ini)文件中设置:

character_set_server = utf8

然后,为了保持编码统一,最好是将输入、输出、存储等操作的编码都使用 UTF-8,简单起见,可以在每次开启数据库连接后设置以下参数即可:

SET NAMES "UTF8"

注:如果你想要使用不同的编码,比如输入、输出使用 GB2312,而存储使用 UTF-8,你需要检查并正确设置 character_set_client、character_set_connection、character_set_results 几个参数的值。笔者还是建议统一使用 UTF-8 编码,无论数据处理还是迁移都更加方便。

2、PHP 脚本中所有输出到页面的文字都转换成 UTF-8 编码(这里是指硬编码在PHP脚本中输出字符)。这个问题可以使用三种解决办法:第一种,也是最彻底的,禁止 PHP 脚本输出文字到页面,所有相关文字从数据库获取或者直接保存在模板文件中。第二种,在 PHP 脚本输出部分增加一个过滤,所有文字都自动转换成 UTF-8 编码(比较费事哦?)。第三种,学习开源软件,建立语言模板文件,PHP 脚本从中读取文字后输出。

3、所有模板文件转换成 UTF-8 编码,这个有一定工作量,但没有任何难度,唯一的问题就是需要选择合适的 UTF-8 编辑器。

4、所有输出页面 Meta 头标签中将 charset 设置为 UTF-8(如果是 xhtml 或 xml,需要设置相应的 encoding)。

5、将 Web 服务器的默认输出编码设置为 UTF-8,比如 Apache2 中需要设置:AddDefaultCharset UTF-8。


TrackBack  [ Copy ]
http://www.tuifei.com/trackback.php?id=347
    

Tracked on
评 论
发表评论
姓名:

邮件:
保存个人信息?

欢迎你参与评论,请勿发表与政策法规所不允许的言论。所引起的纠纷应由您个人承担。当您提交即说明您知晓并同意以上条件。
Powered by 7LOG  V.1.0