Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
Здравствуйте,
недопонимание по вопросу кодировки

select @@version
Microsoft SQL Server 2005 - 9.00.5057.00 (X64)
Mar 25 2011 13:33:31
Copyright (c) 1988-2005 Microsoft Corporation
Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) - Windows 2003

SELECT CONVERT (varchar, SERVERPROPERTY('collation'))
Kazakh_90_CI_AI
SELECT CONVERT (varchar, DATABASEPROPERTYEX('bd','collation'))
Kazakh_90_CI_AI

строки в таблице table_1 :
ваыав
ываыва
ің,ғң.,ғүе
емииеитеи
ғ,ғң,ңғіңғе
ЕККЕЧее
Перам
ОПТПЕЕЕЕ

выполнение выражения :
select t from table_1 where t like N'%е%'
в SQL Server Management Studio на сервере же выдает :
ің,ғң.,ғүе
емииеитеи
ғ,ғң,ңғіңғе
ЕККЕЧее
Перам

а нужно без учета регистра:
ің,ғң.,ғүе
емииеитеи
ғ,ғң,ңғіңғе
ЕККЕЧее
Перам
ОПТПЕЕЕЕ

выполняя :
select t from table_1 where t like N'%Е%'
получаем:
ЕККЕЧее
ОПТПЕЕЕЕ

... возможно после опубликования поста слетят нац.буквы в приведении примеров, но они у меня отображаются корректно

как победить? или подскажите как правильно (до)настроить сервер и субд или по синтаксису для нормальной(прозрачной) работы с национальным collate
24 окт 11, 21:45    [11492024]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74930
А какой тип данных и колэйшен у столбца?
24 окт 11, 22:01    [11492088]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
pkarklin
А какой тип данных и колэйшен у столбца?


nvarchar(50)
Collation <database default>
24 окт 11, 22:09    [11492107]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
step_ks
Member

Откуда:
Сообщений: 936
Kansky, а что выдает
select t from table_1 where t like upper(N'%е%')
24 окт 11, 22:43    [11492203]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
step_ks
Kansky, а что выдает
select t from table_1 where t like upper(N'%е%')


t
--------------------------------------------------
ЕККЕЧее
ОПТПЕЕЕЕ

(2 row(s) affected)
24 окт 11, 22:46    [11492213]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
step_ks
Member

Откуда:
Сообщений: 936
а
select t from table_1 where lower(t) like N'%е%'
24 окт 11, 22:51    [11492223]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
Kansky
step_ks
Kansky, а что выдает
select t from table_1 where t like upper(N'%е%')


t
--------------------------------------------------
ЕККЕЧее
ОПТПЕЕЕЕ

(2 row(s) affected)



возможны другие варианты кроме :
select t from table_1 where upper(t) like upper(N'%е%')
t
--------------------------------------------------
ің,ғң.,ғүе
емииеитеи
ғ,ғң,ңғіңғе
ЕККЕЧее
Перам
ОПТПЕЕЕЕ

(6 row(s) affected)

имеется ввиду хочется иметь работу без лишних операторов(upper .. lower) как в случае с обычной кириллицей 1251
24 окт 11, 22:51    [11492224]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
step_ks
Member

Откуда:
Сообщений: 936
unique constraint эти E и е считает за одинаковые?
24 окт 11, 22:58    [11492242]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
step_ks
unique constraint эти E и е считает за одинаковые?


затрудняюсь ответить..как это узнать?
24 окт 11, 23:04    [11492259]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

узнать легко - не считает. Видимо это свойство данного коллейта. Сделать можно так:
declare @t1 table(t nvarchar(100) collate Kazakh_90_CI_AI unique)
insert @t1 values
(N'ваыав'),
(N'ываыва'),
(N'ің,ғң.,ғүе'),
(N'емииеитеи'),
(N'ғ,ғң,ңғіңғе'),
(N'ЕККЕЧее'),
(N'Перам'),
(N'ПЕрам'),
(N'ОПТПЕЕЕЕ')

select t from @t1 where t like N'%[Ее]%'
select t from @t1 where t like N'%е%' collate Cyrillic_General_CI_AI
24 окт 11, 23:15    [11492295]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy,

t
----------------------------------------------------------------------------------------------------
ғ,ғң,ңғіңғе
ЕККЕЧее
емииеитеи
ОПТПЕЕЕЕ
ПЕрам
Перам
ің,ғң.,ғүе

(7 row(s) affected)

t
----------------------------------------------------------------------------------------------------
ғ,ғң,ңғіңғе
ЕККЕЧее
емииеитеи
ОПТПЕЕЕЕ
ПЕрам
Перам
ің,ғң.,ғүе

(7 row(s) affected)

значит в collation Kazakh_90_CI_AI е<>Е, ...
и что посоветуете тогда что и как использовать? какой collation итп
25 окт 11, 07:03    [11492698]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky
значит в collation Kazakh_90_CI_AI е<>Е, ...
и что посоветуете тогда что и как использовать? какой collation итп

Эм.... Какой вам больше подходит, тот и используйте! У вас что, единственное требование, чтоб Е=е было??
25 окт 11, 09:12    [11492857]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy
Kansky
значит в collation Kazakh_90_CI_AI е<>Е, ...
и что посоветуете тогда что и как использовать? какой collation итп

Эм.... Какой вам больше подходит, тот и используйте! У вас что, единственное требование, чтоб Е=е было??


у меня пока окончательных вариантов нет, вопрос в том (если возможно) как всё настроить максимально удобно для разработки приклада, чтобы не замарачиваться например на постоянном указании различных collation в запросах..
насколько я понимаю если использовать например Cyrillic_General_CI_AI то при операциях группировки, join или даже distinct будут слетать отображение национальных символов
25 окт 11, 10:10    [11493097]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

с какого перепугу?
declare @t1 table(t nvarchar(100) collate Cyrillic_General_CI_AI)
insert @t1 values
(N'ваыав'),
(N'ываыва'),
(N'ің,ғң.,ғүе'),
(N'емииеитеи'),
(N'ғ,ғң,ңғіңғе'),
(N'ЕККЕЧее'),
(N'Перам'),
(N'ПЕрам'),
(N'ОПТПЕЕЕЕ')

select distinct t from @t1 where t like N'%Е%'
25 окт 11, 10:16    [11493140]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy
Kansky,

с какого перепугу?
declare @t1 table(t nvarchar(100) collate Cyrillic_General_CI_AI)
insert @t1 values
(N'ваыав'),
(N'ываыва'),
(N'ің,ғң.,ғүе'),
(N'емииеитеи'),
(N'ғ,ғң,ңғіңғе'),
(N'ЕККЕЧее'),
(N'Перам'),
(N'ПЕрам'),
(N'ОПТПЕЕЕЕ')

select distinct t from @t1 where t like N'%Е%'


проблема вылезает на другом символе - ә (Ә)
declare @t1 table(t nvarchar(100) collate Cyrillic_General_CI_AI)
insert @t1 values
(N'ваыав'),
(N'ываәыва'),
(N'ің,ғң.,ғүе'),
(N'емиәиеитеи'),
(N'ғ,ғәң,ңғіңғе'),
(N'ЕККЕЧее'),
(N'ПерӘам'),
(N'ПЕӘрам'),
(N'ОПТПЕЕЕЕ')

select distinct t from @t1 where t like N'%ә%'
[/quot]
25 окт 11, 10:30    [11493253]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

какая именно проблема?
25 окт 11, 10:41    [11493344]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy
Kansky,

какая именно проблема?


результат такой
t                                                                                                    
---------------------------------------------------------------------------------------------------- 
ваыав
ғ,ғәң,ңғіңғе
ЕККЕЧее
емиәиеитеи
ің,ғң.,ғүе
ОПТПЕЕЕЕ
ПерӘам
ываәыва
25 окт 11, 10:49    [11493406]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

declare @t1 table(t nvarchar(100) collate Tatar_100_CI_AI)
insert @t1 values
(N'ваыав'),
(N'ываәыва'),
(N'ің,ғң.,ғүе'),
(N'емиәиеитеи'),
(N'ғ,ғәң,ңғіңғе'),
(N'ЕККЕЧее'),
(N'ПерӘам'),
(N'ПЕӘрам'),
(N'ОПТПЕЕЕЕ')

select t from @t1 where t like N'%ә%'
select t from @t1 where t like N'%е%'
25 окт 11, 10:58    [11493475]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy,

видимо у Вас 2008 ....тут речь про 2005
Server: Msg 448, Level 16, State 2, Line 1
Invalid collation 'Tatar_100_CI_AI'.

есть только Tatar_90_CI_AI
25 окт 11, 11:15    [11493625]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
Kansky
iljy,

видимо у Вас 2008 ....тут речь про 2005
Server: Msg 448, Level 16, State 2, Line 1
Invalid collation 'Tatar_100_CI_AI'.

есть только Tatar_90_CI_AI


с ним вроде работает как надо...буду экспериментировать..
25 окт 11, 11:18    [11493648]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

и?
25 окт 11, 11:20    [11493659]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy
Kansky,

и?


на этом collation пока не увидел проблемы по сабжу, что еще можно протестировать кроме основных select..insert.. update..
где могут возникнуть грабли..? где соломки подстелить?
25 окт 11, 11:34    [11493803]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

вопрос относился к вашему предыдущему сообщению, про наличие только Tatar_90.
Вопрос вообще говоря филосовский. Увас строка юникодная, так что на хранящиеся символы влияния не будет, только на сравнение и сортировку. Соответственно надо проверить, что оно работает так, как вам надо: разные символы трактуются как разные, одинаковые - как одинаковые, сортируются без неожиданных открытий.
25 окт 11, 11:42    [11493889]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
iljy
Member

Откуда:
Сообщений: 8711
Kansky,

вот пример проверки эквивалентности больших и маленьких символов для латиницы (замените для пробы на регистрозависимый коллейт).
declare @t table (s nvarchar(100) collate Latin1_General_CI_AS)
declare @sU nvarchar(100), @sl nvarchar(100), @s nvarchar(100)
select @sU = N'ABCDEFGHIJKLMNOPQRSTUVWXYZ', @sl = 'abcdefghijklmnopqrstuvwxyz', @s = @sU + @sl

insert @t select @sU union all select @sl

select SUBSTRING(@s, number,1) c
from master..spt_values n join @t t on t.s like N'%' + SUBSTRING(@s, number,1) + N'%'
where type = 'P' and number between 1 and LEN(@s)
group by n.number
having COUNT(*) <2

Можно похожим образом вытянуть строку в столбец и сделать distinct - получите символы, которые считаются различными.
25 окт 11, 11:54    [11494050]     Ответить | Цитировать Сообщить модератору
 Re: Кодировка, collate, регистр, Kazakh_90_CI_AI  [new]
Kansky
Member

Откуда:
Сообщений: 155
iljy
Kansky,

вопрос относился к вашему предыдущему сообщению, про наличие только Tatar_90.
Вопрос вообще говоря филосовский. Увас строка юникодная, так что на хранящиеся символы влияния не будет, только на сравнение и сортировку. Соответственно надо проверить, что оно работает так, как вам надо: разные символы трактуются как разные, одинаковые - как одинаковые, сортируются без неожиданных открытий.


как перенастраивать? на субд один collation включая системные tempdb ...
как пользовательский интерфейс потом правильно разрабатывать например в датасетах Delphi в SQL текст запроса в формате string

не будет проблем с клиентскими машинами если у них региональные настройки другие?
итд
25 окт 11, 12:17    [11494309]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить