在mysq中的字符串类型有 VARCHAR 、 CHAR、 ENUM 、SET、 BLOB、 TXT
VARCHAR和CHAR
1、CHAR为固定长度的字符串,VARCHAR是长度可变的字符串,
例如 有一个char(5) 和 varchar(5)来存放字符串‘ab’,那么用char存的就是字符串 ‘ab’后加上3个空格,固定用五个字节存,从varchar(5)存的就是‘ab’所占字节+ 1字节,很明显varchar更节省内存。
2、如果存入的字符串后面有空格,varchar会保留空格,char则会删除空格
如 ‘ab ’,char会把后面的空格删除,只留下‘ab’。varchar则会保留字符串后面的空格。
正是由于varchar存所以varchar更常用
SQL Code
1
2 3 4 5 |
CREATE
TABLE vvar(Cha
CHAR(
5),VarCha
VARCHAR(
5));
INSERT into vvar VALUES( 'ab ', 'ab '); SELECT CONCAT( '(',Cha, ')') AS 'char' , CONCAT( '(',VarCha, ')') AS 'varchar' FROM vvar; |
3、如果插入的字符串长度超出CHAR和VARCHAR定义时的长度,那么超出的部分就会被截取
SQL Code
1
2 |
CREATE TABLE vvar (Cha CHAR(
5),VarCha VARCHAR(
5));
INSERT into vvar VALUES( 'abcdef', 'abcdef'); |
TEXT
TEXT类型保存非二进制(字符流形式)的字符串,如文章内容、评论等。当保存或查询TEXT列的值时,不删除尾部空格。TEXT类型分为4种:
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
各种TEXT类型的区别在于允许的长度和存储空间不同。
ENUM类型
TEXT
ENUM类型又称为枚举类型
格式:
字段名 ENUM('值1','值2',...,'值n')
字段名 ENUM('值1','值2',...,'值n')
ENUM值在内部用整数表示,每个枚举值都有一个索引值:列表值所允许的成员值从1开始编号,MySQL存储的就是这个索引编号,而不是列表中的值。
SQL Code
1
2
CREATE
TABLE eumm(enm ENUM(
'first',
'second',
'third'));
SELECT enm,enm+
0
FROM eumm;
应用例子:
SQL Code
1
2
CREATE
TABLE tablell(soc
INT,
level enum(
'excellent',
'good',
'bad'));
INSERT
INTO tablell
VALUES(
70,
'good'),(
90,
1),(
75,
2),(
50,
3);
SQL Code
1
INSERT
INTO tablell
VALUES(
70,
'best');
因为“best” ,并没有在枚举中定义
SET类型
SET 跟 ENUM 类型有点相像
SET的每个值都是在内 部用一个整数表示,但是SET值可以自由组合,且每个组合在内部也是用一个整数值代表。
SQL Code
1
2
3
CREATE
TABLE ppp (s
SET(
'a',
'b',
'c'));
INSERT
INTO ppp
VALUES(
'a'),(
'b'),(
'c'),(
'a,b'),(
'a,c'),(
'b,c'),(
'a,b,c');
SELECT s,s+
0
FROM ppp;
SQL Code
1
2
INSERT
INTO ppp
VALUES(
1);
SELECT s,s+
0
FROM ppp;
BLOB
blob 类型用来存的是字节型
的二进制数据,跟TEXT(字符型二进制)相反。blob存的是一般是图片,音频的字节流文件,但事实上这些数据一般都不用数据库来存,所以不举例了。
SQL Code
1
2 |
CREATE
TABLE eumm(enm ENUM(
'first',
'second',
'third'));
SELECT enm,enm+
0
FROM eumm;
|
SQL Code
1
2 |
CREATE
TABLE tablell(soc
INT,
level enum(
'excellent',
'good',
'bad'));
INSERT
INTO tablell
VALUES(
70,
'good'),(
90,
1),(
75,
2),(
50,
3);
|
SQL Code
1
|
INSERT
INTO tablell
VALUES(
70,
'best');
|
SET类型
SET 跟 ENUM 类型有点相像
SET的每个值都是在内 部用一个整数表示,但是SET值可以自由组合,且每个组合在内部也是用一个整数值代表。
SQL Code
1
2 3 |
CREATE
TABLE ppp (s
SET(
'a',
'b',
'c'));
INSERT INTO ppp VALUES( 'a'),( 'b'),( 'c'),( 'a,b'),( 'a,c'),( 'b,c'),( 'a,b,c'); SELECT s,s+ 0 FROM ppp; |
SQL Code
1
2 |
INSERT
INTO ppp
VALUES(
1);
SELECT s,s+ 0 FROM ppp; |
BLOB
blob 类型用来存的是字节型
的二进制数据,跟TEXT(字符型二进制)相反。blob存的是一般是图片,音频的字节流文件,但事实上这些数据一般都不用数据库来存,所以不举例了。