Может ли кто-нибудь указать на это поведение и 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
Запись с идентификатором 1 верна, но id 2 не удовлетворяет условию where, но возвращается.
Попробуй это:
select * from countries where country_name='7884'
Проблема заключается в том, когда вы пишете country_name = 7884
, что country_name
неявно отлита как signed integer
. И в процессе кастинга 'S'
просто игнорируется, как вы можете видеть здесь. Это выбирает вторую строку, потому что cast('1884S' AS signed)
= 1884
= 1884
(ваш вход).
Как уже было предложено fa06, окружите операнд одинарными кавычками, чтобы сделать его строкой и предотвратить неявное преобразование - ... where country_name = '7884'
.