#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», и теперь я исправил это), а о объяснении, почему совпали только два, чтобы я мог проверить, где у меня могут быть другие возможные результаты ошибок.