mysql 快速公升級 MySQL 4到5的快速公升級

2021-10-20 22:24:58 字數 1618 閱讀 3474

作/譯者:葉金榮(email:

週末幫乙個客戶做了一次公升級,是從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資料檔案即可實現低成本公升級,但是如果碰到了字符集以及版本變化比較大的時候,最好看看本文以及上述提到的

mysql 快速公升級 MySQL 4到5的快速公升級

作 譯者 葉金榮 email 週末幫乙個客戶做了一次公升級,是從4.0.22直接公升級到5.0.37,在windows平台下。由於是在windows平台下,而且涉及到亂碼,擔心會比較麻煩,我就先用一小部分資料進行測試。結果表明,如果原來採用的是latin1字符集,並且在mysql 5中也使用lati...

MYSQL 4 檢索資料

select distinct vend id from products 不能部分使用distinct,distinct關鍵字應用於所有列而不是前置它的列。如果給出select distinct vend id,prod price,除非指定的兩個列都不同,否則所有行都被檢索出來。select p...

mysql 4 基礎 mysql 開發基礎系列4

字串型別 1.1 char 和varchar 型別 char 列的長度固定為建立表時宣告的長度,varchar 列中的值為可變長字串。在檢索的時候,char 列刪除了尾部的空格,而varchar 則保留這些空格。在sqlserver裡都是長度2 create table vc v varchar 4...