PS Warning: Invalid argument supplied for foreach() in **\viewthread.php on line 149 反复两次启停设置积分就好了
PS.要以怀疑的眼光看待的帖子主题是(也就是没有必要去照作以及他们的办法根本没有完全解决问题):
https://discuz.dismall.com/thread-313395-1-1.html
穆亦风 (陈书艺,还是dz administrator呢) 的帖子部分是放屁:
https://discuz.dismall.com/viewth ... E0%B7%E7&page=1
你们看
A导出4.1/5.0的库
B进行处理,转换成gbk字符集
C彻底卸载4.1或者5.0
D安装4.0.26
E然后导入处理完的库
你们看:我们就是为了在mysql4.1.x环境下用dz的,他还说什么降到4.0(D安装4.0.26)?真是服了他!
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;
思想总结:
MySQL 4.1/5.0 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。
但是,传统的 Web 程序(比如dz4.0RC ,DZ2.0)在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?
编译 MySQL 时(可以理解为主机装mysql时),指定了一个默认的字符集A,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集B,如果没指定,这个值继承自编译时指定的;B如果不在my.ini指定,就有 B=A;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集C,如果没指定,这个值继承自配置文件中的; C若没有指定,C=B;
此时 character_set_server(D) 被设定为这个默认的字符集; D强制等于C;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集E被缺省设定为 character_set_server(D); E没有指定那么E=D;
当选定了一个数据库时,character_set_database(F) 被设定为这个数据库默认的字符集(G);F=G;
在这个数据库里创建一张表时,表默认的字符集H被设定为 character_set_database(F),也就是这个数据库默认的字符集; H=F;
当在表内设置一栏时,该栏字符集是I, 除非明确指定,否则此栏缺省的字符集就是表默认的字符集H; 若不明确指定,I=H
这个字符集(I)就是数据库中实际存储数据采用的字符集(I),mysqldump 出来的内容就是这个字符集下的;
I不一定等于H,(H=F=G=character_set_database),E不一定等于D(D=character_set_server=C),C不一定等于B,B不一定等于A.
进而看,装mysql时的指定集为A,my.ini集为B;
这下mysql就招骂了:
my.ini某人控制不到,加上旧dz程序等,就有我们mysqldump导出的集是latin1.
[ 本帖最后由 tiancheng 于 2007-6-16 00:30 编辑 ] |