轉載自 For DBA
前言
針對以下修改表字元集的行為做個記錄
ALTER TABLE tbl_name DEFAULT CHARACTER SET charset_name;
實驗過程
The word DEFAULT is optional. The default character set is the
character set that is used if you do not specify the character set for
columns that you add to a table later (for example, with ALTER TABLE ...
ADD column).
官方文檔的意思是修改表的預設字元集行為,隻會對後面新增的沒有指定字元集的字段有效
我們驗證下:
CREATE TABLE `test_default_char` (
`id` int(11) NOT NULL,
`name` varchar(10) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
往裡面插兩條記錄,分别帶emoji和不帶emoji
insert into test_default_char values (1,'哈喽');
insert into test_default_char values (2,'哈喽');
修改表字元集,添加新的列
alter table test_default_char CHARACTER SET utf8mb4;
alter table test_default_char add c1 varchar(10);
繼續往裡面插兩條記錄,分别帶emoji和不帶emoji
insert into test_default_char values (3,'哈喽','哈喽');
insert into test_default_char values (4,'哈喽','哈喽');
檢視結果
mysql> select * from test_default_char;
+----+---------+------------+
| id | name | c1 |
+----+---------+------------+
| 1 | 哈喽 | NULL |
| 2 | 哈喽? | NULL |
| 3 | 哈喽 | 哈喽 |
| 4 | 哈喽? | 哈喽 |
+----+---------+------------+
4 rows in set (0.00 sec)
我們發現就第四條記錄的c1 字段是能看到emoji的
小結
修改表預設字元集的行為,隻是針對新加的字段的在沒有指定字元集的時候,給該字段确定字元集。老的字段還是原先的字元集,是以在使用中會出現表的字元集明明是utf8mb4的,但是确存不了emoji。是以,推薦不用要這種方式修改表的預設字元集