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

转载 2007年10月16日 00:59:00
原贴:http://www.kakapo.cn/blog/read.php?5

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的数据和编码方式.


MySQL | 评论(4) | 引用(0) | 阅读(500)
very163 Homepage
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 最后页
发表评论 

升级到 Android Studio 3.0 + Gradle 4.1 遇到的一些坑及解决方案

问题一:Cannot set the value of read-only property 'outputFile' for ApkVariantOutputImpl_Decorated{apkDa...
  • CHITTY1993
  • CHITTY1993
  • 2017年11月29日 16:44
  • 1287

Gradle升级4.1(插件3.0.0)变化了哪些东西,需要做哪些改变。

Gradle升级4.1(插件3.0.0)变化了哪些东西,需要做哪些改变。转载请注明出处: Gradle升级4.1(插件3.0.0)变化了哪些东西,需要做哪些改变。 地址:http://www.ji...
  • qq_22744433
  • qq_22744433
  • 2017年10月30日 11:13
  • 1662

MySQL Windows上编码问题和解决方法

本文简要介绍了Windows下使用MySQL是可能遇到的字符集问题的解决方法:统一使用utf8编码,对于命令行需要修改客户端为GBK实现对UTF8中文的访问。...
  • yin138
  • yin138
  • 2016年01月13日 21:12
  • 1950

MySQL修改编码设置及乱码问题

一. 在前台连接写入的时候编码是不是与数据库编码符合二、查看MYSQL数据库的编码mys...
  • pzw_0612
  • pzw_0612
  • 2015年08月29日 15:35
  • 8005

Linux下MySQL出现乱码的解决方法以及如何设置编码方式

开发环境Cent OS 7.0; MySQL:Server version: 5.6.33 MySQL Community Server (GPL)最新版:Server version: 5.7.1...
  • u010870518
  • u010870518
  • 2016年10月10日 21:44
  • 7940

mysql升级(5.6.15升级到5.7.15)

mysql升级(5.6.15升级到5.7.15): 1,备份旧库: mysqldump -uuei -puei123 uei > /data/uei.sql    备份权限:参考mysql权限备份...
  • huoyuanshen
  • huoyuanshen
  • 2016年10月14日 14:05
  • 1304

哈夫曼编码时遇到的一些问题

我被自己神奇地坑了       好久没写东西了。这些天都在编Huffman编码树,遇到一些问题,发现原来都是在坑自己。 首先是以下代码无法正常读取文本文件     ...
  • u014006264
  • u014006264
  • 2014年06月30日 09:58
  • 1133

Python读取文件字符编码问题

在使用python命令行读取文件的时候很容易由于字符编码造成各种问题,下面是读取文件的的时候遇到的一个问题: text = open("C:/Users/Administrator/Desktop/o...
  • qq_23953717
  • qq_23953717
  • 2017年11月03日 12:52
  • 91

【mysql】修改mysql5.5默认编码

mysql数据库的默认编码并不是utf-8。 安装mysql后,启动服务并登陆,使用show variables命令可查看mysql数据库的默认编码: 由上图可见database和serv...
  • moxiaomomo
  • moxiaomomo
  • 2013年01月24日 20:19
  • 26851

ORACLE 11g 切换到oracle账号显示bash 4.1的问题解决方案

Su – oracle切换过去的时候,发现没有显示oracle@hostname标识,而是显示了-bash-4.1$ ,如下所示: [root@hch_test_pd_121_217 ~]# su...
  • mchdba
  • mchdba
  • 2016年10月19日 20:58
  • 2052
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于Mysql 升级到4.1出现的编码问题
举报原因:
原因补充:

(最多只允许输入30个字)