Я принял ответ Рика Джеймса, потому что он понял.
Но я бы хотел добавить больше информации после некоторого тестирования.
Случай в вопросе таков: как на самом деле MySQL сравнивает два значения, когда фильтруемый столбец имеет тип varchar, а указанное значение для фильтрации не является строкой.
Если это так, вы потеряете возможность использовать индекс, примененный к столбцу VARCHAR, который резко потеряет производительность в вашем запросе, вместо этого он должен быть быстрым и простым.
Объяснение заключается в том, что MySQL перед заданным значением, которое имеет тип, отличный от
VARCHAR выполнит полное сканирование таблицы и для каждого поля записи выполнит CAST (varcharcol как предоставленныйvaluetype) и сравнит результат с предоставленным значением.
1009 * Е.Г. *
имеющий столбец VARCHAR с именем "code" и фильтрацией
SELECT * FROM table WHERE code=1234
будет полностью сканировать каждую запись так же, как и при выполнении
SELECT * FROM table WHERE CAST(code as UNSIGNED)=1234
Обратите внимание, что если вы протестируете его с 0
SELECT * FROM table WHERE CAST(code as UNSIGNED)=0
вы получите обратно ВСЕ записи, содержащие строку, для которой значение CAST в UNSIGNED не будет иметь значения без знака для функции mysql CAST.