У меня есть довольно странная проблема в SQL Server (версия 12.0.2000.8, collation - Hungarian_CI_AS): У меня есть таблица с столбцом с нулевым значением varchar (128), который хранит usernames, , и я просто не могу сопоставить ни один из них с простым оператором '='. Итак, когда я выполняю такой запрос: select * from myTable where username = 'john.doe'
, он не возвращает никаких строк.Идентификация строки SQL-сервера по сравнению с CHAR (0)
Я обнаружил, что, когда я выбираю то же самое с LIKE и положить% в заднем полукоксе, так: select * from myTable where username = 'john.doe%'
, он работает отлично.
Таким образом, я создал запрос, который заменяет весь полукокс (0) -s со знаками «$», выглядит следующим образом:
select REPLACE(username, CHAR(0), '$') from myTable
where username LIKE 'john.doe%'
и возвращает 128 долго буквальный, как это (фаршированным trailing $ -s): john.doe $$$$$$$$$$
Учитывая вышеизложенные факты, я подозревал, что почему-то проблема с char (0) - это проблема, но когда Я запускаю простой запрос для моделирования тех же условий для оператора «=», я получаю, что 2 литерала равны:
SELECT CASE WHEN ('john.doe') = ('john.doe' + CHAR(0) + CHAR(0) + CHAR(0)) THEN 'Equal' ELSE 'Not Equal' END
Этот запрос возвращает Equal.
Так что я совершенно смущен, что здесь происходит? И что мне делать, чтобы оператор '=' работал в моей таблице базы данных?
Для меня ваш тестовый запрос возвращает «Не равно», как и должно быть. –
Ну, теперь проблема усложняется. :) Могу ли я спросить, какая версия сервера sql и какая сортировка вы используете? – user1307533
Это не должно иметь значения. Добавление конечного символа 'char (0)' должно сделать строку другой. Сравнение '=' игнорирует только конечные пробелы, все остальные символы должны быть приняты во внимание. Я использую SQL Server 2008 10.0.6000.29, Latin1_General_CI_AS –