数据库乱码的解决
很个性的乱码。

同在一个数据库的wordpress却显示正常。

我所认为的原因在于,wp是utf8编码,也就是数据库、表、程序所用的字符编码是一致的。
而smf却不同。
下图前两行就是wp的表,后面的则是smf表格。

早期smf对utf8编码支持不佳,记得当年换主机的时候(似乎是ix换到网元那会儿),smf的编码问题很是费了subaru一番功夫,还去请教小月(没错,做自制关卡的那个
问题似乎是,两个主机的数据库编码一个是用了latin1,一个却是utf8,导致从一个数据库中导出的数据,导入另一个数据库之后,不仅数据库中是乱码,就是前台也显示了乱码。
最后到底是怎么解决的,不知subaru还记不记得……
我只记得当初dump来dump去的,搞得即使我没有参与具体操作,也觉得subaru很辛苦==
最早使用的bmf论坛那些数据,也是subaru后来转到smf论坛格式导入的。
因为前台显示正常,也就一直没去看数据库。我也是才发现,数据库中的论坛数据还是乱码(这都多少年了才发现==)
smf后续版本中,对utf8已经支持得很好了,至少2.0版本在全新安装时还有个“强制设定数据库编码为UFT8”的设置。
但中文站的论坛是从smf1.X逐步升级上来的,数据库编码一直就是latin1。
所以解决数据库乱码问题,我的第一个思路就是把smf表的字符集转到utf8。
而且还得是最偷懒的方法(我的属性使然……);也不能涉及服务器端的修改(我的权限不够)。
所以,类似导出smf表然后在本地修改后再导入,或者是在服务器上修改ini设置和动用mysql命令等等,就暂时不考虑了。
这回不敢不备份了,数据库完了就真的全完了……
WordPress以前也有编码问题,这里有个latin1到utf8的
不过,从这个插件代码里可以看到,它是如何把数据库表转换为utf8的。
// Change all text/string fields of the tables to their corresponding binary text/string representations.
foreach ( (array) $tables as $table )
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET binary", $link_id);
// Change database and tables to UTF-8 Character set.
mysql_query("ALTER DATABASE " . DB_NAME . " CHARACTER SET utf8", $link_id);
foreach ( (array) $tables as $table )
mysql_query("ALTER TABLE $table CONVERT TO CHARACTER SET utf8", $link_id);
前两步骤我并不需要,因为数据库已经是utf8编码了。
先拿membergroups测试一下。
ALTER TABLE 表前缀_membergroups CONVERT TO CHARACTER SET utf8
然后看了一下那个表,果然好了。

再看看数据库,意外发现居然这样一下就全搞定了==
不仅是membergroups,其他所有的表格也全都转换为utf8了……

这……
是不是顺利得有点过头了==

然后百度了一下“数据库乱码”,发现问题还
而且
看来有问题并不总是应该先上搜索引擎的……

编辑:
经小小鸟的提醒,论坛数据库字符集修改之后,论坛前台全成了问号
这要用到smf自身的数据库管理功能。在论坛管理后台的论坛维护中有个设置论坛数据库为UTF8的选项,用那个修复一下即可
字符集问题解决后的意义之一,已在论坛发帖说明:。


