2016-09-20 1 views
1

Сегодня я заметил что-то странное. Скажем, у вас есть MySQL таблицы:MySql странное поведение - полосы символов справа от id, где пункт

create table usr(
    usr_id serial 
) 

И вставить строку:

INSERT INTO usr (usr_id) VALUES ('1'); 

И затем вы запускаете запрос:

SELECT * FROM usr WHERE usr_id='1sfgfsdgs' 

MySql возвращает результат, как если бы вы ввели :

SELECT * FROM usr WHERE usr_id='1' 

Должно это происходит? Если да - может кто-нибудь указать мне на документацию, описывающую это? Мне просто интересно, будет ли это ожидаемым поведением.

[Jeremy @ jjxps15 ~] $ MySQL --version MySQL Ver 15.1 Distrib 10.1.17-MariaDB, для Linux (x86_64) с использованием Readline 5,1

+0

Целое число 1sfgfsdgs равно 1, возможно, именно поэтому. Определяется ли usr_id как целое число? – Lexib0y

ответ

0

Ну это страница, которая имеет грязь, http://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

Но это ясно, как грязь

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

У него есть несколько примеров, что делает вещи немного яснее

mysql> SELECT 1 > '6x'; 
     -> 0 
mysql> SELECT 7 > '6x'; 
     -> 1 
mysql> SELECT 0 > 'x6'; 
     -> 0 
mysql> SELECT 0 = 'x6'; 
     -> 1 

Что это по существу означает, что если число сравнивается с буквенно-цифровой строкой и строка начинается с числом все, не числовые символы до конца отбрасываются.

Тот факт, что вы используете серийный номер, на самом деле не имеет никакого отношения к этому.

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