1,CHAR/VARCHAR——定长字符串/变长字符串
a,需要定义字符串长度CHAR(M),默认为1 0<=M<=255
说明
CREATE TABLE test_char1(
c1 CHAR,
c2 CHAR(5)
);
DESC test_char1;
INSERT INTO test_char1(c1)
VALUES ('a');
INSERT INTO test_char1(c2)
VALUES ('hello');
SELECT* FROM test_char1;
b,如果实际长度比M小,会在右侧填充空格,以达到长度M
说明
SELECT CONCAT(c1,'***')
FROM test_char1 ;
c,M即为CHAR类型字段所占的储存空间的字节数
d,CHAR是定长字符串
e,VARCHAR必须指定M 0<=M<=65535
说明
CREATE TABLE test_varchar2(
NAME VARCHAR(5)
);
INSERT INTO test_varchar2
VALUES ('阿巴阿巴');
SELECT* FROM test_varchar2;
f,字节字符
4.0版本以下VARCHAR(20)指的是20字节,存放UTF8汉字时,只能存6个
4.0版本以上VARCHAR(20)指的是20字符
g,CHAR/VARCHAR区别
CHAR 固定长度 浪费储存空间 效率高 速度快
VARCHAR长度可变 节省储存空间 效率低
h,使用情景
1,短信息,如门牌号,用char
2,固定长度用char
3,column频繁改变用char
2,TEXT类型——长文本数据
由于实际存储的长度不确定,MYAQL不允许使用TEXT做主键
TINYTEXT/TEXT/MEDIUMTEXT/LONGTEXT
说明
CREATE TABLE test_text(
tx TEXT
);
INSERT INTO test_text
VALUES('abaaba');
SELECT * FROM test_text;
0<=M<=65535
3,ENUM类型——枚举
说明
CREATE TABLE test_enum(
season ENUM('春','夏','秋','冬','UNKNOWN')
);
INSERT INTO test_enum
VALUES('春'),('秋'),('unknown');
SELECT * FROM test_enum;
a,不可以放在一个括号里
INSERT INTO test_enum
VALUES('春','秋');
b,没有限制非空的情况下,可以增加NULL
INSERT INTO test_enum
VALUES('NULL');
c,添加的字符必须在ENUM里
d,忽略大小写
INSERT INTO test_enum
VALUES('unknown');
e,0<=M<=255
4,SET类型
说明
CREATE TABLE test_set(
a SET('A','B','C')
);
INSERT INTO test_set
VALUES ('A,B'),('A');
SELECT * FROM test_set;
a,上限64
b,输入重复的类型时会自动删除重复部分
INSERT INTO test_set
VALUES ('A,A');
c,插入不存在的值,MYSQL报错
INSERT INTO test_set
VALUES ('D');
d,插入数量大于等于2时,放在一个括号里
INSERT INTO test_set
VALUES ('A,B');