我对这个SQL语句的含义感到困惑:
SELECT exhibitor_categories+0 from exhibitor_registry
什么是Exhibitor_categories + 0?它为返回的每一行返回一个数字。
Exhibitor_categories定义为:
set('contemporary', 'classical impression / transitional', 'outdoor', 'home accessories')
感谢您的时间:)
答案 0 :(得分:7)
它将设定值转换为INTEGER
。
集合被视为位图,因此第一个值设置位0
,第二个值设置位1
等。
mysql> CREATE TABLE exhibitor_registry(exhibitor_categories set('contemporary',
'classical impression / transitional', 'outdoor', 'home accessories') NOT NULL);
Query OK, 0 rows affected (0.08 sec)
mysql> INSERT
-> INTO exhibitor_registry
-> VALUES ('contemporary,classical impression / transitional,outdoor');
Query OK, 1 row affected (0.03 sec)
mysql> SELECT exhibitor_categories
-> FROM exhibitor_registry;
+----------------------------------------------------------+
| exhibitor_categories |
+----------------------------------------------------------+
| contemporary,classical impression / transitional,outdoor |
+----------------------------------------------------------+
1 row in set (0.00 sec)
mysql> SELECT exhibitor_categories + 0
-> FROM exhibitor_registry;
+--------------------------+
| exhibitor_categories + 0 |
+--------------------------+
| 7 |
+--------------------------+
1 row in set (0.00 sec)
答案 1 :(得分:4)
检查http://dev.mysql.com/doc/refman/5.0/en/set.html是否有完整的瘦,但基本上这样的字段称为'set' - 它有一个可能的值列表,只能是其中的一个或多个。该值存储为数字...这意味着当有人将值设置为“户外”时,Exhibitor_categories实际上存储了值4,因为它设置了第三位 - “0100”。当你以后从数据库中取出值时,mysql会自动将'0100'变回'outdoor'。
但是,通过向查询添加+0,您可以强制结果保留一个数字,因此如果在这种情况下行的值设置为“outdoor”,您实际上会得到数字值“0100”。
为获取枚举和混淆而道歉。
为什么,你可能会问,它是将值设置为'0100'而不是仅仅说'3',就像在枚举中一样?因为一个集合可以包含多个值 - 如果选择'当前'(0001)和'户外'(0100)值,它将存储'0101'< - 设置第1和第3位,这将返回为'5 '如果你使用+0代码。