mysql-enum-set测试

发布:2018-08-07 07:42   点击21次   评论:0
-- Adminer 4.3.1 MySQL dump

SET NAMES utf8;
SET time_zone = '+00:00';
SET foreign_key_checks = 0;
SET sql_mode = 'NO_AUTO_VALUE_ON_ZERO';

DROP TABLE IF EXISTS `xtest_keyid_ys`;
CREATE TABLE `xtest_keyid_ys` (
`kid` varchar(24) NOT NULL,
`kno` int(11) NOT NULL DEFAULT '0',
`content` varchar(254) NOT NULL DEFAULT '',
`aip` varchar(255) DEFAULT '',
`atime` int(11) NOT NULL DEFAULT '0',
`auser` varchar(24) NOT NULL DEFAULT '',
`test_v3x` int(11) NOT NULL DEFAULT '20160313',
`aa` float NOT NULL DEFAULT '0',
`AA12` float NOT NULL DEFAULT '0',
`BB22` text NOT NULL,
`items` enum('e1','e2','e3','e4','es') NOT NULL,
`sets` set('s1','s2','s3','s4','sa') NOT NULL,
PRIMARY KEY (`kid`),
KEY `sets` (`sets`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

INSERT INTO `xtest_keyid_ys` (`kid`, `kno`, `content`, `aip`, `atime`, `auser`, `test_v3x`, `aa`, `AA12`, `BB22`, `items`, `sets`) VALUES
('b1',2,'b3','b4',5,'6',7,8,9,'b10','e3','s2,s4'),
('c1',2,'c3','c4',5,'6',7,8,9,'c10','e1','s3,sa'),
('d1',2,'d3','d4',5,'6',7,8,9,'d10','e1','s1'),
('e1',2,'e3','e4',5,'6',7,8,9,'e10','e1','s2'),
('a1',2,'a3','e4',5,'6',7,8,9,'a10','e1','s2,s3,s4');

-- 2018-02-05 04:01:06

========================================================

UPDATE xtest_keyid_ys SET sets='a' WHERE kid='a1'; -- 无效
UPDATE xtest_keyid_ys SET sets='s2' WHERE kid='a1'; -- ok
UPDATE xtest_keyid_ys SET sets='6' WHERE kid='a1'; -- ok
UPDATE xtest_keyid_ys SET sets=7 WHERE kid='a1'; -- ok
UPDATE xtest_keyid_ys SET sets='s2,s3,s4' WHERE kid='a1'; -- ok
UPDATE xtest_keyid_ys SET sets='s4,s2,s3' WHERE kid='a1'; -- ok
结果其实是:s2,s3,s4(14)

* 搜索多个
SELECT * FROM xtest_keyid_ys WHERE sets=10; -- ok,但要换算
SELECT * FROM xtest_keyid_ys WHERE sets=20; -- ok,但要换算
SELECT * FROM xtest_keyid_ys WHERE sets=14; -- ok,但要换算

SELECT * FROM xtest_keyid_ys WHERE sets='s2,s4'; -- ok,顺序要一致
SELECT * FROM xtest_keyid_ys WHERE sets='s3,sa'; -- ok,顺序要一致
SELECT * FROM xtest_keyid_ys WHERE sets='s2,s3,s4'; -- ok,顺序要一致

* 搜索单个
SELECT * FROM xtest_keyid_ys WHERE sets IN('s2','s4'); -- ok,只找其中一个,不是组合
SELECT * FROM xtest_keyid_ys WHERE sets IN('s3','sa'); -- ok,只找其中一个,不是组合
SELECT * FROM xtest_keyid_ys WHERE sets IN('s2','s3','s4'); -- ok,只找其中一个,不是组合

* 用不了索引
SELECT * FROM xtest_keyid_ys WHERE sets&2=2;

SELECT * FROM xtest_keyid_ys WHERE sets='s4,s2'; -- xx,交换文字不行
SELECT * FROM xtest_keyid_ys WHERE sets='sa,s3'; -- xx,交换文字不行
SELECT * FROM xtest_keyid_ys WHERE sets='s2,a,s4'; -- xx,交换文字不行

例如查询3月份的景点,可使用以下语句:
SELECT *FROM`spots`WHERE`month`&4=4

SELECT * FROM xtest_keyid_ys WHERE sets&2=2; -- ok,顺序要一致

http://bbs.csdn.net/topics/360124723
mysql中set类型字段怎样进行位运算和索引?



========================================================


mysql中的数据类型enum和set
https://www.cnblogs.com/benbenzhu/p/5604598.html

mysql中的数据类型enum和set

1、enum

  单选字符串数据类型,适合存储表单界面中的“单选值”。

  设定enum的时候,需要给定“固定的几个选项”;存储的时候就只存储其中的一个值。

  设定enum的格式:

    enum("选项1","选项2","选项3",...);

  实际上,enum的选项都会对应一个数字,依次是1,2,3,4,5...,最多有65535个选项

  使用的时候,可以使用选项的字符串格式,也可以使用对应的数字。

2、set

  多选字符串数据类型,适合存储表单界面的“多选值”。

  设定set的时候,同样需要给定“固定的几个选项”;存储的时候,可以存储其中的若干个值。

  设定set的格式:

    set("选项1","选项2","选项3",...)

  同样的,set的每个选项值也对应一个数字,依次是1,2,4,8,16...,最多有64个选项

  使用的时候,可以使用set选项的字符串本身(多个选项用逗号分隔),也可以使用多个选项的数字之和(比如:1+2+4=7)
评论(0条)   >>发布 评论列表

关于 GitHub 导航 部门 反馈

提示:`/chn.php`入口数据仅为演示功能,不构成任何交易凭证,也不承担相关风险和责任!

Copyright © 2011-2018 xxxxx.com All rights reserved. 粤ICP备07020797号.

Done:211.022/242.246(ms); 6(queries)/2.233(MB); Tpl:comm:news/detail; Upd:2019-08-20 20:46:43