SQL! Апострофы у числа в условии
Есть ли грубая ошибка в том, что число при условии заключается в кавычки?
Например: where..... ='8'
Спор с преподавателем, селект работает и с апострофом и без. Где-то нашла информацию о том, что тип numeric считается числовой константой, только если там есть десятичные точки или экспонента. Прошу развернутый ответ
Включение чисел в апострофы в условии WHERE (например, WHERE column = '8') может работать, но это зависит от системы управления базами данных (СУБД) и типа столбца. В общем случае:
Если столбец имеет строковый тип (например, VARCHAR, TEXT), то сравнение с числом в апострофах будет работать, так как СУБД выполнит неявное преобразование типов.
Если столбец имеет числовой тип (например, INT, FLOAT), то сравнение с числом в апострофах также может работать, так как СУБД может неявно преобразовать строку в число.
Однако, лучше придерживаться правила: числа сравнивать с числами, а строки со строками. Это делает код более понятным и предотвращает неожиданные ошибки. В частности, если в строке содержатся нечисловые символы, неявное преобразование может привести к ошибке.
Вывод
Включение чисел в апострофы в SQL условиях может работать из-за неявного приведения типов, но это не является хорошей практикой. Для строк используйте апострофы и удваивайте их для экранирования. Для чисел апострофы не нужны. Используйте параметризованные запросы для безопасности и удобства.
Это считается плохой практикой: во-первых, базе данных приходится делать лишнюю работу по преобразованию строки в число, что может замедлить запрос на больших данных, во-вторых, такой код сложнее читать другим разработчикам, ведь не сразу понятно, с каким типом данных мы работаем.
Будет восприниматься, как строка, но СУБД может привести к числовому типу, тут по конкретной СУБД смотреть надо, а в случае с MySQL ещё есть разные режимы SQL,в которых подобные нюансы могут работать по-разному.