powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Collation vs nvarchar vs localisation
19 сообщений из 19, страница 1 из 1
Collation vs nvarchar vs localisation
    #39506615
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как связаны эти 3 вещи?
Скажем если версия винды английская, то вставить русский текст (или любой другой) можно только установив поле в nvarchar. Нужно-ли в этом случае устанавливать и collation на русский тоже и если да то зачем если и так вроде все работает?
Если локализация винды русская, то все должно работать и с varchar, опять-же нужно-ли ставить коллейшн в этоим случае если и так работает? Непонятно только почему работает varchar в этом случае, ему-ж байт не должно хватать для русских букв?
В общем как правильно этими вещами манипулировать в многоязычных системах, скажем клиент работает на арабском языке, ставим ему nvarchar + арабский коллейшн? А если коллейшн не изменять, то чем это грозит?
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506619
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
читать доку полезно, в ней написано
varchar
nvarchar
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506626
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушкачитать доку полезно, в ней написано
varchar
nvarchar
У тредстартера непонимание основ, а ты ему мелочи жизни тычешь.

1. Varchar = 1-о байтовая кодировка, она же ASCII.
2. Nvarchar = 2-х байтовая кодировка, она же UNICODE.

3. Collation = правило сравнения/сортировки символов.
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506637
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ок, коллейшн нужен для сортировки, значит с неверным коллейшн текст хранится будет, но операции поиска и сравнения не будут работать верно если коллейшн английский, а текст в nvarchar русский или арабский, это верно?
По-прежнему непонятно почему на русской локали русский текст замечательно хранится в varchar, почему так происходит?
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506649
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordоперации поиска и сравнения не будут работать верно если коллейшн английский, а текст в nvarchar русский или арабский, это верно?Операции поиска и сравнения будут работать по правилам того коллейшена, который вы укажете для этих операций. Независимо от каких то "установок коллейшена", про которые вы писали
stenfordПо-прежнему непонятно почему на русской локали русский текст замечательно хранится в varchar, почему так происходит?В varchar хранится не русский, или какой то другой, текст, а байты, т.е. цифры со значениями от 0 до 255.

В древние времена, когда UNICODE ещё не придумали, тексты на любых языках хранились именно в таком виде, и каждый раз определялись "кодировки", указывающие, какую букву нужно показывать на экране для каждого значения байта.

Так вот, когда вы устанавливаете "русскую локаль", в виндах делается специальная установка, которая указывает, что ряд байтов в однобайтных символах интерпретируются как русские буквы. Там настройка даже так называется, понятно.
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506652
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordок, коллейшн нужен для сортировки, значит с неверным коллейшн текст хранится будет, но операции поиска и сравнения не будут работать верно если коллейшн английский, а текст в nvarchar русский или арабский, это верно?Но в общем да, правильно, не будут.

Вы указываете для сортировки определённый коллейшен, и сортировка будет работать по правилам этого коллейшена.
И перекрёстные правила сортировки, как я понимаю, в этом стандарте не определены, т.е., как я понимаю, остальные символы будут сортироваться по значениям кодов?

Или в коллейшене вес символа определён для всех символов, а не только для символов этого языка?
Кто знает стандарт, расскажите!
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506655
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvg,

медитируйте
http://collation-charts.org/mssql/
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506661
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgбайты, т.е. цифры со значениями от 0 до 255Это числа.
А десятичные цифры - это 0,1,2,3,4,5,6,7,8,9, и всё.
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506662
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapalexeyvgбайты, т.е. цифры со значениями от 0 до 255Это числа.
А десятичные цифры - это 0,1,2,3,4,5,6,7,8,9, и всё.
арабские цифры жеж
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506666
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKiapпропущено...
Это числа.
А десятичные цифры - это 0,1,2,3,4,5,6,7,8,9, и всё.
арабские цифры жежОт основания системы тоже зависит.
A,B,C,D,E,F тоже могут быть цифрами. Шестнадцатиричными.
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39506667
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iapTaPaKпропущено...

арабские цифры жежОт основания системы тоже зависит.
A,B,C,D,E,F тоже могут быть цифрами. Шестнадцатиричными.
нисомненно, полемика наше всё
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507214
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
stenfordПо-прежнему непонятно почему на русской локали русский текст замечательно хранится в varchar, почему так происходит?
локаль тут вообще никаким местом.
а вот коллэйшен столбца еще как при чем.
кириллица будет именно кириллицей в варчаре только при условии,
что коллэйшен столбца кирилический,
и если заносили эту самую кириллицу либо в контексте кириллической же базы,
либо передавали юникодом.

ибо коллэйшен это не только "правила сортировки".
каждому коллэйшену соответствует определенная кодовая страница,
и именно ее будет использовать сервер, отдавая вам байты из варчара в виде символов
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507234
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-ostenfordПо-прежнему непонятно почему на русской локали русский текст замечательно хранится в varchar, почему так происходит?
локаль тут вообще никаким местом.
а вот коллэйшен столбца еще как при чем.
кириллица будет именно кириллицей в варчаре только при условии,
что коллэйшен столбца кирилический,
и если заносили эту самую кириллицу либо в контексте кириллической же базы,
либо передавали юникодом.

ибо коллэйшен это не только "правила сортировки".
каждому коллэйшену соответствует определенная кодовая страница,
и именно ее будет использовать сервер, отдавая вам байты из варчара в виде символов
т.е. на русской локали если коллейшн английский, то varchar русские буквы хранить не будет? Почему тогда на английской локали если я ставлю русский коллешн, то русские буквы не сохраняются? Путаница какая-то
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507244
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenfordo-oпропущено...

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

ибо коллэйшен это не только "правила сортировки".
каждому коллэйшену соответствует определенная кодовая страница,
и именно ее будет использовать сервер, отдавая вам байты из варчара в виде символов
т.е. на русской локали если коллейшн английский, то varchar русские буквы хранить не будет? Почему тогда на английской локали если я ставлю русский коллешн, то русские буквы не сохраняются? Путаница какая-то

А ты не слушай идиотов.
Varchar хранит БАЙТЫ, т.е. восьмибитные заначения от 0 до 255.
И срал он на коллейшн.

Это лехко проверить.
Напихайте туды любой шняги и смените коллэйшн поля или унесите базу на сервер с другим коллэйшн - ничего не изменится.
Более того, сама возможность писать
Код: sql
1.
aField collate ТраЛяЛя


намекает на ЭТО.

o-oи именно ее будет использовать сервер, отдавая вам байты из варчара в виде символов
Шедевр идиотизма.
Байты остаются байтами.
Всегда.

stenfordт.е. на русской локали если коллейшн английский, то varchar русские буквы хранить не будет? Почему тогда на английской локали если я ставлю русский коллешн, то русские буквы не сохраняются? Путаница какая-то
Все проблемы такого сорта - суть проблемы обмена с ВНЕШНИМИ системами.
Когда внешняя система передает серверу строку байт она передает и "язык этой строки".
Ну а сервер (точнее даже, клиентские библиотеки для связи с сервером) проявляет находчивость, если в "языке строки" не предполагается наличия некоторых значений байта ( например для английского - всех значений >128 ) - сервер любезно херит эти "неправильные" байты.
Обойти это можно, передавая строку байт как binary - тогда никакой обработки не будет и в varchar попадет "в точности" те значения байт, которые передали.
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507577
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
aleks222stenfordпропущено...

т.е. на русской локали если коллейшн английский, то varchar русские буквы хранить не будет? Почему тогда на английской локали если я ставлю русский коллешн, то русские буквы не сохраняются? Путаница какая-то

А ты не слушай идиотов.
Varchar хранит БАЙТЫ, т.е. восьмибитные заначения от 0 до 255.
И срал он на коллейшн.

Это лехко проверить.
Напихайте туды любой шняги и смените коллэйшн поля или унесите базу на сервер с другим коллэйшн - ничего не изменится.
Более того, сама возможность писать
Код: sql
1.
aField collate ТраЛяЛя


намекает на ЭТО.


o-oи именно ее будет использовать сервер, отдавая вам байты из варчара в виде символов
Шедевр идиотизма.
Байты остаются байтами.
Всегда.


наивный чукотский дарагуля,
получи-ка картинкой ответ

репро-код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if object_id('dbo.t') is not null drop table dbo.t;

create table dbo.t (col_cyr varchar(400) collate cyrillic_general_ci_as,
                    col_gr  varchar(400) collate greek_ci_as); 

insert into dbo.t (col_cyr) values (N'алекс трижды двоечник и прочая шняга кириллицей');

select *
from dbo.t;
--col_cyr	col_gr
--алекс трижды двоечник и прочая шняга кириллицей	NULL

update dbo.t
set col_gr = cast(col_cyr as varbinary(400));

select *,
       col_gr collate cyrillic_general_ci_as as col_gr_collate_cyr,
       cast(col_cyr as varbinary(400)) as col_cyr_bytes,
       cast(col_gr  as varbinary(400)) as col_gr_bytes
from dbo.t;



пояснения.
в таблице 2 поля-варчара, один с кириллическим коллэйшеном,
другой с греческим.
кладем в первое поле кириллицу.
во второе кладем те же самые байты, просто тупо копируем их из первого.
для тех, кто еще сомневается, что байты все те же,
выведем их селектом в виде
Код: sql
1.
2.
cast(col_cyr as varbinary(400)) as col_cyr_bytes,
cast(col_gr  as varbinary(400)) as col_gr_bytes


ну а теперь кажется алекс обещал нам одинаковый результат при селекте, ведь байты все те же?
ну, убеждаемся в их "одинаковости" при селекте в виде варчара.
да, варчара, дарагуля, ибо ТС не про варбайнари спрашивал, а про варчар.
и сервер ему байты (те же самые байты!) отдает в соответствии с коллэйшеновой кодовой страницей.

нет, конечно, последователи алекса-трижды двоечника могут продолжить работу именно с варбайнари,
ведь поле оно на то и объявлено варчаровым, чтобы оттуда выгребать именно байты.
ну или может нас спасет col_gr collate cyrillic_general_ci_as?

результаты на картинке, код приложен.
запускайте, проверяйте.

алекс, что бы ты ни говорил, ты ВАСЯ.
кстати, дарагуля, двойки получше к нику прибей,
а то при очередном надувании щек ненароком отвалятся
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507645
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
o-oaleks222пропущено...


А ты не слушай идиотов.
Varchar хранит БАЙТЫ, т.е. восьмибитные заначения от 0 до 255.
И срал он на коллейшн.

Это лехко проверить.
Напихайте туды любой шняги и смените коллэйшн поля или унесите базу на сервер с другим коллэйшн - ничего не изменится.
Более того, сама возможность писать
Код: sql
1.
aField collate ТраЛяЛя


намекает на ЭТО.


пропущено...

Шедевр идиотизма.
Байты остаются байтами.
Всегда.


наивный чукотский дарагуля,
получи-ка картинкой ответ

репро-код
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
if object_id('dbo.t') is not null drop table dbo.t;

create table dbo.t (col_cyr varchar(400) collate cyrillic_general_ci_as,
                    col_gr  varchar(400) collate greek_ci_as); 

insert into dbo.t (col_cyr) values (N'алекс трижды двоечник и прочая шняга кириллицей');

select *
from dbo.t;
--col_cyr	col_gr
--алекс трижды двоечник и прочая шняга кириллицей	NULL

update dbo.t
set col_gr = cast(col_cyr as varbinary(400));

select *,
       col_gr collate cyrillic_general_ci_as as col_gr_collate_cyr,
       cast(col_cyr as varbinary(400)) as col_cyr_bytes,
       cast(col_gr  as varbinary(400)) as col_gr_bytes
from dbo.t;



пояснения.
в таблице 2 поля-варчара, один с кириллическим коллэйшеном,
другой с греческим.
кладем в первое поле кириллицу.
во второе кладем те же самые байты, просто тупо копируем их из первого.
для тех, кто еще сомневается, что байты все те же,
выведем их селектом в виде
Код: sql
1.
2.
cast(col_cyr as varbinary(400)) as col_cyr_bytes,
cast(col_gr  as varbinary(400)) as col_gr_bytes


ну а теперь кажется алекс обещал нам одинаковый результат при селекте, ведь байты все те же?
ну, убеждаемся в их "одинаковости" при селекте в виде варчара.
да, варчара, дарагуля, ибо ТС не про варбайнари спрашивал, а про варчар.
и сервер ему байты (те же самые байты!) отдает в соответствии с коллэйшеновой кодовой страницей.

нет, конечно, последователи алекса-трижды двоечника могут продолжить работу именно с варбайнари,
ведь поле оно на то и объявлено варчаровым, чтобы оттуда выгребать именно байты.
ну или может нас спасет col_gr collate cyrillic_general_ci_as?

результаты на картинке, код приложен.
запускайте, проверяйте.

алекс, что бы ты ни говорил, ты ВАСЯ.
кстати, дарагуля, двойки получше к нику прибей,
а то при очередном надувании щек ненароком отвалятся

И как картинка КЛИЕНТСКОГО приложения опровергает то, что сказано мною?
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39507661
o-o
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
o-o
Гость
ну так научи страдальца, как получить кириллицу из второй колонки моей таблицы.
что-то aField collate ТраЛяЛя не канает.

и оказывается, это не сервер отдал мне кириллицу, а SSMS?
ну так ты научи, как напрямую, без использования клиента, данные из таблицы получать.
заодно посмотрим, что тебе вернут
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Collation vs nvarchar vs localisation
    #39891351
sibir127
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
o-o,
прочитал ваш диалог, может поможете?
не могу работать с кирилицей
проблема в обмене данных с содержанием русских слов(на кирилице), победить настройками параметров на связанном сервере(Use remote collation, Collation compatible, Collation name), настройкой драйвера ODBC (OEM/ANSI conversion), параметры DB-library в клиенте SQL Server (Автоматическое преобразование ANSI->OEM)
есть подключенный связанный сервер actian psql v.13 и БД с code page cp866 и Microsoft SQL Server 2017 (RTM) - 14.0.1000.169 (X64) Enterprise Edition
подскажите комбинацию параметров, немного (слабо сказано запутался) нужно волшебного пенделя.

Column
Id_вет! Sasha
??????! Sasha
??????! Sasha
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
Id_вет! DuceNucken must die
AEIЕD AAДEI ЕAAЕIЬЕAEx
...
Рейтинг: 0 / 0
Collation vs nvarchar vs localisation
    #39891387
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чтобы запихать русский в vаrchar нужно OEM преобразовать в мултибайтную кодировку и уже запихивать как массив двубайтных слов.

и так же обратно доставать. колайшен тут будет одинаково фиолетовый
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Collation vs nvarchar vs localisation
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]