/ / MySQL автоматичний рядок до цілішого відліку в депозиці? - mysql, sql

MySQL автоматичний рядок до цілішого відліку в депозиті? - mysql, sql

Я не новачок у 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