Несоответствие типов дает разные результаты, ГДЕ

#mysql

Вопрос:

У меня была ошибка в коде. Вместо строки '137226000008073943' я искал большое целое число в varchar(20) utf8_general_ci столбце:

SELECT job_id FROM job WHERE invoice = 137226000008073943

Не мог бы кто — нибудь объяснить, пожалуйста, почему я получил два результата-один с одинаковым номером, другой с 137226000008073929 ?

Мне нужно будет просмотреть записи, чтобы найти еще одно потенциальное неправильное совпадение, чтобы ваш намек мог подсказать мне, на чем сосредоточиться. Спасибо!

Комментарии:

1. я протестировал его с помощью MariaDB и получил ту же ошибку. Я открыл билет от MariaDB, чтобы получить ответ

Ответ №1:

Это ответ от MariaDB:

Я предполагаю, что проблема описана здесь https://mariadb.com/kb/en/type-conversion/#rules-for-conversion-on-comparison и https://dev.mysql.com/doc/refman/8.0/en/type-conversion.html

пожалуйста, используйте ПРИВЕДЕНИЕ, чтобы избежать проблемы (выберите * из t1, где vc = ПРИВЕДЕНИЕ(137226000008073943 В КАЧЕСТВЕ СИМВОЛА); )

Комментарии:

1. Спасибо! Хотя это полезно, мой вопрос на самом деле был не о предотвращении ошибки (я использовал %d в своем PHP/sprintf, где я должен был просто использовать «%s», и теперь я исправил это), а о объяснении, почему совпали только два, чтобы я мог проверить, где у меня могут быть другие возможные результаты ошибок.