Как правильно изменить Collation базы данных и SQL-сервера для работы с 1С?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При работе с 1С:Предприятие на базе MS SQL Server одной из самых коварных проблем является несоответствие параметров сортировки (Collation). Часто возникает ситуация, когда сам сервер установлен с латинской кодировкой (например, SQL_Latin1_General_CP1_CI_AS), а база данных 1С требует кириллическую (Cyrillic_General_CI_AS). В этой статье мы подробно разберем, почему простая команда ALTER DATABASE не решает проблему, как параметры сервера влияют на временные таблицы и какими способами можно привести систему в порядок.

Почему возникает конфликт параметров сортировки?

Прежде всего, проанализируем иерархию Collation в MS SQL Server. Параметры сортировки определяют, как сервер будет сравнивать строки и выполнять поиск. В SQL Server существует многоуровневая система наследования:

  1. Уровень сервера: Задается при установке и определяет правила для системных баз данных, включая master и tempdb.
  2. Уровень базы данных: Определяет правила по умолчанию для новых таблиц.
  3. Уровень столбца: Самый важный уровень. Именно здесь физически хранятся данные в определенной кодировке.

Рассмотрим ситуацию автора: при загрузке файла .dt платформа 1С пересоздает структуру таблиц. Если 1С видит несоответствие, она может принудительно установить параметры, которые считает верными для текущего региона, что приводит к ошибкам при запуске. Главная проблема заключается в базе tempdb. 1С активно использует временные таблицы. Если Collation вашей базы — кириллица, а Collation сервера (и, соответственно, tempdb) — латиница, то любой запрос, соединяющий реальную таблицу и временную таблицу, упадет с ошибкой: "Cannot resolve the collation conflict".

Способ №1: Перестроение системных баз данных (Rebuild Database)

Если мы выяснили, что Collation сервера (и tempdb) не совпадает с базой 1С, самым правильным (хотя и радикальным) методом будет изменение Collation всего экземпляра SQL Server. Это можно сделать без полной переустановки программы, используя штатный установщик.

Рассмотрим алгоритм действий по шагам:

  1. Сделайте бэкапы: Эта операция полностью пересоздает системные базы master, model и msdb. Вы потеряете все созданные логины, пароли, права доступа и задания (Jobs) SQL Agent. Скриптуйте их заранее.
  2. Откройте командную строку от имени администратора и перейдите в папку с дистрибутивом SQL Server (где лежит setup.exe).
  3. Выполните команду перестроения (замените параметры в скобках на ваши):

Setup.exe /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=MSSQLSERVER 
/SQLSYSADMINACCOUNTS=Администратор /SAPWD=ВашПароль 
/SQLCOLLATION=Cyrillic_General_CI_AS

После выполнения этой команды сервер станет "чистым" с нужным Collation. Вам останется только заново прикрепить (Attach) пользовательские базы и восстановить права доступа.

Способ №2: Использование ключей запуска sqlservr.exe

Существует более "ручной" метод смены параметров через запуск исполняемого файла сервера с определенными флагами. Проанализируем этот процесс:

  1. Остановите службу SQL Server и службу SQL Server Agent.
  2. Запустите командную строку и перейдите в каталог Binn вашего экземпляра SQL (обычно это C:\Program Files\Microsoft SQL Server\MSSQL... \MSSQL\Binn).
  3. Выполните команду для смены Collation в однопользовательском режиме:

sqlservr -m -T4022 -T3659 -s"MSSQLSERVER" -q"Cyrillic_General_CI_AS"

Важный момент: Параметр -q перекодирует все системные базы и объекты. После завершения работы команды (она может занять время) завершите процесс и запустите службу в обычном режиме. Это позволит tempdb создаваться с нужной кодировкой при каждом старте.

Способ №3: Правильное создание базы через консоль 1С

Выясним, почему ручное создание базы в SQL Management Studio (SSMS) и последующая загрузка .dt часто приводят к фиаско. Когда вы создаете базу через SSMS, вы можете выбрать Collation, но 1С при загрузке .dt иногда игнорирует эти настройки, если они конфликтуют с региональными настройками сервера 1С.

Разберем правильный алгоритм создания новой базы:

  1. Убедитесь, что на SQL-сервере уже установлен правильный Collation (как описано в способах выше).
  2. Не создавайте базу в SQL заранее. Откройте Консоль администрирования серверов 1С:Предприятие.
  3. Создайте новую информационную базу именно через консоль 1С. В поле "Параметры сортировки" (если оно доступно) или просто выбрав язык "Русский", платформа сама подаст SQL-серверу команду на создание базы с корректным Cyrillic_General_CI_AS или Cyrillic_General_100_BIN.
  4. Только после этого выполните загрузку файла .dt через конфигуратор.

Почему ALTER DATABASE не помогает?

Проанализируем типичную ошибку администраторов. Выполнение команды:


ALTER DATABASE [Имя_Базы] COLLATE Cyrillic_General_CI_AS;

Эта команда меняет только значение по умолчанию для базы. Если в базе уже созданы таблицы (а после загрузки .dt их там тысячи), то Collation колонок в этих таблицах не изменится. Данные останутся в старой кодировке. Чтобы изменить кодировку всех данных, пришлось бы выполнить ALTER COLUMN для каждого строкового поля, что для структуры 1С практически невозможно выполнить вручную без риска разрушить логику базы.

Посмотрим на пример: У вас есть таблица _InfoRg123 с колонкой _Fld456. Даже после смены настроек базы, эта колонка сохранит старый Collation. Единственный надежный способ "перекрасить" данные — это выгрузка в .dt и загрузка в пустую базу с правильными настройками.

Рекомендации по выбору Binary Collation (_BIN)

В современных инсталляциях 1С (начиная с платформы 8.3.x) все чаще рекомендуется использовать бинарную сортировку, например, Cyrillic_General_100_BIN. Разберем преимущества этого подхода:

Однако помните: Collation сервера и базы все равно должны быть согласованы, чтобы избежать конфликтов с tempdb.

Резюме по решению проблемы

Подводя итог нашему анализу, выделим краткую инструкцию:

  1. Проверьте Collation сервера через запрос: SELECT SERVERPROPERTY('Collation').
  2. Если он Latin1 — измените его через REBUILDDATABASE (Способ №1).
  3. Создайте пустую базу через консоль 1С (это гарантирует правильные настройки).
  4. Загрузите данные из .dt.

Такой системный подход гарантирует отсутствие ошибок "collation conflict" и стабильную работу информационной базы в будущем.

← На главную