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

Откуда:
Сообщений: 96
Добрый день!

Подскажите, пож-та, исходя из каких критериев выбирается серверный collation?

Существуют ли какие-то best practice в настоящее время?
30 май 19, 09:11    [21897444]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Danion
Member

Откуда: Москва
Сообщений: 196
Michail A.,

Обычно collation SQL сервера выбираем под требования проекта, базы которого будут там размещены.
30 май 19, 09:17    [21897451]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

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

а в чем могут выражаться данные требования?
30 май 19, 09:25    [21897456]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
aleks222
Member

Откуда:
Сообщений: 849
Michail A.
Danion,

а в чем могут выражаться данные требования?

На каком основном языке ведете разработку.
30 май 19, 09:28    [21897461]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

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

язык имеется ввиду какой?
30 май 19, 09:36    [21897469]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Danion
Member

Откуда: Москва
Сообщений: 196
Michail A.,

Если не путаю, то Collation применяется для сортировки и сравнения данных в таблицах. Выбор основного языка и алфавита, можно выставить, чтобы A и a считало одним символом, а можно разными. Аналогично для символов типа a и á. Есть ещё для японских символов, но это обычно выключено.
У Микрософта есть немного про это: https://docs.microsoft.com/ru-ru/sql/t-sql/statements/collations?view=aps-pdw-2016
30 май 19, 11:09    [21897539]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7385
Michail A.
aleks222,

язык имеется ввиду какой?


Язык, на котором по умолчанию хранятся данные в таблицах.
30 май 19, 11:46    [21897573]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Владислав Колосов, конкретно один язык?

Если предполагаются данные латиницы и кириллицы - можно ли подобрать подходящий collation?
30 май 19, 12:39    [21897620]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Michail A.
Владислав Колосов, конкретно один язык?

Если предполагаются данные латиницы и кириллицы - можно ли подобрать подходящий collation?
База создаётся с нуля? На сервере уже есть другие базы?
Если с нуля, то решите - при сравнении строк регистр букв должен учитываться или нет?
А если какие-то базы на сервере уже есть, то выбор у вас небольшой - COLLATE вашей базы должен совпадать с COLLATE базы tempdb.
Иначе никакой жизни у вас не будет.
30 май 19, 13:00    [21897639]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7385
Michail A.
Владислав Колосов, конкретно один язык?

Если предполагаются данные латиницы и кириллицы - можно ли подобрать подходящий collation?


Обычно используют cyrillic_general_ci_as в таких случаях.
30 май 19, 13:24    [21897660]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
fkthat
Member

Откуда:
Сообщений: 1866
Владислав Колосов
Язык, на котором по умолчанию хранятся данные в таблицах.

Данные в таблицах не хранятся "на каком либо языке". Они там либо юникодные либо однобайтовые. Коллейшен задает правила, по которым происходит сравнение строковых данных. Он может быть задан для сервера, дла базы данных, для таблицы, для отдельного столбца, или вообще быть указан в отдельном запросе к таблице. Например, две строки A и B могут иметь одинаковое юникодное представление, но для разных языков по их правилам будет для одного A < B, а для другого A > B - вот как раз эти правила collation и задает.
30 май 19, 13:44    [21897680]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
fkthat
Владислав Колосов
Язык, на котором по умолчанию хранятся данные в таблицах.

Данные в таблицах не хранятся "на каком либо языке". Они там либо юникодные либо однобайтовые. Коллейшен задает правила, по которым происходит сравнение строковых данных. Он может быть задан для сервера, дла базы данных, для таблицы, для отдельного столбца, или вообще быть указан в отдельном запросе к таблице. Например, две строки A и B могут иметь одинаковое юникодное представление, но для разных языков по их правилам будет для одного A < B, а для другого A > B - вот как раз эти правила collation и задает.
Но вы что же, при создании таблиц у всех полей COLLATE прописываете явно?
И все ваши коллеги делают так же?
Или в каждом запросе у каждого текстового поля явно пишете COLLATE?
Ведь нет же?
А при сравнениях с полями временных таблиц вы неизбежно столкнётесь с COLLATE базы tempdb,
опять же, если не будете везде писать COLLATE явно.
30 май 19, 13:53    [21897694]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Сервер создается с нуля, на который будут мигрировать текущие базы.

iap
Michail A.
Владислав Колосов, конкретно один язык?

Если предполагаются данные латиницы и кириллицы - можно ли подобрать подходящий collation?
База создаётся с нуля? На сервере уже есть другие базы?
Если с нуля, то решите - при сравнении строк регистр букв должен учитываться или нет?
А если какие-то базы на сервере уже есть, то выбор у вас небольшой - COLLATE вашей базы должен совпадать с COLLATE базы tempdb.
Иначе никакой жизни у вас не будет.
30 май 19, 14:01    [21897699]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Владислав Колосов
Member

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

за что люблю эту конференцию, так это за количество снобов на квадратный метр.
30 май 19, 14:17    [21897712]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Michail A.
Сервер создается с нуля, на который будут мигрировать текущие базы.

iap
пропущено...
База создаётся с нуля? На сервере уже есть другие базы?
Если с нуля, то решите - при сравнении строк регистр букв должен учитываться или нет?
А если какие-то базы на сервере уже есть, то выбор у вас небольшой - COLLATE вашей базы должен совпадать с COLLATE базы tempdb.
Иначе никакой жизни у вас не будет.
То есть, базы с данными уже есть?
Тогда у них уже установлен вполне определённый COLLATE. Вот таким он и должен остаться на новом сервере.
30 май 19, 16:28    [21897837]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
Michail A.
Сервер создается с нуля, на который будут мигрировать текущие базы.
Ставьте тот же коллейшен, который был выбран на том сервере, с которого делается миграция.
Если это установить невозможно, тогда, скорее всего, нужно выбрать тот коллейшен, который у переносимых баз.
30 май 19, 16:56    [21897871]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

Откуда:
Сообщений: 96
alexeyvg, iap

А если несколько экземпляров, каждый со своим collation, в итоге данные будут переезжать на один сервер. Как в данном случае поступить? Если на целевом сервере установить collation, который будет совпадать с одним из имеющихся экземпляров, а со вторым совпадать не будет соответственно - возникнут ли проблемы?
30 май 19, 19:48    [21897969]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
Michail A.
alexeyvg, iap

А если несколько экземпляров, каждый со своим collation, в итоге данные будут переезжать на один сервер. Как в данном случае поступить? Если на целевом сервере установить collation, который будет совпадать с одним из имеющихся экземпляров, а со вторым совпадать не будет соответственно - возникнут ли проблемы?
Тогда нужно, что бы в приложении не было багов с коллейшенами.
Правильно написанное приложение не зависит от коллейшена сервера.
Но если приложение всё таки не работает на сервере с неподходящим ему колелйшеном, то тогда придётся его эксплуатировать на выделенном инстансе, либо править в нём ошибки (или, как вариант, менять коллейшен модели и всех данных).
30 май 19, 21:05    [21898014]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Michail A.
alexeyvg, iap

А если несколько экземпляров, каждый со своим collation, в итоге данные будут переезжать на один сервер. Как в данном случае поступить? Если на целевом сервере установить collation, который будет совпадать с одним из имеющихся экземпляров, а со вторым совпадать не будет соответственно - возникнут ли проблемы?
Возникнут. Да ещё какие!
Если COLLATE строк прим сравнении несовместимы, всё обламывается с сообщением о несоответствии COLLATE.
Кстати, явное указание COLLATE у полей в условии запроса делает невозможным использование индекса по этим полям.
Так что тоже нехороший выход.
30 май 19, 21:56    [21898046]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
iap
Michail A.
alexeyvg, iap

А если несколько экземпляров, каждый со своим collation, в итоге данные будут переезжать на один сервер. Как в данном случае поступить? Если на целевом сервере установить collation, который будет совпадать с одним из имеющихся экземпляров, а со вторым совпадать не будет соответственно - возникнут ли проблемы?
Возникнут. Да ещё какие!
Если COLLATE строк прим сравнении несовместимы, всё обламывается с сообщением о несоответствии COLLATE.
Кстати, явное указание COLLATE у полей в условии запроса делает невозможным использование индекса по этим полям.
Так что тоже нехороший выход.
Впрочем, а вдруг они окажутся совместимыми?
Тогда вы в шоколаде!.
30 май 19, 21:59    [21898049]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
Michail A.
Member

Откуда:
Сообщений: 96
Так и как можно выйти из данной ситуации?

iap
Michail A.
alexeyvg, iap

А если несколько экземпляров, каждый со своим collation, в итоге данные будут переезжать на один сервер. Как в данном случае поступить? Если на целевом сервере установить collation, который будет совпадать с одним из имеющихся экземпляров, а со вторым совпадать не будет соответственно - возникнут ли проблемы?
Возникнут. Да ещё какие!
Если COLLATE строк прим сравнении несовместимы, всё обламывается с сообщением о несоответствии COLLATE.
Кстати, явное указание COLLATE у полей в условии запроса делает невозможным использование индекса по этим полям.
Так что тоже нехороший выход.
31 май 19, 08:58    [21898213]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
Michail A.
Так и как можно выйти из данной ситуации?
Несколько экземпляров SQL Server - по одному на каждый collation
Либо все БД с collation, отличным от серверного сделать contained - тогда конфликта с временными таблицами не будет, если они создаются в контексте такой БД.
31 май 19, 09:31    [21898246]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
iap
Если COLLATE строк прим сравнении несовместимы, всё обламывается с сообщением о несоответствии COLLATE.
Кстати, явное указание COLLATE у полей в условии запроса делает невозможным использование индекса по этим полям.
Так что тоже нехороший выход.
Да, это 2 варианта неправильные, но есть же ещё и правильный вариант - при создании временных таблиц указывать коллейшен базы.

Хотя у автора ИМХО немного другой вопрос - как сделать, что бы всё работало, не меняя базы, и не даже не зная, что там внутри.
Michail A.
Так и как можно выйти из данной ситуации?
Без изменения приложений (то есть исправлении ошибок в хранимых процедурах, и, возмможно, в других месстах) - только делать отдельные инстансы для каждого коллейшена.
31 май 19, 16:43    [21898970]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 30726
invm
Либо все БД с collation, отличным от серверного сделать contained - тогда конфликта с временными таблицами не будет, если они создаются в контексте такой БД.
Что то слишком кардинальное решение :-)
31 май 19, 16:46    [21898973]     Ответить | Цитировать Сообщить модератору
 Re: серверный collation  [new]
invm
Member

Откуда: Москва
Сообщений: 9115
alexeyvg
Что то слишком кардинальное решение :-)
Почему?
31 май 19, 16:50    [21898977]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить