在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存的是一般是图片,音频的字节流文件,但事实上这些数据一般都不用数据库来存,所以不举例了。