1.char类型
1. CHAR类型和VARCHAR类型
CHAR类型和VARCHAR类型都在创建表时指定了最大长度,其基本形式如下:
- 字符串类型(M)
- 其中,“字符串类型”参数指定了数据类型为CHAR类型还是VARCHAR类型;M参数指定了该字符串的最大长度为M。例如,CHAR(4)就是数据类型为CHAR类型,其最大长度为4。
- CHAR类型的长度是固定的,在创建表时就指定了。其长度可以是0~255的任意值。例如,CHAR(100)就是指定CHAR类型的长度为100。CHAR 存储值时,它们会用空格右填充到指定的长度。
- VARCHAR类型的长度是可变的,在创建表时指定了最大长度。定义时,其最大值可以取0~65535之间的任意值。指定VARCHAR类型的最大值以后,其长度可以在0到最大长度之间。例如,VARCHAR(100)的最大长度是100,但是不是每条记录都要占用100个字节,而是在这个最大值范围内使用多少就分配多少。VARCHAR类型实际占用的空间为字符串的实际长度加1或2,这样即可有效节约系统的空间。
mysql> use test; #选择数据库test
mysql> create table char1(e_char char(5), e_varchar varchar(5)); #创建数据库表
mysql> insert into char1 values('12345','12345'); #正常插入数据
mysql> insert into char1 values('1 2 ','1 2 '); #char类型会屏蔽后面隐藏的空格,varchar 不会
mysql>select concat('(',e_char, ')'), concat('(',e_varchar, ')') from char1 ; #让char 后面屏蔽的空格原型毕露
char 后面插入的空格直接给屏蔽了, 而 varchar 后面的空格没有被屏蔽
也可以用concat(’|’, ‘|’), 就是把引号里面的符号换一下
实战建议
- char一定会使用指定的空间,varchar是根据数据来定空间
- char的数据查询效率比varchar高:varchar是需要通过后面的记录数来计算
- 如果确定数据一定是占指定长度,那么使用char类型;
- 如果不确定数据到底有多少,那么使用varchar类型;
- 如果数据长度超过255个字符而在65535之内,直接使用varchar
- 如果字符串尾部要保留空格,必须选择varchar
2. TEXT类型
TEXT类型是一种特殊的字符串类型,包括TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT,其长度和存储空间的对比下表所示:
- 各种TEXT类型的区别在于允许的长度和存储空间不同。因此,在这几种TEXT类型中,根据需求选取既能满足需要又节省空间的类型即可。
特别注意:
- 以上各类型无须指定长度!
- 允许的长度是指实际存储的字节数,而不是实际的字符个数,比如假设一个中文字符占两个字节, 那么TEXT 类型可存储 65535/2 = 32767 个中文字符,
而varchar(100)可存储100个中文字符,实际占200个字节,但varchar(65535) 并不能存储65535个中文字符,因为已超出表达范围.
插入90个中文字符, 会提示数据过长, 无法插入 390=270 超出255字节!!
插入80个中文字符, 可以插入成功, 因为一个中文在UTF-8中占3个字节, 380=240
实战建议
- char长度固定, 即每条数据占用等长字节空间;适合用在身份证号码、手机号码等定。超过255字节的只能用varchar或者text;
- varchar可变长度,可以设置最大长度;适合用在长度可变的属性。
- text不设置长度, 当不知道属性的最大长度时,适合用text, 能用varchar的地方不用text
- 如果都可以选择,按照查询速度: char最快, varchar次之,text最慢。