网站知识,内部网站建设_,泉山网站开发,友情链接的定义在MySQL建表sql里,我们经常会有定义字符串类型的需求。
CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT COMMENT 名字) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方说user表里的名字,就是个字符串。MySQL里有两个类型比较适合这个场景。 char和varchar。…在MySQL建表sql里,我们经常会有定义字符串类型的需求。
CREATE TABLE `user` ( `name` varchar(100) NOT NULL DEFAULT '' COMMENT '名字') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ; 比方说user表里的名字,就是个字符串。MySQL里有两个类型比较适合这个场景。 char和varchar。 声明它们都需要在字段边上加个数组,比如char(100)和varchar(100),这个100是指当前字段能放的最大字符数。 char和varchar的区别在于,varchar虽然声明了最大能放100个字符,但一开始不需要分配100个字符的空间,可以根据需要慢慢增加空间。而char一开始声明是多少,就固定预留多少空间。 所以,varchar比起char更省空间,一般没啥大事,大家都爱用varchar。 那问题来了,声明varchar字段时,它的最大长度是多少呢? 相信大家应该听说过varchar字段的最大长度是65535吧,没听过也没关系,你现在听到了。 但实际上是这样吗?我们来做个实验。 一、varchar最大值是多少 我们直接拿65535来试一下。 长度为65535的varchar报错 很明显报错了。报错内容也说了,由于列长度过大导致报错,最长是16383。 把上面的65535改成 16383,确实是成功了。 哦?所以说varchar最大值是16383? 当然不是,这其实还有好几个因素影响这个最大值。 二、不同字符集的影响 varchar里放的是字符串,而字符串看起来可以是英文字母,也可以是数字或中文。但不管怎么样,都可以把这样的中英文数字转成二进制的01串。 按照一定规则把符号和二进制码对应起来,这就是编码。而把n多这种已经编码的字符聚在一起,就是我们常说的字符集。 建表语句里有个CHARSET,这里填的是字符集。 不同的字符集要求使用的字节个数也不同,我们可以通过 show charset; 看到mysql支持哪些字符集,以及这些字符集里存储一个字符所需的最大字节数(Maxlen)。 查看mysql支持哪些charset 我们尝试下把建表sql语句里的CHARSET改一改,比如改成utf8mb3。 我们再执