找回密码
 FreeOZ用户注册
查看: 3881|回复: 24
打印 上一主题 下一主题

[网络技术] Discuz!6 调试笔记

[复制链接]
跳转到指定楼层
1#
发表于 7-9-2008 13:12:17 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
提示: 作者被禁止或删除, 无法发言

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?FreeOZ用户注册

x
环境搭建:在Vista64环境下手动安装配置PHP5

Installing PHP5 on IIS7 Vista 64

网上的在windows xp/vista环境下安装PHP的教程一般是指32为环境下的情况,在64位环境下安装PHP有点不同。
按着32为环境的步骤安装好了大多数人会遇到一个错误 Error Code: 0×80070032 ,IIS给的错误提示信息不过明确,而且容易引起误导,你会以为你的映射设置的不错,实际上是64位环境下IIS的应用程序池默认只执行64位的应用解释器。你需要手动改变这个设置才可以。这就是问题的关键所在。以下步骤同时适用于32位环境和64位环境:

   
  • 安装设置 IIS7
  •    下载 PHP  http://php.net,并解压缩到一个目录下 (缺省可以使用 “C:\php“)
  •    增加配置文件:拷贝/改名 C:\php\php.ini-dist (或者是推荐的 php.ini-recommended)到 C:\windows\php.ini
  •    在控制面板,管理工具中找到IIS控制台的图标,右键点击图标,选择 Run as administrator,或者以管理员身份运行命令行,然后从命令行打开IIS控制台也是一样的Internet Information Services (IIS) Manager from C:\Windows\System32\inetsrv\InetMgr.exe
  •    找到 Handler Mappings (在IIS Area区域)
  •    点击 “Add Script Map…” (在Actions Menu里)
  •    加入如下映射 Add Script Map
  •           * Reqest path: “*.php“
  •           * Executable: “C:\php\php5isapi.dll“
  •           * Name: “PHP“
  •   点击 “OK” and “Yes” to the Add Script Map dialog


如果你是用的是32位的系统,到此为止,就完成PHP的安装了,如果你是用的是64位的系统,你还需要打开一个设置。当然,如果你安装的是64位的PHP就应该不存在这个问题了 64bit version from http://www.fusionxlan.com/PHPx64.php ,我从PHP网站上下来的是32位的PHP编译版本。

找到 Application Pools \ DefaultAppPool \ Advanced Settings... \ (General) Enable 32-Bit Applications: True (缺省是False)

下面是测试PHP是否安装上了,建立一个index.php文件,内容如下:
  1. <?php phpInfo(); ?>
复制代码
如果正常的话,你应该看到PHP安装好的一些配置信息。



下面开始设置MySQL的支持了
修改 C:\php\php.ini 找到 extension=php_mysql.dll 把注释去掉
拷贝 c:\php\ext\php_mysql.dll 到 C:\Windows\System32


细节可以参考这里:
http://blondr.blogspot.com/2006/ ... ysql-and-php-5.html
回复  

使用道具 举报

2#
 楼主| 发表于 8-9-2008 04:31:45 | 只看该作者

现在我的系统下,MySQL 64 和 PHP 32都能用了,但是无法把 php和mysql链接起来

提示: 作者被禁止或删除, 无法发言
现在我的系统下,MySQL 64 和 PHP 32都能用了,但是无法把 php和mysql链接起来

这里有一篇图文并茂的教程:
http://www.zdnetasia.com/techguide/webdev/0,39044903,61960072,00.htm

Vista x64
PHP x86
MySQL x64

应该是 32 64 位版本问题了,找了好资料,还是解决不了。却发现了这个WAMP项目。

http://www.wampserver.com/en/download.php
回复  

使用道具 举报

3#
发表于 8-9-2008 11:59:11 | 只看该作者

                               
登录/注册后可看大图

这个也不错 xampp

许多人通过他们自己的经验认识到安装 Apache 服务器是件不容易的事儿。如果您想添加 MySQL、PHP 和 Perl,那就更难了。

XAMPP 是一个易于安装且包含 MySQL、PHP 和 Perl 的 Apache 发行版。XAMPP 的确非常容易安装和使用:只需下载,解压缩,启动即可。


适用于 Windows 的 XAMPP

适用于 Windows 98、NT、2000、XP 和 Vista 的发行版。该版本包括:Apache、MySQL、PHP + PEAR、Perl、mod_php、mod_perl、mod_ssl、OpenSSL、phpMyAdmin、Webalizer、Mercury Mail Transport System for Win32 and NetWare Systems v3.32、Ming、JpGraph、FileZilla FTP Server、mcrypt、eAccelerator、SQLite 和 WEB-DAV + mod_auth_mysql。

评分

参与人数 1威望 +20 收起 理由
xblues + 20 谢谢分享!

查看全部评分

回复  

使用道具 举报

4#
 楼主| 发表于 8-9-2008 21:46:10 | 只看该作者

把PHP和MySQL关联起来

提示: 作者被禁止或删除, 无法发言
下面开始设置MySQL的支持了
修改 C:\php\php.ini 找到 extension=php_mysql.dll 把注释去掉
拷贝 c:\php\ext\php_mysql.dll 到 C:\Windows\System32
拷贝 C:\php\libmysql.dll to wondows/system32/  (或者MySQL安装目录下也有这个DLL文件,不过我不知道用这两个哪一个好)
拷贝 c:\php\php.ini to C:\Windows\ (当使用test.php测试的时候,测试成功,但是提示php运行的时候没有加载ini配置文件)
建立环境变量路径添加 C:\php

最重要的重新启动机器!其实我昨天也是安装成功了,就是人懒,不想重启机器,所以每次测试都说找不到php.ini配置文件,php和mysql就没办法关联起来。今天上班回来开机测试运行成功。看来人懒是不行地。


到此为止,我就成功的在64位Vista的IIS7下面安装和配置了 32位的php和64位的mysql。
如果所有的都是32位的系统就更加好配置。
如果都是64位的应用也应该不会有这些问题。
混合使用32位和64位应用的时候,会有一些兼容性问题,需要手工打开一些设置。
在Windows 2008的IIS7下面安装php和mysql应该同理可证。

另:据说从IIS7开始,MS支持FastCGI的形式运行PHP了,因此效率成倍的提高,我还没有看具体怎么设置php以FastCGI的方式运行。
这样在Windows环境下其实是可以完全抛弃Apache的,使用IIS7代替Apache,运行效果一样的好。

当然LS也提到了一些由人家已经配置好的快速安装方案,只要安装就行了,不需要了解原理。当然了解原理有了解原理的好处。
回复  

使用道具 举报

5#
 楼主| 发表于 9-9-2008 01:10:41 | 只看该作者

如果需要使用Discuz还需要改变一些php.ini的设置

提示: 作者被禁止或删除, 无法发言
比如Discuz使用了所见的php标签,所以要在php.ini中打开这个选项。

不改变这个选项的时候,discuz出现的问题很奇怪,只出文字,不显示任何图片,也没有什么明显的错误提示。

short_open_tag 缺省时Off,更改设置为 On
然后别忘了重启IIS7,以管理员身份运行命令行,然后使用 iisreset 重新启动IIS
再次运行 test.php 就可以看到这个short_open_tag选项被打开了。

现在discuz可以正常运行了。
回复  

使用道具 举报

6#
 楼主| 发表于 9-9-2008 02:03:31 | 只看该作者

Discuz 6.0 的安装

提示: 作者被禁止或删除, 无法发言
把文件展开到一个目录,设置好虚拟应用程序,并确保几个关键配置文件是可以被读写的。
执行 http://localhost/forum/install.php
需要回答的问题比较简单:

主机名 localhost加端口
连接MySQL的用户名和口令
想要建立的论坛数据库名称
想要建立的论坛数据表前缀
论坛管理员用户名和口令

实际上不通过这个安装程序,手工安装也是可以的,设想,从一个虚拟主机搬迁到另外一个虚拟主机,这样肯定不能全新安装了,而只能手动修改配置文件。配置文件在 \config.inc.php

==================================================================================

Discuz 还提供了一个修复工具,这个在\utilities\tools.php
直接把这个文件copy到\论坛根目录下,并修改该文件 $tool_password 设置一个口令,才可以使用。
具体功能如下:

[ 检查或修复数据库 ] [ 导入数据库备份 ] [ 重置管理员帐号 ] [ 邮件配置测试 ] [ 数据库冗余数据清理 ]
[ Discuz!未知文件检索 ] [ Mysql升级数据库 ] [ 贴子内容批量替换 ] [ 系统环境检查 ] [ 字段自增长修复 ]

我觉得最有用的应该是那个充值管理员帐号的功能,当然其他的几个功能也很有用。

下载和具体用法可以参见:
http://www.discuz.net/thread-803708-1-1.html
================================================================================

如果遇到乱码问题,可以修改Discuz的配置文件config.inc.php

如果显示数据库中的数据是乱码修改dbcharset
        $database = 'mysql';                        // 论坛数据库类型,请勿修改
        $dbcharset = 'gbk';                        // MySQL 字符集, 可选 'gbk', 'big5', 'utf8', 'latin1', 留空为按照论坛字符集设定

如果显示论坛界面乱码,修改charset
        $charset = 'gbk';                        // 论坛页面默认字符集, 可选 'gbk', 'big5', 'utf-8'
        $headercharset = 0;                        // 强制论坛页面使用默认字符集,可避免部分服务器空间页面出现乱码,一般无需开启。 0=关闭 1= 开启
回复  

使用道具 举报

7#
 楼主| 发表于 9-9-2008 02:06:13 | 只看该作者

Discuz! 如何转换汉字编码

提示: 作者被禁止或删除, 无法发言
目前FreeOZ的数据文件和程序界面使用的都是GBK,明天研究如何转换汉字编码问题。从GBK转换为UTF8。
好了,今天到此为止,我去睡觉。
回复  

使用道具 举报

8#
发表于 9-9-2008 11:56:31 | 只看该作者
看你如何转换~
回复  

使用道具 举报

9#
 楼主| 发表于 10-9-2008 01:11:39 | 只看该作者

实验Discuz 6.0不同编码版本和修改版本的兼容性

提示: 作者被禁止或删除, 无法发言
比如我有一个已经运行一段时间的Discuz6.0的数据库了,采用GBK编码。前端也是6.0的GBK编码,并已经根据我个人的喜好,对前端程序进行了一些修改。下面我想实验使用不同版本的程序文件连接相同数据库的效果。
Discuz不需要建立单独的虚拟应用程序,其实只需要放到web目录下就可以运行,要求极其简单,链接数据库只需要修改链接数据库的配置文件config.inc.php就好了。
我先在wwwroot下建立了一个虚拟目录叫testdev,然后把不同版本的程序都放到这个目录下的不同子目录中。


每次登陆会启用cookie记忆用户身份,如果想在不同的版本之间共享cookie,应该修改如下设置,这样我就不用在进行下面的实验的时候,每次来回登录了。
  1. // [CH] 如您对 cookie 作用范围有特殊要求, 或论坛登录不正常, 请修改下面变量, 否则请保持默认

  2.         $cookiepre = 'AtG_';                        // cookie 前缀
  3.         $cookiedomain = '';                         // cookie 作用域
  4.         $cookiepath = '/';                        // cookie 作用路径
复制代码
实验一:BIG5版本
从Discuz网站下载了原始版本的Discuz6.0GBK版本,更改配置文件,进行连接,一切正常,除了我自己所做的前端修改都不在了,但是使用上还是一切正常,包括浏览和发帖,看来没有改变数据库结构是关键。
当然我也没有在配置文件中特别指定数据库的编码格式。当我指定数据库的编码格式被gbk以后,显示贴子不正常了,发帖子以后,用gbk版本浏览也出现了乱码。
看来不同中文版本之间混用,还真的存在问题。用不同前端版本发布的新贴,只有用发布他的前端去读取的时候不是乱码,看来发贴的时候程序指定了写入数据库的默认编码格式,也就是说用BIG5发的帖子是BIG5格式。
而GBK则使用GBK编码写数据库,而GBK和BIG5是相互不兼容的。

实验二:UTF8版本
说明一下,说是UTF8版本,的确是UTF8版本,但是却发现作者的疏忽,配置文件使用的编码居然还是GBK,而不涉及汉字注释的程序文件则使用的是英文编码,只有设计到界面部分的文件使用了UTF8编码。
看来中国人习惯了使用GBK了,改不了。呵呵。有意思的是UTF8向下兼容GBK编码,所以使用UTF8和使用GBK发的帖子是可以相互读取的,并不存在乱码问题。
但是当使用UTF8界面读取BIG5发的帖子就出现了乱码,看来UTF8本身虽然包含了繁体中文写法的字符,但是这些繁体中文字符和同样写法的BIG5下的繁体中文字符的编码格式完全不相互兼容。

GBK: 汉字国标扩展码,基本上采用了原來GB2312-80所有的汉字及码位,並涵盖了原Unicode中所有的汉字20902,总共收录了883个符号,   21003个汉字及提供了1894个造字码位。   Microsoft简体版中文Windows   95就是以GBK为內码,又由于GBK同時也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。  


实验三:查看数据库帖子编码的格式
我抓了图说明,实际上由于没有使用汉字作为字段名,因此数据库本身不存在编码格式的问题。
从Discuz配置文件看来实际上是制定了使用哪一种编码格式读取和写入是数据到数据库中。
那这样是不是使用UTF8的界面实际上是不需要对数据库里的原来使用GBK编码写入的数据进行转换呢?

实验四:转换数据库从GBK到UTF8
虽然实际上我使用UTF8的前端也是一样可以连接到GBK的数据库正常使用的,而且比较库里的字符内码也的确毫无任何区别(不知道为什么)。
但是我还是决定转换数据库,彻底试验一次,不过今天又十分晚了这一任务只好等到明天了。
回复  

使用道具 举报

10#
 楼主| 发表于 10-9-2008 03:14:44 | 只看该作者

转一篇:关于GBK、GB2312、UTF8

提示: 作者被禁止或删除, 无法发言
UTF- 8:Unicode Transformation Format-8bit,允许含BOM,但通常不含BOM。是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。UTF-8包含全世界所有国家需要用到的字符,是国际编码,通用性强。UTF-8编码的文字可以在各国支持UTF8字符集的浏览器上显示。如,如果是UTF8编码,则在外国人的英文IE上也能显示中文,他们无需下载IE的中文语言支持包。

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:

GBK、GB2312--Unicode--UTF8

UTF8--Unicode--GBK、GB2312

对于一个网站、论坛来说,如果英文字符较多,则建议使用UTF-8节省空间。不过现在很多论坛的插件一般只支持GBK。
GB2312是GBK的子集,GBK是GB18030的子集
GBK是包括中日韩字符的大字符集合
如果是中文的网站 推荐GB2312 GBK有时还是有点问题
为了避免所有乱码问题,应该采用UTF-8,将来要支持国际化也非常方便
UTF-8可以看作是大字符集,它包含了大部分文字的编码。
使用UTF-8的一个好处是其他地区的用户(如香港台湾)无需安装简体中文支持就能正常观看你的文字而不会出现乱码。

gb2312是简体中文的码
gbk支持简体中文及繁体中文
big5支持繁体中文
utf-8支持几乎所有字符

中文内容多的站点可以考虑用gbk或gb2312,英文内容多的站点还是utf-8好
回复  

使用道具 举报

11#
 楼主| 发表于 10-9-2008 04:18:21 | 只看该作者

从GBK版本转换Discuz到UTF8版本

提示: 作者被禁止或删除, 无法发言
具体实验计划:
  • 设置MySQL运行环境参数中缺省字符集为UTF8
  • 备份数据库中数据(GBK编码)成.SQL文件(UTF8编码)
  • 从.SQL文件恢复成数据库,选择UTF8编码
  • 转换GBK前端程序为UTF8编码格式(可以通过EmEditor之类的程序另存为转换,只要是文本本件未经过编译,相当容易。可能个别地方需要修改。)
  • 使用UTF8前端程序连接UTF8数据库
  • 同时测试是否可以使用GBK编码前端链接新建立的UTF8编码数据库
  • 检查新建立UTF8编码数据库数据与原来GBK编码数据库数据有何不同


先去睡觉了...........
回复  

使用道具 举报

12#
发表于 10-9-2008 10:08:14 | 只看该作者
虫虫的学习能力超强超快!

评分

参与人数 1威望 +18 收起 理由
xblues + 18 又夸我,怪不好意思的。

查看全部评分

回复  

使用道具 举报

13#
 楼主| 发表于 11-9-2008 07:59:25 | 只看该作者

再转一篇:mysql乱码处理总结

提示: 作者被禁止或删除, 无法发言
(1)修改my.ini(MySQL Server Instance Configuration文件)

#CLIENT SECTION

[client]

port=3306

[mysql]

default-character-set=gbk

#SERVER SECTION

[mysqld]

default-character-set=gbk

(2)修改data目录中相应数据库目录下的db.opt配置文件

default-character-set=gbk

default-collation=gbk_chinese_ci

(3)数据库连接串中指定字符集

URL=jdbc:mysql://yourIP/college?user=root&password=yourPassword&useUnicode=true&characterEncoding=gbk

(4)在创建数据库时指定字符集

create database yourDB CHARACTER SET gbk;

*要记得use database



mysql中文乱码解决

首先进入mysql

用show variables查看

这里可以查看到你的字符集,character_set_server是服务器编码。现在我们默认的是latin1要改变服务器的编码必须重新启动服务器,我们先用mysqladmin -uroot shutdown关闭服务器,然后mysqld -C GBK启动服务器,-C是character_set_server的一个简写,这样修改后我们再进入mysql查看就会显示,这样我们就把服务器和数据库的编码改为了GBK

还需要手动地把data目录下的数据库中的db.opt中的编码改为

default-character-set=gbk

default-collation=gbk_chinese_ci



在进入mysql客户端程序的时候应该把客户端默认的编码改为gbk才能显示正常

可以在mysql里修改,也可以在登录的时候mysql -uroot -default-character-set=gbk修改
回复  

使用道具 举报

14#
 楼主| 发表于 11-9-2008 08:10:12 | 只看该作者

Mysql 数据库字符集转换

提示: 作者被禁止或删除, 无法发言
作者:穆亦风    阅读人次:1157    文章来源:club.muzone.cn    发布时间:2007-9-5    网友评论(1)条

最近discuz发布了新的版本,免费了,用的人更多了,以前使用其它论坛程序和discuz2.5/3.0的纷纷转换或升级到discuz4.0,可见discuz作为中国人开发的php论坛程序,确实是非常优秀的,在大家欣喜若狂的时候,也遇到了一些问题

看到不少用户反映转换完以后是乱码的情况,出现这种现象的主要原因是这类用户使用的都是mysql4.1以上的版本.下面作一个说明,希望出现这个问题的朋友都能耐心的把这个文档看完!!!

MySQL 4.1开始,对多语言的支持有了很大变化 (这导致了问题的出现)。尽管大部分的地方 (包括个人使用和主机提供商),MySQL 3、4.0 仍然占主导地位;但 MySQL 4.1 乃至5.0是 MySQL 官方推荐的数据库,已经有主机提供商开始提供并将会越来越多;因为 latin1 在许多地方 (下边会详细描述具体是哪些地方) 作为默认的字符集,成功的蒙蔽了许多 PHP 程序的开发者和用户,掩盖了在中文等语言环境下会出现的问题。

MySQL 4.1开始把多国语言字符集分的更加详细,所以导致数据库迁移,或则dz论坛升级到4.0后(dz4.0开始使用gbk或utf-8编码)出现乱码问题。

MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。

查看系统的字符集和排序方式的设定可以通过下面的两条命令:


QUOTE:
mysql> SHOW VARIABLES LIKE 'character_set_%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
7 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'collation_%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)

MySQL 4.1 对于字符集的指定可以细化到一台机器上安装的 MySQL,其中的一个数据库,其中的一张表,其中的一栏,应该用什么字符集。但是,传统的 Web 程序在创建数据库和数据表时并没有使用那么复杂的配置,它们用的是默认的配置,那么,默认的配置从何而来呢?

编译 MySQL 时,指定了一个默认的字符集,这个字符集是 latin1;
安装 MySQL 时,可以在配置文件 (my.ini) 中指定一个默认的的字符集,如果没指定,这个值继承自编译时指定的;
启动 mysqld 时,可以在命令行参数中指定一个默认的的字符集,如果没指定,这个值继承自配置文件中的;
此时 character_set_server 被设定为这个默认的字符集;
当创建一个新的数据库时,除非明确指定,这个数据库的字符集被缺省设定为 character_set_server;
当选定了一个数据库时,character_set_database 被设定为这个数据库默认的字符集;
在这个数据库里创建一张表时,表默认的字符集被设定为 character_set_database,也就是这个数据库默认的字符集;
当在表内设置一栏时,除非明确指定,否则此栏缺省的字符集就是表默认的字符集;
这个字符集就是数据库中实际存储数据采用的字符集,mysqldump 出来的内容就是这个字符集下的;
当我们按照原来的方式通过PHP存取MySQL数据库时,就算设置了表的默认字符集为utf8并且通过UTF-8编码发送查询,你会发现存入数据库的仍然是乱码。问题就出在这个connection连接层上。
想要进行“正确”的存储和得到“正确”的结果,最方便的是在所有query开始之前执行一下:

SET NAMES 'gbk';
其中gbk是数据库字符集。

它相当于下面的三句指令:
SET character_set_client = gbk;
SET character_set_results = gbk;
SET character_set_connection = gbk;

4.1和5.0默认使用的是latin1字符集(木头:妈的,老外真霸道,妄想让全世界都是使用瑞典字符集吗)
如果我们只想使用gbk字符集存储和获取数据,
我们在编译mysql 4.1和 5.0的时候,需要注意在my.ini或者my.cnf中添加两处参数


[Copy to clipboard] [ - ]
CODE:
[mysqld]
default-character-set=utf8




[Copy to clipboard] [ - ]
CODE:
#settings for clients (connection, results, clients)
[mysql]
default-character-set=utf8

下面我们来说主题,如何转换数据库字符集
两种方法,


QUOTE:
第一种----更改存储字符集
主要的思想就是把数据库的字符集有latin1改为gbk,big5,或者utf8; 以下操作必须拥有主机权限。假设当前操作的数据库名为:database

导出
首先需要把数据导为mysql4.0的格式,具体的命令如下:
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt databse > d4.sql

--default-characte-set 以前数据库的字符集,这个一般情况下都是latin1的,
--set-charset 导出的数据的字符集,这个可以设置为gbk,utf8,或者big5
导入
首先使用下面语句新建一个GBK字符集的数据库(test)

CREATE DATABASE `d4` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;
然后把刚才导出的数据导入到当前的数据库中就ok了。

mysql -uroot -p --default-character-set=gbk -f d4<d4.sql
通过以上的导出和导入就把数据库的字符集改为正确的存储方式了。

其中d4为新建库的名称,d4.sql为导出文件的名字

但是这种方法,发现数据库数据存储量无端变大30%,真是郁闷




QUOTE:
另外一种其实原理相同,但是需要手动操作,一般用于第一种方法失败后的选择
不过这种方法如果数据库很大,估计很难做,因为光打开文件就能让你死机

首先还是用phpmyadmin或者用mysql本身的dump导出 .sql文件

然后用UltraEdit打开你备份的所有xxxx.sql文件,查找


[Copy to clipboard] [ - ]
CODE:
DEFAULT CHARSET=latin1

latin1这里也许是别的,反正是你不想要的,要转成gbk或者big5的字符集
把这个替换为“空”
在查找


[Copy to clipboard] [ - ]
CODE:
CREATE TABLE cdb_sessions (
  sid char(6) character set latin1 collate latin1_bin 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',
  fid smallint(6) unsigned NOT NULL default '0',
  tid mediumint(8) unsigned NOT NULL default '0',
  nickname char(15) NOT NULL default '',
  UNIQUE KEY sid (sid)
) ENGINE=HEAP MAX_ROWS=1000;

替换为


[Copy to clipboard] [ - ]
CODE:
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',
  `fid` smallint(6) unsigned NOT NULL default '0',
  `tid` mediumint(8) unsigned NOT NULL default '0',
  `nickname` char(15) NOT NULL default '',
  UNIQUE KEY `sid` (`sid`)
) TYPE=HEAP MAX_ROWS=2000;

这一步更为简单的办法就是删除掉关于cdb_sessions表的这一段,将来全新装一个d4,将这个表导出
将其内容复制,粘贴到 sql文件的最后面

保存后,再把这个sql文件导入到你的库中

就OK了

用这两种方法就可以很方便的把4.1和5.0的mysql数据库降级到4.0
简单的过程就是
A导出4.1/5.0的库
B进行处理,转换成gbk字符集
C彻底卸载4.1或者5.0
D安装4.0.26
E然后导入处理完的库

降级的时候导出库可以用这个方法
mysqldump -uroot -p --default-character-set=latin1 --set-charset=gbk --skip-opt databse  --compatible=mysql40 > d4.sql
这样导出的就是4.0的库勒

至于mysql版本的升级,
如果数据文件中有中文信息,那么将MySQL 4.0的数据文件,直接拷贝到MySQL 4.1中就是不可以的,即便在my.ini中设置了default-character-set为正确的字符集。虽然貌似没有问题,但MySQL 4.1的字符集有一处非常恼人的地方,以gbk为例,原本MySQL 4.0数据中varchar,char等长度都会变为原来的一半,这样存储中文容量不变,而英文的存储容量就少了一半。这是直接拷贝数据文件带来的最大问题。

所以,升级的根本,如果想使用“正确”的字符集,还是先用mysqldump导出成文件,然后导入。
回复  

使用道具 举报

15#
 楼主| 发表于 11-9-2008 08:14:28 | 只看该作者

UNICODE,GBK,UTF-8区别

提示: 作者被禁止或删除, 无法发言
作者:李鸿儒    阅读人次:2919    文章来源:李鸿儒的博客    发布时间:2007-9-5    网友评论(5)条

最近迷上改魔兽地图,破解解压修改挺好玩的~ 有个文件头的问题,搞了半天才知原来是utf-8码...总算把这些都搞清楚了.

简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.
回复  

使用道具 举报

16#
 楼主| 发表于 11-9-2008 08:47:08 | 只看该作者

找了一些资料发现关于编码,人家所讲的和我的理解不一样呀

提示: 作者被禁止或删除, 无法发言
可是我现在的疑问是:原来正在运行的DZ库的MySQL配置文件制定了GBK编码
我把数据库拿过来,直接挂到我事先安装好的配置成UTF8的MySQL下,汉字显示正常没有乱码,无论使用GBK的DZ,还是使用UTF的DZ链接数据库发帖子,也都不出现乱码。

既然资料都说GBK和UTF8不兼容,那为什么在我机器上的这些实验,完全没有乱码呢?
我都查了数据库里面的汉字内码了,内码实际上就是UTF8(也不是什么GBK)
那既然没有乱码,那我转换什么呀?直接改改配置文件就行了,数据库数据不需要转换。

我疑惑了!


实际上如果需要转换数据是很容易的。
==============================================
MySQL5开始提供管理界面,界面里有一个备份/恢复选项
备份:在GBK配置的MySQL下使用备份功能,把数据备份成为SQL语句文件。
使用EmEditor检查这个文件的编码,应该是UTF8的,如果不是,就是用EmEditor另存为UTF8格式。
恢复:在修改成UTF8配置的MySQL下,回复这个SQL语句文件就可以了。


自己手动转换GBK版本的DZ程序文件到UTF8版本
=========================================
修改DZ配置文件config.inc.php,把指定编码从GBK改为UTF8
到install目录下找到和界面相关的语言文件,使用EmEditor另存为UTF8(如果你已经自己修改了这个文件,也不想使用官方修改好了的UTF8资源文件,完全可以找这样自己转换)
同理,转换其他源文件本身编码成UTF8(这一步不是必需的,DZ官方提供的UTF8版的源文件本身也不是Unicode的,实际上使用了英文字符集)
使用EmEditor对DZ的所有源文件搜索,查找 'gbk' ,仔细阅读源文件按需要替换成 'UTF-8'  (注意单引号,和横线)


昨天晚上太困,先睡了,今天早晨早起两个小时来写帖子,实在是不容易呀
我去洗澡上班了,我上面说的想法,等下回来再实际实验。
今天还和牙医越好了做烤瓷牙,希望顺利,花掉我2000大元。

评分

参与人数 1威望 +30 收起 理由
coredump + 30 辛苦辛苦!

查看全部评分

回复  

使用道具 举报

17#
 楼主| 发表于 11-9-2008 09:39:15 | 只看该作者

用GBK版本生成的数据库配置文件db.opt内容这样

提示: 作者被禁止或删除, 无法发言
default-character-set=gbk
default-collation=gbk_chinese_ci

那晚上我在用UTF版本的DZ全新生成数据库,看看文件内容是啥?

也有可能是我的概念理解错误,上面的帖子说了:

最近迷上改魔兽地图,破解解压修改挺好玩的~ 有个文件头的问题,搞了半天才知原来是utf-8码...总算把这些都搞清楚了.

简单来说,unicode,gbk和大五码就是编码的值,而utf-8,uft-16之类就是这个值的表现形式.而前面那三种编码是一兼容的,同一个汉字,那三个码值是完全不一样的.如"汉"的uncode值与gbk就是不一样的,假设uncode为a040,gbk为b030,而uft-8码,就是把那个值表现的形式.utf-8码完全只针对uncode来组织的,如果GBK要转UTF-8必须先转uncode码,再转utf-8就OK了.
回复  

使用道具 举报

18#
 楼主| 发表于 11-9-2008 09:40:39 | 只看该作者
提示: 作者被禁止或删除, 无法发言
老乞丐,你跟我一起研究!

评分

参与人数 1威望 +30 收起 理由
coredump + 30 我都看晕了:(

查看全部评分

回复  

使用道具 举报

19#
发表于 11-9-2008 20:44:50 | 只看该作者
最近装的6.1utf8的在服务器上有点问题,改成gbk的了~
回复  

使用道具 举报

20#
 楼主| 发表于 11-9-2008 21:21:33 | 只看该作者

回复 #19 zycbob 的帖子

提示: 作者被禁止或删除, 无法发言
具体什么问题? 我几个月前装了UTF8的6.1,一切运行正常呀。
回复  

使用道具 举报

21#
发表于 12-9-2008 17:01:30 | 只看该作者
我在本地正常,上传到服务器就不行
具体是安装完成后,打不开网页,那一串错误代码忘了,好像和数据库有关的~
等不及,我就改装了gbk的,至今一切正常,
呵呵  中菲资讯论坛~
回复  

使用道具 举报

22#
 楼主| 发表于 12-9-2008 17:07:29 | 只看该作者

回复 #21 zycbob 的帖子

提示: 作者被禁止或删除, 无法发言
en, 上面的有一个帖子提到过,有些提供商的mysql环境到目前还不支持UTF8,不是使用了缺省的latin,就是用了GBK。
需要自己在建立数据库的时候指定一个 db.opt文件,在这里指定数据库编码。
回复  

使用道具 举报

23#
发表于 12-9-2008 17:24:29 | 只看该作者
mysql版本低,看来就是这个原因了~
回复  

使用道具 举报

24#
 楼主| 发表于 13-9-2008 10:39:52 | 只看该作者

如何查看当前表的编码

提示: 作者被禁止或删除, 无法发言
在MySQL命令行下使用如下命令,查看当前数据库编码
mysql>use database_name;
mysql>show create table table_name;

在MySQL命令行下使用如下命令,查看字符集变量
mysql>show variables like 'character%'

也可以直接进入数据库所在的子目录查看具体配置文件 db.opt
指定utf8编码的数据库的db.opt内容如下
  1. default-character-set=utf8
  2. default-collation=utf8_general_ci
复制代码
指定gbk编码的数据库的db.opt内容如下
  1. default-character-set=gbk
  2. default-collation=gbk_chinese_ci
复制代码
当然我认为这仅仅是数据库的连接方式,和数据库结构本身的编码方式。保存在数据库中的的数据还是可以使用不同编码的,具体写入那种编码的数据,要看你的写入方式。

这里有一篇说明如何使用把环境完全变成UTF8的
http://hi.baidu.com/macleo/blog/ ... f8e1529822ed51.html
回复  

使用道具 举报

25#
 楼主| 发表于 14-9-2008 15:03:55 | 只看该作者

导出/导入MySQL数据

提示: 作者被禁止或删除, 无法发言
先研究一下采用DZ GBK版本全新安装创建的数据库编码格式和采用DZ UTF8版本全新安装创建的数据库编码格式有什么不同吧。
不同之处在于这个数据库的编码格式(查看db.opt),以及每个表的缺省编码格式,还有每个字段的缺省编码格式,(查看表结构的缺省字符集选项)都不同。


导出:mysqldump

-u[username] 指定用户名
-p[password] 指定密码
-q 用于导出大数据库(采用行读取,代替一次性导入内存,用内存做缓存,再一次性写入的下数据库导出方式)
-e 使用多行insert语句代替直接插入值的写法,生成的文件小,加载速度快
-x 导出为XML格式
--compatible=databasenameversion 指定兼容于最低版本
--default-character-set=charset_name 指定导出文件所采用的文件编码格式,缺省使用utf8,老版本缺省latin

MySQL\bin>mysqldump -uroot -ppassword -q -e databasename > filename.sql
导出当前数据库结构及数据为一个UTF8编码的文本本件

再用EmEditor查看这个文件,发现文件编码格式是UTF8的,采用UTF8格式打开不存在乱码(这很重要,我转换汉字没有变成乱码,不知道为什么,不过如果你转换了发现汉字是乱码,说明采用utf8导出不成功,应该采用数据的本来编码,在本例中是gbk,指定这个--default-character-set=gbk来导出,然后再用emeditor直接另存为utf8格式,就算转换编码完成了)。
但是其中创建每个数据表的语句则指定了缺省字符集是GBK。
  1. DEFAULT CHARSET=gbk
复制代码
我决定把这个语句中的gbk替换成utf8(一共替换了93次)这个需要把左右指定gbk的地方替换成utf8,我的emEditor在替换大于1G的文件的时候出错,说是替换成功了,但是实际上什么也没改!

创建一个新的数据库databasenameutf8指定编码格式为utf8 (db.opt)
MySQL\bin>mysql -uroot -ppassword databasenameutf8 < filename.sql

由于文本文件我没改成功,所以进入新建立的数据库,发现使用的还都是gbk编码,进入phpAdmin的管理界面逐一手工改掉了。


通过phpmyadmin建立一个新库,库名:test2 ,采集字符集设定为utf8-general-li

再将刚才生成sql文件导入新数据库

D:\PHPServer\MySQL\bin>mysql -uroot -p –default-character-set=utf8 test2 < d:/zxs.sql
回复  

使用道具 举报

您需要登录后才可以回帖 登录 | FreeOZ用户注册

本版积分规则

小黑屋|手机版|Archiver|FreeOZ论坛

GMT+10, 28-4-2024 12:37 , Processed in 0.037119 second(s), 43 queries , Gzip On, Redis On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表