php5, mysql 4.1.11下安装Discuz! 2.5F SP1 简体中文版乱码问题的解决

Discuz!是一个非常优秀的PHP论坛程序,并且在现在的PHP论坛商业化大潮当中,还一直都向大家提供免费的版本,是非常难得的。最新的免费版本是Discuz! 2.5F SP1

Discuz!目前支持PHP5和mysql 4.1.x,但我在安装完论坛之后,数据库的内容仍然是乱码,到他的技术支持论坛搜索了一下,找到了解决的办法

alter DATABASE `xxxxxx` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci

备份资料

替换备份文档中的gb2312为gbk编码

恢复数据

include的dbmysql.php中

        function select_db($dbname) {
mysql_query("Set Names 'GBK'"); //这一句是增加的
return mysql_select_db($dbname);
}
即可

另:如果是新安装Discuz!,最好在安装之前就把这句改好,因为在安装的过程中会向数据库中添加中文的内容。

gbk,utf8,左右为难

看《O’Reilly Upgrading to PHP 5》的时候,心血来潮,把MYSQL升级到了4.1.11,由于机器上没有什么正式系统,也就没有注意到它字符集的变化。后来就把正式应用的系统也给升级了,升级之后其它系统都没问题,唯独一个MANTIS有了麻烦,打开页面都成了乱码,幸亏有备份可以恢复,在恢复的过程中就发现了MYSQL升级带来的字符集的问题--如果MYSQL用UTF8字符集,MANTIS数据导入之后,页面显示乱码,无奈只得把MYSQL调为GBK字符集。

其实我还是愿意使用UTF8字符集的,因为没有不兼容的麻烦,作为长久保留的数据,日后转换、整理起来比较省事;在与外部进行数据交换的时候,也不存在编码转换的问题。可是我始终不明白,在使用PHP连接MYSQL接收用户输入数据,并存入数据库的时候,如果数据库编码是UTF8,是否要把SQL数据也转换为UTF8?抽空弄个小程序试试,如果真是这样那可就麻烦大了,不过我在DOS下用命令行操作UTF8字符集的MYSQL服务器是没法输入汉字的。

以前使用SYBASE的时候曾经被字符集的问题困扰了很久,因为SYBASE如果字符集用错了,某些汉字根本就无法输入,比如大写的零“○”,所以字符集从iso_1换到cp850,又从cp850换到cp936,中间舍弃了很多历史数据,MYSQL千万不要让我重蹈覆辙。

see also:
UTF-8还是GB2312称雄blog