关于Mysql 升级到4.1出现的编码问题

原贴:http://www.kakapo.cn/blog/read.php?5

关于Mysql 升级到4.1出现的编码问题

大 | 中 | 小
[ 2006/10/12 14:18 | by kakapo ]
1.Mysql 4.0 

Mysql 4.0版本的数据库几乎没有任何编码问题.


2.Mysql 4.1  

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

3.在MySql4.1创建新的数据库:通过phpMyAdmin来设置。

设置下面几项:
1: 语言设置为 chinese (zh-utf-8)
2: MySQL 字符集: UTF-8 Unicode (utf8)
3: MySQL 连接校对:  utf8_general_ci
4: 新增数据库和数据表的时候,整理项选择 utf8_general_ci
通过以上设置,在phpMyAdmin中操作和查询,导出的时候,中文字符都不会乱码了。

但是你会发现,在php程序中用以前的sql语句查询出来的结果还是乱码,问题就出在connection连接层上。
解决方法是在成功连接数据库之后,发送一句查询语句:
1: $this->LinkID = @mysql_connect($this->Host, $this->User, $this->Password);
2: @mysql_query('SET NAMES 'utf8'', $this->LinkID);
       

4.数据库如何从Mysql4.0升级到4.1:
     MySQL4.1.x版本的默认字符配置是:default-character-set=latin1 default-storage- engine=INNODB,如果创建表和字段没有选择整理项,就会默认采用latin1_swedish_ci 表和项的整理项;


选择一:
采用统一的utf8字符集和utf8_general_ci整理项;需要修改配置文件my.cnf或者my.ini(win);即修改
     default-character-set=utf8
  character-set-server=utf8 
  init_connect="SET NAMES 'utf8'"
其实也可以在创建表或者项的时候手动自己选择utf8_general_ci 整理项;


下面通过phpMyAdmin来升级数据库到MySQL4.1;

步骤:
1.先备份要升级的数据库;
2.导出原来数据的结构和数据,中文不能出现乱码;(提示:原来是MySql4.0则在phpMyadmin2.5.3下导出数据结构;如果原来数据已经被编码成UTF8则可以在phpMyadmin2.6.4导出,目的就是为了导出没有乱码的中文数据!:))
3.在MySql4.1.x下创建新的数据库名,注意此时数据库整理项(可选)为utf8_general_ci;
4.用editplus打开前面导出的sql文件;
5.在phpMyadmin2.6.4通过SQL输入框创建表结构,并批量插入数据;这个时候所有数据在进入数据库的时候都被默认转换成跟my.cnf设置的字符集相同的编码;
6.所有网站的程序,包括模板文件都要全部转换编码成utf-8;这样服务器apache输出的编码才一致,浏览器自动识别文件编码,自动显示正确的格式!!!

选择二:(实验证明可以的)
不需要修改MySQL4.1.x的配置文件my.cnf,默认latin1字符集;
    直接将MySQL4.0的data文件(*.frm,*.MYD,*.MYI)拷贝到MySQL4.1就可以用.但是要使用phpMyadmin2.5.x版本查看数据库才不会出现中文乱码;而且网页的程序也不需要做任何修改,显示也是正常的.
    用phpMyadmin2.6.x以上版本查看数据会有乱码,而且你会发现原来4.0下的字符集都是latin1_swedish_ci(可能跟my.cnf默认的相同);

5.如何从MySQL4.1恢复成MySQL4.0,主要是从utf-8编码转成gb3212编码:(通过phpMyadmin操作)

步骤:


1.准备一台装着MySQL4.0版本的数据库服务器,(在个人主机上装一个mysql-noinstall-4.0.26-win32.zip就可以了);


2.在上面准备的服务器上通过phpMyadmin建立同名的空数据库;


3.在已经运行的MySQL4.1.x版本的数据库服务器上,装上phpMyAdmin 2.6.x以上版本和phpMyAdmin 2.5.3版本各一个;


4.1 通过phpMyadmin2.6.x版本查看4.1上的表的数据,导出没有中文乱码的结构和数据(以.sql备份),然后用editplus 2.1打开(可以注意到这个.sql文件是默认以utf-8编码方式打开的.),删掉表结构上的DEFAULT CHARSET=utf8默认字符集(因为MySQL4.0没有不支持),然后拷贝内容,在装着MySQL4.0的主机上,通过 phpMyadmin2.5.3的SQL创建新表并批量注入数据.(如果表结构太大,采用批处理 例子bin/mysql ?p < /home/mark/New_Data.sql )

4.2 如果通过phpMyadmin2.6.x版本查看4.1上的表的数据有中文乱码,用另外的phpMyAdmin 2.5.3版本查看,一般就正常的(这是因为以前的转编码方法不对造成的.可能4.1数据库中的编码其实还是latin1).接着采用4.1后面的方法. 注意删掉表结构上的DEFAULT CHARSET=utf8.


5.一个表一个表的操作.只能这样数据库才能恢复成MySQL4.0的数据和编码方式.


Tags: 编码 , mysql4.0
MySQL | 评论(4) | 引用(0) | 阅读(500)
very163
2007/10/10 22:20
你好,mysql4.1乱码后如何到处不乱的数据,我用的外国空间,升级到4.1后全乱了,在phpMyAdmin - 2.10.0.2下也是乱码啊,网管帮我调了几天,贴子标题还是乱的!郁闷啊!老外就这水平!你能帮我看看吗?http: //bbs.very163.com
kakapo 回复于 2007/10/11 00:38
你 的bbs网页采用gbk的编码,那么你mysql升级成4.1之后最好也采用gbk的字符集存储(如何正确升级mysql官方网站有指导方法),然后 phpwind论坛程序在连接到数据库服务器之后第一个执行mysql_query("set names 'gbk'");

你现在论坛出现的问题可能就剩下部分表的字段数据没有采用正确的升级方法造成的。
明蓝
2007/09/14 09:27
另外我是用phpMyAdmin看数据库的
明蓝
2007/09/14 09:26
嗯,kakapo说得太对了,我是要先理解原理。谢谢,我再去学习。
明蓝
2007/09/13 19:00
请教kakapo:我迁移过来的mysql数据库有乱码,数据库浏览时有,网页中照样有。

我用“SHOW VARIABLES LIKE 'character_set_%'; ”,得到结果如下:

Variable_name  Value  
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server latin1
character_set_system utf8
character_sets_dir E:/xampplite/mysql/share/charsets/


用SHOW VARIABLES LIKE 'collation_%'; 查询,结果如下:
Variable_name  Value  
collation_connection utf8_general_ci
collation_database utf8_general_ci
collation_server latin1_general_ci

我怀疑是加了下划线的参数有问题,但不知道对不对,如果对,也不知道如何修改

我用的服务器是WAMPP,其中:
phpMyAdmin - 2.9.0.1
MySQL client version: 5.0.24a
kakapo 回复于 2007/09/13 23:06
你 用什么工具查看数据库的?数据从网页进入数据库,在数据库中保存,再从数据库取出来显示,这中间可以有很多层编码转换机会。只有深刻理解数据流在每个环节 的编码方式,才可以理解为什么会出现乱码的问题?上面这篇文章写的太杂乱了,不利你理解原理。你可以看看另外一篇文章,加强你的理解。http: //www.kakapo.cn/blog/read.php?58
分页: 1/1 1
发表评论 

你可能感兴趣的:(数据库,mysql,phpMyAdmin,character,collation,数据库服务器)