>记录生活, 工作的点点滴滴...

MySql数据类型 - ENUM/SET

当要存储的列值是固定集合的值是, 可以选用ENUM/SET数据类型. 这两种数据类型, 以字符串形式输入, 而内部却是以整数形式处理的.

CREATE TABLE booleans (yesno enum('Y','N'),
truefalse enum('T','F')
);

/***********
enum 内部是以整数形式处理的, enum('Y', 'N'), 以数组对 1 -> 'Y', 2 -> 'N', ...等一一对应形式存储.
所以, 插入与筛选时, 1 与 'Y'的处理结果是一样的.
值得一提的是, 0 -> '' 是保留值, 当处理的数据不在enum列表值内时, 处理为0; 若SQL MODE 为严格(strict)模式, 则报错.

*/
INSERT INTO booleans values ('Y','T');
INSERT INTO booleans values ('Y','F');
INSERT INTO booleans values (2,1);
INSERT INTO booleans values (2,2);

-- 以下两条语句结果是一样的
SELECT * FROM booleans WHERE yesno = 2;
SELECT * FROM booleans WHERE yesno = 'N';
----------------------------------------------------
CREATE TABLE questions(
choices SET('baidu', 'google', 'bing', 'sougou')
);
/******
SET 内部以bitmap存储, 1 -> 'baidu', 2 -> 'google', 4 -> 'bing', 8 -> 'sougou', ...
'baidu,bing' -> 0101 -> 1+4 -> 5
0为保留值, 表示空.
**/
INSERT INTO questions values ('baidu,bing');
INSERT INTO questions values (9); -- 1+8 -> 'bai,sougou'

-- 以下两条语句结果是一样的
SELECT * FROM questions WHERE choices = 5;
SELECT * FROM questions WHERE choices = 'baidu,bing';


发表于:2019-03-04 14:33:57浏览(267) 评论(0) MySQL