Mysql

從 utf8 更改為 utf8mb4

  • February 23, 2021

目前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

ASELECT ... 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

引用自:https://dba.stackexchange.com/questions/266800