Для краткости: не сравнивайте строки и целые числа в MySQL .Это может привести к непредсказуемым результатам, таким как те, которые вы видите.
В соответствии с правилами преобразования MySQL , сравнение строки и целого числа фактически приводит к тому, что оба значения находятся под капотом и преобразуются в плавающую точкуцифры, а затем сравнили.Документация предупреждает:
Сравнения, в которых используются числа с плавающей запятой [...], являются приблизительными, поскольку такие числа неточны.Это может привести к результатам, которые кажутся противоречивыми.
Далее в документе можно найти еще один отказ от ответственности, который конкретно относится к сравнению целых чисел и строк:
Кроме того, преобразованиеот строки до числа с плавающей точкой и от целого до числа с плавающей точкой не обязательно происходят одинаково.Целое число может быть преобразовано ЦП в число с плавающей запятой, тогда как строка преобразуется цифра в цифру в операции, которая включает умножение с плавающей запятой.
Показанные результаты могут различаться в разных системах и могут зависетьтакими факторами, как архитектура компьютера или версия компилятора или уровень оптимизации.
Наконец, вот пример (возможного) несоответствия преобразования, также из документации MySQL:
mysql> SELECT '18015376320243458' = 18015376320243458;
-> 1
mysql> SELECT '18015376320243459' = 18015376320243459;
-> 0