MySQL 修改表默认字符集行为

转载自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。因此,推荐不用要这种方式修改表的默认字符集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值