刪除每列和表排序規則和字元集
CHARSET=utf8 COLLATE=latin1
我最近完成了一個數據庫從CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
. 在此過程中,通過更改它們各自的字元集和排序規則屬性,一次遷移一個表。既然轉換已經完成,並且所有伺服器和數據庫本身現在都已設置為使用 utf8mb4 和 utf8mb4_unicode_ci,我將如何從列和表中刪除這些屬性,以便它們繼承伺服器上設置的預設值?
例如,目前如果我
SHOW FULL COLUMNS FROM table;
對大多數列執行排序規則,則將其設置為 utf8mb4_unicode_ci 而不是 NULL。
轉換列:
ALTER TABLE table_name MODIFY col_name VARCHAR(100) CHARACTER SET utf8;
轉換錶:
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8;
作為程序員,很容易假設數據庫中存在“繼承”。如果值為 null,請查看父級。
沒有繼承
文本類型列不能有空字元集或排序規則。每個欄位在創建時都會有一個固定的字元集和排序規則。想像一下,在表或數據庫級別更改為完全不同的字元集,現有列中的現有數據會自動繼承新字元集。它可能看起來很腐敗。
這是一些文件: https ://dev.mysql.com/doc/refman/8.0/en/charset-table.html
MySQL 以下列方式選擇表字元集和排序規則:
如果同時指定了 CHARACTER SET charset_name 和 COLLATE collation_name,則使用字元集 charset_name 和 collation collation_name。
如果 CHARACTER SET charset_name 未指定 COLLATE,則使用字元集 charset_name 及其預設排序規則。要查看每個字元集的預設排序規則,請使用 SHOW CHARACTER SET 語句或查詢 INFORMATION_SCHEMA CHARACTER_SETS 表。
如果在沒有 CHARACTER SET 的情況下指定了 COLLATE collation_name,則使用與 collation_name 和 collation collation_name 關聯的字元集。
否則(既未指定 CHARACTER SET 也未指定 COLLATE),則使用數據庫字元集和排序規則。
為了清楚起見,創建列時選擇了字元集和排序規則。如果您更改它們,您還應該同時轉換數據。