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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Выбор из базы по enum('yes','no') или enum('1','0') , что лучше и быстрее?

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Без описания
Lolya
Отправлено: 06 Декабря, 2020 - 18:49:44
Post Id


Гость


Покинул форум
Сообщений всего: 69
Дата рег-ции: Май 2018  


Помог: 2 раз(а)




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

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


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



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Сейчас найду мой любимый пример...

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 числа использовать. Работает оно как задокументировано в мануале, но порой неожиданно для неподготовленного наблюдателя.


-----
PostgreSQL DBA
 
 Top
imbecile
Отправлено: 08 Декабря, 2020 - 18:04:21
Post Id


Новичок


Покинул форум
Сообщений всего: 14
Дата рег-ции: Июль 2020  


Помог: 0 раз(а)




Lolya пишет:
Как лучше

если только два значения, то тип BOOLEAN (или, что то же самое, TINYINT(1)).
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB