Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Выбор из базы по enum('yes','no') или enum('1','0') , что лучше и быстрее?
Форумы портала PHP.SU » » Вопросы новичков » Выбор из базы по enum('yes','no') или enum('1','0') , что лучше и быстрее?

Страниц (1): [1]
 

1. Lolya - 06 Декабря, 2020 - 18:49:44 - перейти к сообщению
CODE (htmlphp):
скопировать код в буфер обмена
  1. `banned` enum('1','0') DEFAULT '0'

или
CODE (htmlphp):
скопировать код в буфер обмена
  1. `banned` enum('yes','no') DEFAULT 'no'


Как лучше и быстрее? Что-то мне в голову стукнуло, что буквы система переводит все равно в цифры и потом делает выбор, а если вместо букв сразу цифры, то возможно будет лучше для самой системы и пусть немного, но все-же быстрее ?
2. Мелкий - 06 Декабря, 2020 - 21:54:57 - перейти к сообщению
Сейчас найду мой любимый пример...

CODE (sql):
скопировать код в буфер обмена
  1. MariaDB [test]> CREATE TEMPORARY TABLE speedlimit (i int, lim ENUM('20', '30', '40', '50', '60'));
  2. Query OK, 0 rows affected (0.000 sec)
  3.  
  4. MariaDB [test]> INSERT INTO speedlimit VALUES (1, 60);
  5. ERROR 1265 (01000): DATA truncated FOR COLUMN 'lim' at row 1
  6. MariaDB [test]> INSERT INTO speedlimit VALUES (2, 5);
  7. Query OK, 1 row affected (0.000 sec)
  8.  
  9. MariaDB [test]> INSERT INTO speedlimit VALUES (3, '60');
  10. Query OK, 1 row affected (0.000 sec)
  11.  
  12. MariaDB [test]> SELECT * FROM speedlimit;
  13. +------+------+
  14. | i    | lim  |
  15. +------+------+
  16. |    2 | 60   |
  17. |    3 | 60   |
  18. +------+------+
  19. 2 rows IN SET (0.000 sec)
  20.  
  21. MariaDB [test]> SELECT * FROM speedlimit WHERE lim > 20;
  22. Empty SET (0.000 sec)
  23.  
  24. MariaDB [test]> SELECT * FROM speedlimit WHERE lim > '20';
  25. +------+------+
  26. | i    | lim  |
  27. +------+------+
  28. |    2 | 60   |
  29. |    3 | 60   |
  30. +------+------+
  31. 2 rows IN SET (0.000 sec)
  32.  

Всё понятно почему работает именно так? Будет ли это понятно вашим коллегам тоже? А тому, кто будет читать код через год?
В общем, не надо в enum числа использовать. Работает оно как задокументировано в мануале, но порой неожиданно для неподготовленного наблюдателя.
3. imbecile - 08 Декабря, 2020 - 18:04:21 - перейти к сообщению
Lolya пишет:
Как лучше

если только два значения, то тип BOOLEAN (или, что то же самое, TINYINT(1)).

 

Powered by ExBB FM 1.0 RC1