2013-03-24 7 views
0

Это может быть простой вопрос для SQL профи здесь: Как это могло бы быть, что после запросов с базой данных (одно поле varchar(30)), получить разные результаты:где = «1234» не равна где = 1234

SELECT field FROM table WHERE field=1234; 

возвращается:

1234 
1234 

и

SELECT field FROM table WHERE field="1234"; 

возвращает:

1234 

Итак, первый запрос возвращает результат 1234 два раза, независимо от того, возвращает ли второй результат только один раз. Данные в базе данных неизвестны. Чтобы сделать его еще более расстроенным, поле «поле» в базе данных имеет уникальный ключ.

Спасибо!

+0

пространств около 1234? – Koterpillar

+0

Нет, не совсем. Когда я смотрю на два результата, я не вижу никаких пробелов. – charihans

+0

Не доверяйте глазам. Попробуйте 'SELECT поле, длину (поле), md5 (поле) FROM table WHERE field = 1234;' и опубликуйте результаты. – Koterpillar

ответ

0

Первый случай «1234» является правильным, поскольку значение поля не будет принимать повторяющиеся значения.

Чтобы убедиться, что нет никаких ошибок или системных ошибок:

попытки применить то же самое на новую таблицу с несколькими значениями в нем. сделайте столбец Unique ... и примените запрос с помощью "" и без "".

Результат должен возвращать одно значение только в первом случае с "".

Привет

+0

Да, но почему я получаю два результата с первым запросом? – charihans

+0

Это уже в вопросе ... – Koterpillar

+0

Можете ли вы попробовать этот запрос и рассказать нам о результате для обоих случаев с «" и без "": SELECT sum (field) как FieldTest FROM table WHERE field = 1234; – reaz

1

Одна возможность состоит в том, что поле является строкой, и две строки содержат эти значения

1234 
1234.0 

Оба из них будет сравнивать истинно к численному 1234.

http://dev.mysql.com/doc/refman/5.5/en/comparison-operators.html

+1

Выход будет содержать «1234.0». – Koterpillar

+0

Да, Koterpillar является правильным. Выход будет 1234.0, чем. – charihans

+0

Хммм, нужно подумать еще – SteveP

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