Что делает “set+0” в SQL-операторе, делают?

http://en.wikipedia.org/wiki/Hacker_ (computer_game)

http://en.wikipedia.org/wiki/Hacker_2

существует также большая игра взламывания, имя которой я просто не могу помнить. Hrm.

7
задан Obay 9 November 2009 в 17:22
поделиться

2 ответа

Неявно преобразует установленное значение в 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)
7
ответ дан 6 December 2019 в 23:07
поделиться

Проверьте http://dev.mysql.com/doc/refman/5.0/en /set.html для полного скинни, но в основном такое поле известно как «набор» - оно имеет список возможных значений, которые могут быть только одним или несколькими из них. Значение хранится в виде числа ... что означает, что экспонент_категории фактически сохраняет значение 4, когда кто-то устанавливает значение 'outdoor', потому что он устанавливает третий бит - '0100'. Когда вы позже получите значение обратно из базы данных, mysql автоматически превратит '0100' обратно в 'outdoor'.

Но, добавляя +0 к запросу, вы заставляете результат оставаться числом, поэтому вы фактически получите числовое значение «0100», если бы в данном случае значение строки было установлено на «outdoor».

Приносим извинения за получение enum и

Почему, вы можете спросить, он устанавливает значение «0100», а не просто говорит «3», как в перечислении? Поскольку набор может содержать несколько значений - если были выбраны значения «современный» (0001) и «открытый» (0100), он будет хранить «0101» <- установку 1-го и 3-го битов, которые будут возвращены как «5». если вы используете код +0.

Почему, спросите вы, он устанавливает значение «0100», а не просто говорит «3», как в перечислении? Поскольку набор может содержать несколько значений - если были выбраны значения «современный» (0001) и «открытый» (0100), он будет хранить «0101» <- установку 1-го и 3-го битов, которые будут возвращены как «5». если вы используете код +0.

Почему, спросите вы, он устанавливает значение «0100», а не просто говорит «3», как в перечислении? Поскольку набор может содержать несколько значений - если были выбраны значения «современный» (0001) и «открытый» (0100), он будет хранить «0101» <- установку 1-го и 3-го битов, которые будут возвращены как «5». если вы используете код +0.

4
ответ дан 6 December 2019 в 23:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: