2016-03-01 8 views
0

Я искал какой-то код, и какая-то ошибка попалась мне на глаза. Кто-то сравнивал столбец tinyint с значением varchar.Mysql: сравнение столбца tinyint с значением varchar

Но удивительно, что это работает (как было намерено сравнивать с числовым значением 0).

Пример запроса:

create table t1(x1 tinyint); 

insert into t1 values (0),(0), (1), (2); 

select * from t1 where x1 = 'live' 

Результат:

x1 

0 

0 

Sqlfiddle

Мой вопрос, почему (любое) значение VARCHAR ведет себя так же, как числовое значение 0 для int/tinyint column?

+0

Если вам нужно сравнить столбец varchar с колонкой int/tinyint, возможно, что-то не так с вашим дизайном db. – jarlh

+0

Пожалуйста, прочитайте ... ошибка попалась мне на глаза. – user2407394

+0

Извините, не читал достаточно внимательно, снова ... – jarlh

ответ

1

MySQL бесшумно преобразует строки в числа, в числовом контексте.

Он делает это, преобразовывая ведущие цифровые символы в число. Если цифр нет, значение равно 0.

Итак, это эквивалентно x1 = 0, из-за этого изменение.

+0

не должен mysql дать ошибку ... это странное поведение .. – user2407394

+0

столкнулись с этим сегодня, очень странное поведение. Я ожидаю ошибку или хотя бы покажут пустой результат –

+0

@LuqmanSungkar. , , Вы получите сообщение об ошибке, если вы используете 'cast()'. Неявное преобразование не вызывает ошибки - иногда это удобно. –

Смежные вопросы