字符串类型常用的包括: char、varchar、text、enum、set
- 定长字符类型 char:
适用于存储的字符长度为固定长度的字符,比如中国邮政编码,中国身份证号码,手机号码等。 设定形式: 字段名称 char(字符个数)
其特点是: 1、存储的字符长度固定,最长可设定为255个字符 2、如果实际写入的字符不足设定长度,内部会自动用空格填充到设定的长度。 3、相对varchar类型,其存取速度更快。
- 变长字符类型 varchar:
适用于存储字符长度经常不确定的字符,比如姓名,用户名,标题,内容,等大多数场合的字符。 设定形式: 字段名称 varchar(字符个数)
其特点是:
1、存储的字符长度是写入的实际长度,但不超过设定的长度。最长可设定为65532 (字节)。 (1)、注:由于其最长的限制是字节数,因此存储中文和英文的实际字符个数是不同的; (2)、英文:一个字符占一个字节; (3)、中文(gbk编码) :一个字符占2个字节; (4)、中文(uf8编码) :一个字符占3个字节;
2、如果实际写入的字符不足设定的长度,就按实际的长度存储。
3、相对于char字符串,其存职速度相对更慢。
- char 与 varchar 区别
首先明确的是,char的长度是不可变的,而varchar的长度是可变的,
定义一个 char(10) 和 varchar(10), 如果存进去的是 abcd, 那么char 所占的长度依然为 10,除了字符 abcd 外,后面跟六个空格,而varchar 就立马把长度变为 4 了,取数据的时候,char 类型的要用 trim() 去掉多余的空格,而 varchar 是不需要的。
char的存取数度还是要比varchar要快得多,因为其长度固定,方便程序的存储与查找;但是char也为此付出的是空间的代价,因为其长度固定,所以难免会有多余的空格占位符占据空间,可谓是以空间换取时间效率,而varchar是以空间效率为首位的。
char的存储方式是,对英文字符(ASCII)占用1个字节,对一个汉字占用两个字节;而varchar的存储方式是,对每个英文字符占用2个字节,汉字也占用2个字节,两者的存储数据都非unicode的字符数据。
``` mysql> create table charTest (id int autoincrement primary key, code char(6), name varchar(6)); mysql> desc charTest; +-------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | autoincrement | | code | char(6) | YES | | NULL | | | name | varchar(6) | YES | | NULL | | +-------+------------+------+-----+---------+----------------+
mysql> insert into charTest (code, name) values ('123456', '123456'); mysql> select * from charTest; +----+--------+--------+ | id | code | name | +----+--------+--------+ | 1 | 123456 | 123456 | +----+--------+--------+
mysql> insert into charTest (code, name) values ('123456789', '123456789'); ERROR 1406 (22001): Data too long for column 'code' at row 1
mysql> insert into charTest (code, name) values ('123456', '123456789'); ERROR 1406 (22001): Data too long for column 'name' at row 1
mysql> insert into charTest (code, name) values ('一二三四五六', '一二三四五六'); mysql> select * from charTest; +----+--------------------+--------------------+ | id | code | name | +----+--------------------+--------------------+ | 1 | 123456 | 123456 | | 2 | 一二三四五六 | 一二三四五六 | +----+--------------------+--------------------+ ```