MySQL数据类型—字符串数据类型
以下类型都已字符串的形式存储,故全部归结为字符串类型
1.CHAR(M)
- 固定长度字符串,M指定是多少就是多少。
- 在底层存储时占用M个字符。如果字符串长度小于M会用空格填充,大于M会报错。
- 在取出数据时会将填充的空格去掉。所以以CHAR(5)存储的‘ab ’在取出后会成为‘ab’。在不指定M时,M默认为1。
2.VARCHAR(M)
- 可变长度字符串,可以存储长度小于等于M的字符。
- 在底层存储时占用**(字符串的实际长度+1)**个字符,因为会用一个字符来保存字符串的长度。
- 在定义时必须指定M的大小,否则会报错,且最大字符串长度为21845。
3.如何选择CHAR(M)和VARCHAR(M)
- CHAR(M)因为固定了长度,如果存储的字符串长短不一,长度差距较大,那么存储时会浪费大量的空间存储空格。
- VARCHAR(M)会用额外的一个空间来储存字符串的长度,如果字符串都是固定长度的字符,那么使用VARCHAR(M)就会浪费一个字符的空间。
- 还要考虑采用的是何种引擎,不同的引擎底层的存储结构不同。
4.TEXT文本类型
- 主要用于存储比较大的文本段,搜索速度较慢。
- 有四种:TINYTEXT、TEXT、MEDIAMTEXT、BIGTEXT,四种类型存储范围不同。
- 频繁更改的表不建议使用TEXT文本类型。TEXT因其占用空间较大,频繁删除会造成空洞,建议单独使用一张表来保存TEXT文本。
5.ENUM类型
- 设置为ENUM类型的字段的值只能为ENUM类型中的一个。
//建立表
CREATE TABLE test_enum (
season ENUM('春','夏','秋','冬','unknown')
);
//插入数据
INSERT INTO test_enum (season) values ('春');
6.SET类型
- 设置SET类型的字段的值可以为SET类型中的0个或多个。
//建立表
CREATE TABLE test_set (
gender ENUM('男','女'),
res SET('A','B','C','D','F')
);
insert into test_set values
('男','A'),
('女','A','B','C');
版权声明:本文为m0_51139074原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。