MySQL результаты проблема, когда значение имеет число, заканчивающееся строкой

0

Может ли кто-нибудь указать на это поведение и hw, чтобы остановить это?

Я знаю о литье или добавлении двойных кавычек.

Мне было интересно, есть ли другой способ

Определение таблицы Heres

CREATE TABLE 'countries' (
 'id' int(11) NOT NULL AUTO_INCREMENT,
 'country_name' varchar(100) NOT NULL,
 PRIMARY KEY ('id')
) ENGINE=InnoDB AUTO_INCREMENT=1

Изображение 174551

Запись с идентификатором 1 верна, но id 2 не удовлетворяет условию where, но возвращается.

  • 0
    Есть ли какие-либо изменения в Таблице определений, которые могут это исправить?
  • 1
    Нет, вам не нужно кодировать это.
Показать ещё 2 комментария
Теги:
select
casting
condition

2 ответа

2

Попробуй это:

select * from countries where country_name='7884'
  • 0
    Правильно, как я уже сказал, я знаю, что это исправление. Но я использую Laravel (Doctrine), а драйвер запускает запрос. Так что мне было интересно решение, ориентированное на структуру, чтобы мне не пришлось вносить изменения в каждый файл / условия в таком случае.
1

Проблема заключается в том, когда вы пишете country_name = 7884, что country_name неявно отлита как signed integer. И в процессе кастинга 'S' просто игнорируется, как вы можете видеть здесь. Это выбирает вторую строку, потому что cast('1884S' AS signed)= 1884= 1884 (ваш вход).

Как уже было предложено fa06, окружите операнд одинарными кавычками, чтобы сделать его строкой и предотвратить неявное преобразование - ... where country_name = '7884'.

  • 0
    Любая конфигурация на уровне настроек mysql, чтобы предотвратить это автоматическое приведение?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню