Я не новачок у MySQL, але в моєму коді сьогодні сталося дивна ситуація, яка збила мене здивованим. Чи може хтось пояснити, чому це дає мені однакові результати?
SELECT * FROM `products` WHERE id = 12
і
SELECT * FROM `products` WHERE id = "12ABC"
В обох випадках я отримую той же результат, коли вибирається та ж сама запис. Я б очікував, що другий нічого не поверне мені ?! Мій ідентифікатор поля є int (11) unsigned with auto_increment flag включений.
Відповіді:
3 для відповіді № 1З документів MySQL:
Коли оператор використовується з операндами різних типів, відбувається перетворення типу, щоб операнди були сумісними
Отже, в основному "12ABC"
кидається до 12
.
1 для відповіді № 2
MySQL має здійснити конверсію, щоб зробити порівняння між двома різними типами. Вона намагається зробити рядок int і отримувати цифри з рядка починаючи з початку.
Це було, наприклад, у вас
"ABC12"
результат перетворення рядка в int буде 0