为了账号安全,请及时绑定邮箱和手机立即绑定
编程百科手册

扫一扫 手机阅读

精选留言
  • Kyrie啊

    醍醐灌顶,面试官特别喜欢问int(20)跟bigint的区别,这里总算知道20只是显示宽度了

    讲师回答 / 门牙没了

    很高兴能帮助到你。

  • 翻了身的咸鱼

    66666

  • hwl_01

    create table varchar_test3(id int auto_increment, col_2 varchar(21842), primary key(id))charset=utf8 engine=innodb; 老师,一行所有的列长度加起来不能超过21844,col_2已经占了21842,也就是说只留下2 * 3 = 6个字节的空间可用了,int占4个字节,还有2个字节?我的理解正确吗,期待解答,谢谢!

    讲师回答 / 门牙没了

    是varchar的总长度,不是所有的数据类型的总长度。这个关键点要搞清楚哈。

  • hwl_01

    老师 如果按照上面的理解 那下面的情况 create table varchar_test_v1 ( col_1 varchar(21842), col_2 smallint, col_3 smallint ) charset = utf8 engine = innodb; create table varchar_test_v2 ( id int auto_increment, col_1 varchar(21842), col_2 smallint, primary key (id) ) charset = utf8 engine = innodb; 应该只有v1能创建成功,现实情况是v2也能成功,我就懵逼了。

    讲师回答 / 门牙没了

    在一个表中,varchar的长度限制和其他数据类型没有关系,因此你添加整型字段是可以成功的。

  • hwl_01

    哈哈 问题来了,为什么UTF8报最大长度21845却创建不成功,有开销21844可以理解, 而utf8mb4最大长度16383就可以,难道utf8mb4就没有开销了吗? mysql> create table varchar_test_v3(col_1 varchar(65535))charset=UTF8MB4 engine=innodb; ERROR 1074 (42000): Column length too big for column 'col_1' (max = 16383); use BLOB or TEXT instead mysql> create table varchar_test_v3(col_1 varchar(16383))charset=UTF8MB4 engine=innodb; Query OK, 0 rows affected (0.08 sec)

    讲师回答 / 门牙没了

    都是有额外开销的。这个建议不要只看官方给的error code,还是要以自己的计算为准:65535-16383*4=3,满足存储需求,所以可以创建成功。

正在加载中...

造烛求明,读书求理
扫码关注慕课网服务号
干货分享
定期活动
课程优惠
专栏福利
官方优惠福利活动一手掌握,关注慕课网(ID:imooc-com),和30万+程序员一起成长!

本专栏知识点梳理

1.全面提升MySQL知识,可学:

2.企业级数据库项目案例,参考:

下载慕课网APP

更好的体验,让阅读随处可得

扫描二维码,下载慕课网APP
意见反馈 帮助中心 APP下载
官方微信