Осложнения в базе данных SQL Server с различной сортировкой, чем у сервера по умолчанию?

Мы выполняем миграцию баз данных со старого сервера SQL Server 2k EE с настройкой по умолчанию "Latin1_General_CI_AS" на новые серверы SQL Server 2005 и 2008 с настройкой по умолчанию "SQL_Latin1_General_CP1_CI_AS". Нет международных символов, которые потребуют Unicode, о которых я знаю, поэтому две кодовые страницы практически одинаковы для практических целей.

Основной администратор базы данных SQL Server непреклонен в том, что каждая отдельная база данных (большая часть которой создаются сторонними приложениями) должна быть перестроена с новой сортировкой, прежде чем он перенесет их.

Я знаю, что со времен SQL Server 2000 было возможно установить разные базы данных, отличные от стандартных. Но каковы реальные последствия работы со смешанными сортировками? В одной статье от Microsoft предлагаются сложности с общим tempdb, для пример (но его можно легко избежать?).

И, возможно, что более важно, , что мы можем сделать, чтобы избежать этих проблем, если нам нужно поддерживать несколько сопоставлений на новых серверах?

Ответ 1

Ладно, не лучший ответ, но

Вы спросили: "Каковы реальные последствия работы с разными сортировками" Это может быть головная боль. Статья, о которой вы упомянули Microsoft, гладит ее по голове. В моем личном опыте я столкнулся с этой проблемой, и ее было непросто избежать. Неправильные сопоставления будут всплывать в незапланированных местах, если вы не проверите хорошо.

Вы также спросили: "Что мы можем сделать, чтобы избежать этих проблем, если нам нужно поддерживать несколько сопоставлений на новых серверах?" Ничто не приходит на ум, кроме как проверить, как сумасшедший.

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

Ответ 2

Проблема с разными сопоставлениями между сервером и db такова, что упоминается до того, как временные таблицы будут созданы по умолчанию при настройке сервера. Это приведет к сбою любых сравнений в полях символов между временной таблицей и обычной таблицей. Этого можно избежать разработчиками сторонних приложений, используя COLLATE database_default для полей символов временных таблиц.

create table #Tmp(Col1 nvarchar(50) COLLATE database_default)

Я родом из "другой" стороны. Я не администратор базы данных, а сторонний разработчик программного обеспечения, и я считаю, что моя задача - создать мое приложение для работы в среде, где сопоставление отличается между базой данных и сервером. Также моя ответственность заключается в том, что мое приложение будет работать с сортировкой по регистру.

Ответ 3

Мой ответ тоже не очень хороший, но:

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

Хотя эта проблема никогда не возникала, я думаю, что есть риск где-то, и я думаю, что этот риск может быть связан с такими вещами, как ссылочная целостность и\или другие ограничения, установленные в полях символов.

Ah: и есть также эта заглавная\нижняя строка в инструкциях T-SQl... проверьте этот здесь

@Майкл и ваш администратор базы данных прав... ограничивают риски и используют уникальную сортировку.