Mysql
從 utf8 更改為 utf8mb4
目前MySql數據庫有:
- 字元集:utf8
- 預設排序規則名稱:utf8_unicode_ci
我想將其更改為:
- utf8mb4
- utf8mb4_unicode_ci
我也會對數據庫中的所有表做同樣的事情。
我的問題如下:
通過進行這種更改,我的專欄內容是否有可能以任何方式混亂?(因為我真的很害怕這樣做!!!)
我的表中有數百萬行,在我切換所有表的內容都正常後,有什麼方法可以檢查嗎?
我想到的一些瘋狂的想法包括:
- 執行一些腳本來比較原始數據庫和更改後的數據庫
- 執行一些腳本來計算原始數據庫的列大小到更改的數據庫
任何能引導我走向正確方向的幫助或想法將不勝感激。
謝謝你
更改表的主要注意事項是 utf8 索引列的索引長度會增加,這可能會使它們超出限制。為您的 mysql 版本調整 URL,因為存在一些差異。這些超出索引長度的錯誤將立即顯示,
ALTER TABLE
因此這將是遷移的最後一點。在驗證時,通常不會有問題。在幾張桌子上試試這個,以獲得對小桌子上想法信心的信心:
CREATE TABLE tbl_new LIKE tbl ALTER TABLE tbl_new .. {change to utf8mb4 fields} INSERT INTO tbl_new SELECT * FROM tbl RENAME TABLE tbl_new TO tbl, tbl TO tbl_old
A
SELECT ... tbl JOIN tbl_old ON tbl.pk = tbl_old.pk WHERE tbl.utf_field != tbl_old.utf_field
可用於驗證值。可以檢查應用程序行為,如果它們有問題,您可以重命名。(考慮到更新)。
對於每個表:
ALTER TABLE t CONVERT TO CHARACTER SET utf8mb4 COLLATION utf8mb4_unicode_ci;
這會更改一個表中的所有字元串列。如果您有任何不應該是 utf8mb4 的列,則需要採取規避措施。
如果你盲目使用
VARCHAR(255)
並且正在使用 MySQL 5.5 或 5.6,則可能存在索引問題。以下是一些解決方法:http: //mysql.rjweb.org/doc.php/limits#767_limit_in_innodb_indexes您可能會考慮這種較新的排序規則:
utf8mb4_unicode_520_ci