2010-09-10 2 views
1

Я обнаружил, что MySQL возвращает нечетные результаты при поиске в столбцах INT.Поиск MySQL в столбцах INT, возвращающих неверные результаты

)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1' 

Возвращает продавец с ключом 1.

б)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1sdjhksadhak' 

Возвращает продавец с ключом 1.

с)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = '1adlksajdkj187987' 

Возвращает продавец с ключом 1.

д)

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = 'adlksajdkj187987' 

не возвращает ничего.

Почему b и c возвращают результат? если есть способ сделать поиск строгим?

ответ

3

Вы проводите сравнение с числовым столбцом.

Для этого mySQL необходимо автоматически преобразовать строку в число.

Процесс литья использует все, что может использоваться для целочисленного значения, начиная с левой стороны, и отбрасывает все остальное.

Вот пример, который подчеркивает поведение:

SELECT CAST('1adlksajdkj187987' TO unsigned) 

вернется 1:

Самое простое решение не использовать кавычки:

SELECT * 
    FROM `sellers` 
WHERE `seller_key` = 1 

Я полагаю, MySql будет бросаться ошибка здесь, если она запущена в traditional mode.

теория MYSQL для тех, кто интересуется:

1

Возможно, это потому, что ваш столбец seller_key имеет числовой тип.

Так что, когда вы используете '1', '1sdjhksadhak' или '1adlksajdkj187987', все они преобразуются в числовые значения .

0

seller_key является столбец INT, так что вы должны использовать:

SELECT * FROM sellers WHERE seller_key = 1 сравнить seller_key с числовым значением.