mysql数据库set怎么使用_【mysql】MYSQL数据库中SET数据类型介绍

【mysql】MYSQL数据库中SET数据类型介绍

林氏智造 于 2013-12-07 发布

4538 人已阅

SET类型】

SET是一个字符串对象,可以有零或多个值,其值来自表创建时规定的允许的一列值。指定包括多个SET成员的SET列值时各成员之间用逗号(‘,’)间隔开。所以SET成员值本身不能包含逗号。

例如,指定为SET('one', 'two') NOT NULL的列可以有下面的任何值:

''

'one'

'two'

'one,two'

SET最多可以有64个不同的成员,当创建表时,SET成员值的尾部空格将自动被删除;当检索时,保存在SET列的值使用列定义中所使用的大小写来显示。请注意可以为SET列分配字符集和校对规则。对于二进制或大小写敏感的校对规则,当为列分配值时应考虑大小写。

【插入方法】

对于包含多个SET元素的值,当插入值时元素所列的顺序并不重要。在值中一个给定的元素列了多少次也不重要。当以后检索该值时,值中的每个元素出现一次,根据表创建时指定的顺序列出元素;SET值按数字顺序排序。NULL值排在非NULL SET值的前面。例如,假定某个列指定为SET('a','b','c','d'):

mysql> CREATE TABLE myset (col SET('a', 'b', 'c', 'd'));

插入值'a,d'、'd,a'、'a,d,d'、'a,d,a'和'd,a,d':

mysql> INSERT INTO myset (col) VALUES

-> ('a,d'), ('d,a'), ('a,d,a'), ('a,d,d'), ('d,a,d');

Query OK, 5 rows affected (0.01 sec)

Records: 5  Duplicates: 0  Warnings: 0

当检索时所有这些值显示为 'a,d':

mysql> SELECT col FROM myset;

+------+

| col  |

+------+

| a,d  |

| a,d  |

| a,d  |

| a,d  |

| a,d  |

+------+

5 rows in set (0.04 sec)

如果将SET列设置为一个不支持的值,则该值被忽略并发出警告:

mysql> INSERT INTO myset (col) VALUES ('a,d,d,s');

Query OK, 1 row affected, 1 warning (0.03 sec)

mysql> SHOW WARNINGS;

+---------+------+------------------------------------------+

| Level   | Code | Message                                  |

+---------+------+------------------------------------------+

| Warning | 1265 | Data truncated for column 'col' at row 1 |

+---------+------+------------------------------------------+

1 row in set (0.04 sec)

mysql> SELECT col FROM myset;

+------+

| col  |

+------+

| a,d  |

| a,d  |

| a,d  |

| a,d  |

| a,d  |

| a,d  |

+------+

6 rows in set (0.01 sec)

【查询】

通常情况,可以使用FIND_IN_SET()函数或LIKE操作符搜索SET值:

mysql> SELECT * FROM tbl_name WHERE FIND_IN_SET('value',set_col)>0;

mysql> SELECT * FROM tbl_name WHERE set_col LIKE '%value%';

第1个语句找出SET_col包含value set成员的行。第2个类似,但有所不同:它在其它地方找出set_col包含value的行,甚至是在另一个SET成员的子字符串中。

下面的语句也是合法的:

mysql> SELECT * FROM tbl_name WHERE set_col & 1;

mysql> SELECT * FROM tbl_name WHERE set_col = 'val1,val2';

第1个语句寻找包含第1个set成员的值。第2个语句寻找一个确切匹配的值。应注意第2类的比较。将set值与'val1,val2'比较返回的结果与同'val2,val1'比较返回的结果不同。指定值时的顺序应与在列定义中所列的顺序相同。

如果想要为SET列确定所有可能的值,使用SHOW COLUMNS FROMtbl_name LIKEset_col并解析输出中第2列的SET定义。

【写在后面】

今天晚上由于某一个突发的需求,让我想起了这个字段,可惜此字段的长度太小无法满足我们的需求。这个字段类型我在织梦管理器里面的推荐位功能看到使用过,效果不错。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL数据库数据类型有很多种,其包括ENUM、SET、BOOL/BOOLEAN和TINYINT等类型。下面是它们的特性介绍: 1. ENUM类型:ENUM类型是一种枚举类型,可以用来定义一组预定义的值。定义ENUM类型时,需要指定每个枚举值的名称,如下所示: CREATE TABLE colors ( id INT NOT NULL PRIMARY KEY, name ENUM('red', 'green', 'blue') ); 在上面的例子,colors表的name列只能存储'red'、'green'和'blue'的一个值。 2. SET类型:SET类型也是一种枚举类型,但是可以存储多个值。定义SET类型时,需要指定每个枚举值的名称,如下所示: CREATE TABLE fruits ( id INT NOT NULL PRIMARY KEY, name SET('apple', 'banana', 'orange') ); 在上面的例子,fruits表的name列可以存储'apple'、'banana'和'orange'的一个或多个值。 3. BOOL/BOOLEAN类型:BOOL/BOOLEAN类型是布尔类型,只能存储true或false。在MySQL,可以使用以下语句定义BOOL/BOOLEAN类型列: CREATE TABLE users ( id INT NOT NULL PRIMARY KEY, active BOOL ); 在上面的例子,users表的active列只能存储true或false。 4. TINYINT类型:TINYINT类型是一种整数类型,可以存储-128到127之间的值。在MySQL,可以使用以下语句定义TINYINT类型列: CREATE TABLE products ( id INT NOT NULL PRIMARY KEY, stock TINYINT ); 在上面的例子,products表的stock列可以存储-128到127之间的整数值。 除了以上介绍数据类型外,MySQL还有很多其他的数据类型,可以根据具体的需求来选择合适的数据类型

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值