·建站首页 ·钻石 ·繁體
您的位置: 中国建站之家 -> CMS 专区 -> phpwind论坛 -> mysql > 4.1 时的乱码和中文名不能登陆问题

mysql > 4.1 时的乱码和中文名不能登陆问题

作者:jz123  来源:www.jz123.cn  发布时间:2006-11-22 10:17:49  发布人:jz123

安装BLOG后标题和内容出现乱码和中文名不能登陆的解决办法

首先BS一下斑竹,不关什么问题都是一句"检察服务器配置"
看到不少XD和我一样,反映安装BLOG后标题和内容出现乱码,困惑多日,经高人指点后得到解决方法,不感独享,发出来供大家参考.
出现这种现象的主要原因是这类用户使用的都是mysql4.1以上的版本.下面作一个说明,希望出现这个问题的朋友都能耐心的把这个文档看完!!!

原理
注意:本文档只对MySQL 4.1及以上的数据库版本有效,之前的MySQL版本,由于没有提供对字符集的完整支持,因此也不存在此类问题。

MySQL 4.1开始,对多语言的支持有了很大变化 (这导致了问题的出现)。尽管大部分的地方 (包括个人使用和主机提供商),MySQL 3、4.0 仍然占主导地位;但 MySQL 4.1 是 MySQL 官方推荐的数据库,已经有主机提供商开始提供并将会越来越多;因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题。

MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;
当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的;
想要进行“正确”的存储和得到“正确”的结果,最方便的是在所有query开始之前执行一下:

SET NAMES 'gbk';
其中gbk是数据库字符集。

解决方案
修改install.php文件
找到
mysql_query("CREATE DATABASE $dbname");
在这句后面加如下几句:
//增加如下几句,用于设置每个数据库连接用的字符集
mysql_query("SET character_set_client = gb2312");
mysql_query("SET character_set_results = gb2312");
mysql_query("SET character_set_connection = gb2312");
//end
要支持繁体中文的话把gb2312改成gbk就成了
注意:有2处

修改mod/db_mysql.php
找到
//mysql_query("SET NAMES 'lanti1'");
删出这句后加如下几句:
//增加如下几句,用于设置每个数据库连接用的字符集
mysql_query("SET character_set_client = gb2312");
mysql_query("SET character_set_results = gb2312");
mysql_query("SET character_set_connection = gb2312");//end
要支持繁体中文的话把gb2312改成gbk就成了

修改这2个文件后就可以解决以上问题了,已经测试通过.

可以直接下载覆盖原文件即可


将本文收藏到QQ书签与更多好友分享