- 字符串类型常用的包括:
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 auto_increment primary key, code char(6), name varchar(6));
mysql> desc charTest;
+-------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| 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 | 一二三四五六 | 一二三四五六 |
+----+--------------------+--------------------+