数据库乱码的解决

TC16年前 (2010-09-04)网站与博客687
smf在前台一切正常,但数据库中的却是乱码。
很个性的乱码。

同在一个数据库的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的转换插件,smf当然是不能用的。
不过,从这个插件代码里可以看到,它是如何把数据库表转换为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了……

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

然后百度了一下“数据库乱码”,发现问题还不是一般的复杂==|||
而且这个帖子里提到的问题还和我这个很像(我没仔细看,不过5楼给的那个乱码和他所描述的情况可是跟我的一个模子里出来的)。
看来有问题并不总是应该先上搜索引擎的……

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

相关文章

用CSS控制不同类型链接的显示

用CSS控制不同类型链接的显示

用CSS区分内外链接是我花了点力气才实现的,放到这里留个底,供自己和其他有此需要的站长和博客主参考。最初的目的是用css区分内外链接,给外链增加一个相应的图标后来发展为论坛、百科等也分出来了==不过图标制作不能,跟fz捣鼓不出什么结果,还是请jk出山了==/* links */a{backgrou...

域名

域名

我不知道CN域名是否曾经时髦过,也不记得当初注册gmly.cn是什么时候了,但我记得我为什么要把域名换成gmly.info。第一是当时使用IX的空间,可以获赠三个顶级域名。中文站已有gmly.cn,于是也就没再启用其他域名。有免费顶级域名白送却不要,这种情形,套用大学室友的名言:有便宜不占,王八蛋…...

这个周末,把博客整合了一下

这个周末,把博客整合了一下

非常意外的是,我以前的旧博客备份非常齐全,加上强大的 wordpress,让整合成为了可能。值的一提的是,很多图片都无法导入wp,但是利用 BLUDIT 的 wp 导入插件,就能在 Bludit 中恢复这些图片,然后从 Bludit 导入 wp,wp就能同步这些图片了。具体整理完了再说吧。...

狡鸟三博

狡鸟三博

我用过的博客不止三个,但还会更新的是这三个:1、我这个QQ空间:几乎全部的博文,而且有越来越严重的“草稿化”、零碎化、随意化倾向。2、我的新浪博客:更新极少,都是正儿八经的东西,不带生活信息。目前为止,其中的文章QQ上全有,但以后如何不做保证。3、我的百度空间:关于古墓丽影的东西,不太涉猎其他,上面...

汗,又要搬了……

汗,又要搬了……

我说的不是中文站!虽然中文站确实需要搬了。我说的是我的博客,居然又要搬了。自打从 msn 搬出,似乎一直不得安宁。希望这次能维持下去……http://* qzone.qq.com我发现博客不能搬……一旦搬了,以后实在难以安定了。msn 空间用了两年,一直没有搬家的打算而一旦搬走之后,其他博客使用时间...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法和观点。