大家好,今天我们总结一下字符串类型的知识点。
字符串类型 | 大小 | 描述 |
---|---|---|
CHAR(n) | 0-255字节 | 定长字符串 |
VARCHAR(n) | 0-65535 字节 | 变长字符串 |
TINYBLOB | 0-255字节 | 不超过 255 个字符的微小二进制字符串 |
TINYTEXT | 0-255字节 | 短文本微小字符串 |
BLOB | 0-65 535字节 | 二进制形式的长文本数据 |
TEXT | 0-65 535字节 | 长文本数据 |
MEDIUMBLOB | 0-16 777 215字节 | 二进制形式的中等长度文本数据 |
MEDIUMTEXT | 0-16 777 215字节 | 中等长度文本数据 |
LONGBLOB | 0-4 294 967 295字节 | 二进制形式的极大文本数据 |
LONGTEXT | 0-4 294 967 295字节 | 极大文本数据 |
下面主要聊一下:
备注:
一个汉字占多少长度与编码有关:
UTF-8:一个汉字=3个字节
GBK:一个汉字=2个字节
char(n) varchar(n) 表示 n 个字符,无论汉字和英文,Mysql 都能存入 n 个字符,仅是实际字节长度有所区别
一 、 VARCHAR
- VARCHAR 最主要的字符串类型。是用于存储可变长字符串。它比定长类型更节省空间,因为他仅使用必要的空间。如果它使用ROW_FORMAT=FIXBD;即静态表创建的话,每一行都会使用定长存储,这会很浪费空间。
- VARCHAR 需要使用1或2个字节记录字符串的长度;如果列的最大的长度小于或等于255字节,则使用1个字节表示,否则使用2个字节,
- 在检索的时候,CHAR列会删除尾部的空格而VARCHAR则保留了这些空格。
`thumb` char(4) NOT NULL,
`email` varchar(4) NOT NULL,
mysql> select id,thumb,email from yii_user where id=6;
+----+-------+-------+
| id | thumb | email |
+----+-------+-------+
| 6 | ab | ab |
+----+-------+-------+
1 rows in set (0.04 sec)
mysql> select id,LENGTH(thumb),LENGTH(email) from yii_user where id=6;
+----+---------------+---------------+
| id | LENGTH(thumb) | LENGTH(email) |
+----+---------------+---------------+
| 6 | 2 | 4 |
+----+---------------+---------------+
1 rows in set (0.05 sec)
- MyISAM 会将行拆成不同的片段存储, InnoDB 则需要分裂页来使行可以放进页内。
二、CHAR类型
- char是定长的,
- char 类型的字符串检索速度要比 varchar 类型的快。
- 在检索的时候,CHAR列会删除尾部的空格而VARCHAR则保留了这些空格。
- char(n) 固定长度,char(4) 不管是存入几个字符,都将占用 4 个字节
三、 BLOB 和 TEXT
- 都是为了存储很大的数据而设计的数据类型,分为采用二进制和字符方式存储
- mysql 把每个BLOB和TEXT值当做一个独立的对象处理,当它们的值太大时,InnoDB会使用专门的外部存储区域进行存储,此时每个值都会有1~4个字节存储指针,然后在外部存储区域存储实际的值。
- TEXT类型有字符集和排序规则 ,BLOBM 没有字符集和排序规则
先写到这供大家参考。