Mysql
轉換字元編碼並檢查編碼是否存在問題
我打算將表格從
utf8
(_general_ci
) 轉換為utf8mb4
(utf8mb4_unicode_ci
)。我想確保在轉換後我沒有任何格式錯誤的數據,所以我打算複製數據,在兩個表上執行連接,看看是否有任何差異。這是一個很好的方法嗎?
Create table Email_utf8mb4 like Email;
insert into Email_utf8mb4 select * from Email;
ALTER TABLE Email_utf8mb4 CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
select * from Email as old join Email_utf8mb4 as new on old.notificationid =new.notificationid and (old.subject <> new.subject OR old.content <> new.content)
4.5. 假設沒有返回行…
drop Email;
RENAME TABLE Email_utf8mb4 to Email;
subject
並且content
是我表中唯一的 alpha 列。
這不會修復或辨識表中已經存在的任何格式錯誤的數據。
是的,這是一個很好的技術。
ALTER..CONVERT TO..
完成大部分工作。而且,由於 utf8 是 utf8mb4 的子集,因此在第 4 步中應該沒有發現任何差異。但是,第 4 步仍有可能顯示某些內容。這是因為“相等”的定義(因此)對於vs
<>
是不同的。_general_ci``_unicode_ci
例如,在德語中,
ss
並且ß
在 _general_ci(utf8 或 utf8mb4)中不相等,但在幾乎所有其他排序規則中都相等。例如,如果您目前有一個UNIQUE
(orPRIMARY KEY
) 的值與ss
vs不同ß
,則轉換將出現“重複鍵”錯誤的問題。另一個有問題的對:
ae
vsæ
一個不同的問題 - 不是相等,而是排序 -
Ð
<E
用於 _unicode_ci,但不適用於其他排序規則。同時,只要你在改變
COLLATION
,你還不如去utf8mb4_unicode_520_ci
.