热烈祝贺台州朗动科技的站长论坛隆重上线!(2012-05-28)    热烈庆祝伟大的祖国60周年生日 点击进来我们一起为她祝福吧(2009-09-26)    站长论坛禁止发布广告,一经发现立即删除。谢谢各位合作!.(2009-08-08)    热烈祝贺台州网址导航全面升级,全新版本上线!希望各位一如既往地支持台州网址导航的发展.(2009-03-28)    台州站长论坛恭祝各位新年快乐,牛年行大运!(2009-01-24)    台州Link正式更名为台州网址导航,专业做以台州网址为主的网址导航!(2008-05-23)    热烈祝贺台州Link资讯改名为中国站长资讯!希望在以后日子里得到大家的大力支持和帮助!(2008-04-10)    热烈祝贺台州Link论坛改名为台州站长论坛!希望大家继续支持和鼓励!(2008-04-10)    台州站长论坛原[社会琐碎]版块更名为[生活百科]版块!(2007-09-05)    特此通知:新台州站长论坛的数据信息全部升级成功!">特此通知:新台州站长论坛的数据信息全部升级成功!(2007-09-01)    台州站长论坛对未通过验证的会员进行合理的清除,请您谅解(2007-08-30)    台州网址导航|上网导航诚邀世界各地的网站友情链接和友谊联盟,共同引领网站导航、前进!(2007-08-30)    禁止发广告之类的帖,已发现立即删除!(2007-08-30)    希望各位上传与下载有用资源和最新信息(2007-08-30)    热烈祝贺台州站长论坛全面升级成功,全新上线!(2007-08-30)    
便民网址导航,轻松网上冲浪。
台州维博网络专业开发网站门户平台系统
您当前的位置: 首页 » MySQL/MSSQL编程 » MySQL4到5的升级

MySQL4到5的升级

论坛链接
  • MySQL4到5的升级
  • 发布时间:2008-09-07 15:30:04    浏览数:5370    发布者:tznktg    设置字体【   
 周末帮一个客户做了一次升级,是从4.0.22直接升级到5.0.37,在windows平台下。由于是在windows平台下,而且涉及到乱码,担心会比较麻烦,我就先用一小部分数据进行测试。结果表明,如果原来采用的是latin1字符集,并且在MySQL 5中也使用latin1作为默认字符集的话,在显示中文方面是不会有问题的。当然了,这只是针对MyISAM类型的表,如果是InnoDB我想还是需要通过 "mysqldump" 来实现的。

  由于MySQL 4.0和5.0的MyISAM存储引擎在各方面都发生了变化,详情可以看"MySQL 4.0 升级到5.0"。这些变化会导致一些异常的情况出现,比如一个 VARCHAR/CHAR 类型的字段查询上的异常,看下面几个查询:

  mysql>SELECT name,'yejr',length(name),length('yejr')

  mysql>FROM user WHERE name ='yejr';

  Empty set (0.00 sec)

  mysql>

  mysql>

  mysql>SELECT name,'yejr',length(name),length('yejr')

  mysql>FROM user WHERE uid=1;

  +---------+------+--------------+----------------+

  | name | yejr | length(name) | length('yejr') |

  +---------+------+--------------+----------------+

  | yejr | yejr | 4 | 4 |

  +---------+------+--------------+----------------+

  mysql>

  mysql>SELECT name,'yejr',length(name),length('yejr')

  mysql>FROM user WHERE uid=1 AND name='yejr';

  Empty set (0.00 sec)



  明明 'yejr' 和 name 内容相同,而且长度也一样,却无法得到正确的结果呢?先来看看数据表的情况吧:

  mysql> CHECK TABLE user;
+---------------------+-------+----------+---------------------------------------------------------+

  | Table | Op | Msg_type | Msg_text |

  +---------------------+-------+----------+---------------------------------------------------------+

  | yejr.user | check | error | Checksum for key: 2 doesn't

  match checksum for records |

  | yejr.user | check | error | Corrupt |

  +--------+-------+----------+---------------------------------------------------------+

  2 rows in set (0.04 sec)



  原来是把旧版本的文件直接拷贝到新版本的环境下后,出现了checksum失败,那就好办了,REPAIR 一下吧:

  mysql>REPAIR TABLE user;

  +--------+--------+----------+----------+

  | Table | Op | Msg_type | Msg_text |

  +--------+--------+----------+----------+

  | yejr.user | repair | status | OK |

  +--------+--------+----------+----------+



  然后再查询一下,就没有任何问题了。

  最后,我们来看看原因是什么,查了一下手册,发现有这么一句话:

  MyISAM 现在使用更好的校验和算法了

  这是在从MySQL 4.0 到 4.1 所产生的变化,在 "升级 MySQL" 中就能看到全部的变化列表。

  总结一下,通常情况下,直接拷贝MyISAM数据文件即可实现低成本升级,但是如果碰到了字符集以及版本变化比较大的时候,最好看看本文以及上述提到的另外两片文章。还有就是,如果出现一些异常情况了,就先执行 CHECK TABLE 来看看数据表是否有问题,然后再决定下一步该怎么做。
娱乐休闲专区A 影视预告B 音乐咖啡C 英语阶梯D 生活百科
网页编程专区E AMPZF HTMLG CSSH JSI ASPJ PHPK JSPL MySQLM AJAX
Linux技术区 N 系统管理O 服务器架设P 网络/硬件Q 编程序开发R 内核/嵌入
管理中心专区S 发布网址T 版主议事U 事务处理