同虎请进来.相同论坛+数据库的乱码问题. 急求解决方案!
我遇到的问题:西安主机和江苏主机装的是一模一样的论坛,但是西安主机运行完好,江苏主机全是乱码.
西安主机环境是:
*
windows2003+php 4.3.11+mysql 5.0.41+discuz4.0
说明:
mysql 5.0.41 运行时打勾了Enable Strict Mode.和Standard Character Set(Makes Latin1 the default charse)
用phpMyAdmin-2.8.2.4 查看是:
mysql charset=utf8-unicode,mysql collation=utf8_general_ci
Discuz的版本是4.0 GBK版本.
disucuz config.inc.php 里headercharset = 0; $charset = 'gb2312';(此为重点!)
西安的表是全部是latin1_swedish_ci.
**江苏主机环境是是:
(?)+php 5.0+mysql5.0.16+discuz4.0(当然是这个,一样的,数据库都和上面一样)
说明:
mysql 5.0.16运行时情况未知.
用phpMyAdmin-2.8.2.4 查看是:
MySQL charset: UTF-8 Unicode (utf8) ;mysql collation=utf8_general_ci 和上面一样的.
Discuz的版本是4.0 GBK版本(这个就废话了.都说了一样的又重复,真是抱歉).disucuz config.inc.php 里的$headercharset = 0; $charset = '内容填写在后有说明';(此无论怎么填写都是乱码!)
江苏的表是有些是latin1_swedish_ci. 有些是gb2312_bin.
西安主机的dz4.0一切都完好.浏览,发帖正常.备份数据,恢复数据,反反复复一万次一千次都没有问题.
江苏主机的dz4.0就是内容乱码而已.其标题栏文字比如"控制面板"都是正常文字.把西安主机的备份给江苏主机恢复的话,江苏的还是乱码.
奇怪.
我说的信息够详细了.我该怎么解决?
问题A(就是如上说的问题)暂时解决了.
问题B(在线会员中文名字乱码,其它方面没有故障.)仍然发生.截至07.6.14,已经自行解决.
所以:
我总结的经验,包含有一些看法(不一定要多么专业,毛主席说的"厚积薄发"在这里不生效,因为我关心的是你们新手):
1 , discuz的 "强制设置字符集,只乱码时... ..." 是垃圾功能.一般用不到的.
config.inc.php 里的$headercharset = 0;别说一般人,就所有的人在几乎所有的情况下都不会感兴趣的.因为它能产生效力的地方仅仅是标标题栏文字而已!而这个地方就有用了,尤其对主机环境是mysql4.1.x或mysql5.x的朋友:
$charset = '****'; 论坛默认字符集, 可选 'gbk', 'big5', 'utf-8'. 其实****还可以填写 gb2312. 或变为空.
这个例子就是改为gb2312解决的.
2 第一次装论坛时要把论坛当作自己的女人一样.切莫为了以下愚蠢的意图而顾此失彼(在未来的大环境下!就像法国大革命那样的环境.要知道以后的日子mysql4.0不会有好日子过了.大部分的主机将会是mysql5.x以上的天下,所谓未雨绸缪啊,朋友们.比如仅限目前情况的MySQL charsetUTF-8 Unicode+MySQL connection collation utf8_unicode_ci.不要再说中华的语言文字多么多么优秀.世界大环境初始mysql5.x的时候都是以拉丁文字latin1为默认,人家大部分主机的my.ini最高级别的字符集定义collocation就是latin1_swedish_ci. 我们的专业编程者们也应该抛弃旧有的mysql引用,连接了吧?).
以下是谈到的愚蠢意图.
*贪图所谓的"gbk版数据库体积小..."
**贪图所谓的"gbk版更新rss没有乱码..."
***贪图所谓的"gbk版更不像utf-8版本容易出现乱码..."
其实啊什么玩!utf-8才是大势所趋,或者说是被"大势"所趋.大势以上提到了.
这回谈经验:
1 第一次装论坛时,最好要确保你的主机环境是mysql4.1.x或以上版本.因为这个是趋势.这样做了你以后就会少遇到乱码情况.乱码问题一般人是没有什么耐心去弄的.
若你一开始就 mysql4.0,那么就一直在这样的环境下用论坛.除非你不怕数据库毁灭然后为了恢复数据出1000左右人民币,给官方作为手续费.
2 和官方反调: 开始使用论坛的时候绝对的推荐用dz utf-8版本!
以后也要延续下去.不要换.
这个错不了.否则出了猴儿急的情况你别来诉苦.(另无关的题外题: 后台显示的备份数据版本和mysql版本是两码事.别混淆.)
其实discuz gbk和discuz utf-8只有一个文件不同 就是cinfig.inc.php.也可以说仅仅是各自里面的$charset不同.
3 换主机意味着换环境,你新配置了主机的话也意味着换了环境,切忌:
*要以"常规备份"模式备份数据.
**删除插件,删除一切潜力破坏默认模板的东西.这个切记!原因?就是数据表导入时避免出错. 我担保你们很容易出错,要是不遵守这条的话.
4 $charset = '*';的星号处留空试试或者改为gb2312,gb18030试一试.你会有稍许改观.
但是星号改为不能使你的浏览器正常显示论坛的时候,就危险了.这时候的危险是:
*你的会员发了帖子,帖子将会是乱码,即便是星号改回到正常(能使你的浏览器正常浏览叫正常),也不能挽回那帖子的正常.
这个地方不是能随意改的.这个原因可能就在mysql的连接上.
**那个会员发了帖子或者另一个管理员这时候(星号改为不正常期间)修改过后台,那么,你查看帖子的时候顶部会有一行错误.忘记了.
PS.要以怀疑的眼光看待的帖子主题是(也就是没有必要去照作以及他们的办法根本没有完全解决问题):
https://discuz.dismall.com/thread-313395-1-1.html
5 以下方法解决问题B(在线会员中文名字乱码,其它方面没有故障).注意,这里涉及的环境是mysql5.0的之下.mysql4.0之下的问题不谈.
*utf8可以改为gbk试一试.期间可不能有人发帖子,修改后台.
(dz 4.0)后台升级数据库:
DROP TABLE IF EXISTS cdb_sessions;
CREATE TABLE cdb_sessions (
sid char(6) binary NOT NULL default '',
ip1 tinyint(3) unsigned NOT NULL default '0',
ip2 tinyint(3) unsigned NOT NULL default '0',
ip3 tinyint(3) unsigned NOT NULL default '0',
ip4 tinyint(3) unsigned NOT NULL default '0',
uid mediumint(8) unsigned NOT NULL default '0',
username char(15) NOT NULL default '',
groupid smallint(6) unsigned NOT NULL default '0',
styleid smallint(6) unsigned NOT NULL default '0',
invisible tinyint(1) NOT NULL default '0',
`action` tinyint(1) unsigned NOT NULL default '0',
lastactivity int(10) unsigned NOT NULL default '0',
lastolupdate int(10) unsigned NOT NULL default '0',
pageviews smallint(6) unsigned NOT NULL default '0',
seccode smallint(6) unsigned NOT NULL default '0',
fid smallint(6) unsigned NOT NULL default '0',
tid mediumint(8) unsigned NOT NULL default '0',
bloguid mediumint(8) unsigned NOT NULL default '0',
UNIQUE KEY sid (sid),
KEY uid (uid),
KEY bloguid (bloguid)
) DEFAULT CHARSET=utf8 TYPE=HEAP;
[ 本帖最后由 tiancheng 于 2007-6-15 20:07 编辑 ] |