Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Bug в SQL Server при сравнении NVARCHAR  [new]
ппп-пп
Guest
Добрый день.

Очень бы хотелось узнать, что за прикол сущесвует sql server при сравнении NVARCHAR значений. Как я вижу это, кажись вообще баг.
Поэтому и хочется узнать Ваше мнение, что это за ерунда такая. Любые комментарии приветсвуются.

1. Это мы работает с NVARCHAR - Результат OK. Т.е. 2 разные NVARCHAR строки РАВНЫ, что странновато.
declare @V nvarchar(100)
set @V = N'c' + CHAR(0) + N'a' + CHAR(0) + N's' + CHAR(0) + N'h'

select @V, datalength(@V), datalength(N'Cash')

select 'OK'
where N'Cash' = @V


2. Это мы работает с VARCHAR - результат не OK, что нормально.
declare @V varchar(100)
set @V = 'c' + CHAR(0) + 'a' + CHAR(0) + 's' + CHAR(0) + 'h'

select @V, datalength(@V), datalength('Cash')

select 'OK'
where 'Cash' = @V




Microsoft SQL Server 2014 (SP2-GDR) (KB3194714) - 12.0.5203.0 (X64)
Sep 23 2016 18:13:56
Copyright (c) Microsoft Corporation
Developer Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)
5 июн 17, 19:28    [20541325]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
Тонкий намек про то, что вопрос collation не раскрыт:

select 'OK'
where 'Cash' COLLATE Cyrillic_General_BIN = @V collate Cyrillic_General_BIN
5 июн 17, 19:32    [20541331]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
ппп-пп
Guest
А почему "не ОК" для VARCHAR. Там тоже вроде бы collation. И при чем такой же как для NVARCHAR?
5 июн 17, 19:51    [20541353]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
ппп-пп
А почему "не ОК" для VARCHAR. Там тоже вроде бы collation. И при чем такой же как для NVARCHAR?
У меня ваши примеры дают OK в обоих случаях.

Сообщение было отредактировано: 5 июн 17, 19:57
5 июн 17, 19:57    [20541366]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
ппп-пп
Guest
Server collation SQL_Latin1_General_CP1_CI_AS
Database collaiton SQL_Latin1_General_CP1_CI_AS

Что еще сообщить. Куда еще смотреть?
5 июн 17, 20:03    [20541375]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
С вашим коллейшеном работает, как вы написали.
Хотите, чтобы работало по-другому, исползуйте другой коллейшн.

Сообщение было отредактировано: 5 июн 17, 20:08
5 июн 17, 20:05    [20541379]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
ппп-пп
Guest
Я просто пытаюсь понять, почему VARCHAR и NVARCHAR с одинаковым collation в данном случае работают как-то по-разному.
Если ответ - В ЭТОМ COLLATION так и должно быть - то мне это примерное понятно.
Но как-то это странно выглядит.

И как тогда действительно узнать баг ли это или фича.
Просто так можно на любой баг говорить, что это фича...
5 июн 17, 20:10    [20541388]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
Remind
Member

Откуда: UK
Сообщений: 523
ппп-пп,

SQL_Latin1_General_CP1_CI_AS:
Latin1-General, case-insensitive, accent-sensitive, kanatype-insensitive, width-insensitive for Unicode Data, SQL Server Sort Order 52 on Code Page 1252 for non-Unicode Data
5 июн 17, 20:23    [20541420]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
ппп-пп
Guest
Remind,

Еще узнать какая из указанных опций работает в моем случае для nvarchar. Сейчас попробуем разобраться.
Спасибо всем за правильное направление движения.
5 июн 17, 21:31    [20541532]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
Для юникода функция называется NCHAR(), а не CHAR(). Если быть точным.
Вот ещё, помню, тема про COLLATE для юникода тема была:
глюк при сравнении строк
Правда, может, не об этом...
5 июн 17, 21:55    [20541570]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1369
ппп-пп,

в вашем случае width-insensitive for Unicode Data
5 июн 17, 22:04    [20541590]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
aleks2
Guest
iap
Для юникода функция называется NCHAR(), а не CHAR(). Если быть точным.
Вот ещё, помню, тема про COLLATE для юникода тема была:
глюк при сравнении строк
Правда, может, не об этом...


Тема о том, что CHAR(0) в коллэйшене тредстатртера - игнорируется.
Есть такие символы, которые просто "исключаются" при сравнении.

ЗЫ. У мя ОК в обеих случаях.
6 июн 17, 05:11    [20541917]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
aleks2
Guest
select iif(nchar(0) = N'', 1, 0)
6 июн 17, 05:14    [20541919]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
aleks2
Тема о том, что CHAR(0) в коллэйшене тредстатртера - игнорируется.
Есть такие символы, которые просто "исключаются" при сравнении.

ЗЫ. У мя ОК в обеих случаях.
Тема о том, почему при SQL_Latin1_General_CP1_CI_AS символ char(0) игнорируется при сравнении юникодных строк, но не игнорируется при сравнении обычных.
6 июн 17, 10:39    [20542329]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
o-o
Guest
Гавриленко Сергей Алексеевич
Тема о том, почему при SQL_Latin1_General_CP1_CI_AS символ char(0) игнорируется при сравнении юникодных строк, но не игнорируется при сравнении обычных.

при сравнении юникода всегда используются виндовые правила.
т.е. это уже не правила коллэйшена SQL_Latin1_General_CP1_CI_AS
6 июн 17, 11:21    [20542583]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
o-o
Guest
чего-то не нахожу более оригинальную статью,
наверное, похерили вместе с msdn.
но могу дать ссылку на вот такое:
Questions About SQL Server Collations You Were Too Shy to Ask
автор
The database engine applies non-Unicode sorting rules to the non-Unicode data, and Unicode sorting rules to the Unicode data,
which can give you inconsistent results when working with character data stored in columns with different data types.
Again, you should be using SQL Server collations only to support those legacy databases and applications.

все сохранять надо, достали уже доки менять и истреблять
6 июн 17, 11:30    [20542641]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
iap
Member

Откуда: Москва
Сообщений: 46983
А вот эта ссылка не годится что ли?
http://www.unicode.org/reports/tr10/
6 июн 17, 11:35    [20542680]     Ответить | Цитировать Сообщить модератору
 Re: Bug в SQL Server при сравнении NVARCHAR  [new]
o-o
Guest
iap
А вот эта ссылка не годится что ли?
http://www.unicode.org/reports/tr10/

а вы считаете, что SQL_Latin1_General_CP1_CI_AS это юникодный коллэйшен?
сортирующий непонятно почему неюникодные символы по своему скульному алгоритму?
6 июн 17, 11:59    [20542779]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить