Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
ENUM('0', '1', '2', '3', '4', '5')
|
|||
|---|---|---|---|
|
#18+
Привет. В таблице есть поле, отвечающее за рейтинг ( выставленные оценки товарам ). Изначально думал сделать так: ENUM('0', '1', '2', '3', '4', '5') Полагал, что 0 будет использоваться, когда оценки нет ( по умолчанию DEFAULT 0 ). Однако, у этого множества ( ENUM ) хитрое и неочевидное поведение.. Не хочет он принимать DEFAULT 0 ( ошибки были при импорте ). Да и где-то слышал, что он может прибавить единицу к цифре... Плюс ко всему, при вставке неправильного значения вставляется ноль.. В общем, заморочки какие-то. Подскажите, как правильно организовать енум для оценок по 5-балльной шкале? Использовать буквы что ли? :) Вариант "поставь там INT" не подходит. Внешний ключ на новую таблицу с 5 цифрами - бессмысленно. Множество SET не подходит - оценка может быть только одна. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2017, 04:06 |
|
||
|
ENUM('0', '1', '2', '3', '4', '5')
|
|||
|---|---|---|---|
|
#18+
ENUM - это СТРОКОВЫЙ тип данных! который просто избавляет тебя от необходимости держать дополнительную таблицу-справочник. И хранить в нём ТАКИЕ значения весьма неразумно, потому что sameuserНе хочет он принимать DEFAULT 0 ( ошибки были при импорте ). sameuserПлюс ко всему, при вставке неправильного значения вставляется ноль. Это происходит оттого, что в теле таблицы хранится индекс строкового значения, имеющий тип беззнакового байта. А у MySQL нестрогая типизация и безусловное приведение типов. Уж лучше объявить поле как NULLable и соответственно использовать NULL как DEFAULT и как признак незаданного значения. sameuserслышал, что он может прибавить единицу к цифре.Исключено. Это может быть именно эффект конвертации - при малейшей невнимательности можно записать в таблицу не строковое значение, а его целочисленный индекс, и если они отличаются на 1, получишь описанный эффект. sameuserВариант "поставь там INT" не подходит. Внешний ключ на новую таблицу с 5 цифрами - бессмысленно.Первое предложение спорно. Не нравится INT - используй TINYINT. А второе предложение явно ошибочное. Если логика процесса требует наличия таблицы-справочника, он должен быть. Даже если в ней всего две записи. А у тебя их даже больше... Контроль входных данных и приведение в случае несоответствия можно реализовать триггерной логикой, всё получится ровно и прозрачно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2017, 07:54 |
|
||
|
ENUM('0', '1', '2', '3', '4', '5')
|
|||
|---|---|---|---|
|
#18+
ENUM - это строковый тип, надо писать DEFAULT '0'. sameuserПлюс ко всему, при вставке неправильного значения вставляется ноль.. https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html Implicit defaults are defined as follows: ... For ENUM, the default is the first enumeration value. sameuserДа и где-то слышал, что он может прибавить единицу к цифре... https://dev.mysql.com/doc/refman/5.7/en/enum.html If you retrieve an ENUM value in a numeric context, the column value's index is returned. For example, you can retrieve numeric values from an ENUM column like this: mysql> SELECT enum_col+0 FROM tbl_name; Functions such as SUM() or AVG() that expect a numeric argument cast the argument to a number if necessary. For ENUM values, the index number is used in the calculation. Итого: https://dev.mysql.com/doc/refman/5.7/en/enum.html We strongly recommend that you do not use numbers as enumeration values, because it does not save on storage over the appropriate TINYINT or SMALLINT type, and it is easy to mix up the strings and the underlying number values (which might not be the same) if you quote the ENUM values incorrectly. If you do use a number as an enumeration value, always enclose it in quotation marks. If the quotation marks are omitted, the number is regarded as an index. See Handling of Enumeration Literals to see how even a quoted number could be mistakenly used as a numeric index value. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.11.2017, 08:00 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39554805&tid=1830261]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
41ms |
get tp. blocked users: |
1ms |
| others: | 232ms |
| total: | 352ms |

| 0 / 0 |
