Хранение региональных (словенских) символов в базе данных - PullRequest
1 голос
/ 05 августа 2010

Это может быть до боли очевидным для некоторых (большинства?) Из вас, однако это уже давало мне покоя.

У меня есть две базы данных, работающие на одном сервере SQL (2005). Насколько я вижу, они оба имеют одинаковые языковые / региональные свойства. Для обоих параметров сортировки установлено значение «Sloveninan_CL_AS», и все же один сохраняет все словенские специальные символы (č, ž, š) без проблем, а другой скрывает их в соответствии с региональными «совпадениями» (c, z, s).

Все строки с региональными символами в обеих базах данных хранятся в полях одного типа (varchar).

Мне интересно, какие еще настройки могут повлиять на это поведение? Какие дополнительные шаги я могу предпринять, чтобы обеспечить правильное сохранение специальных символов во второй базе данных?

РЕДАКТИРОВАТЬ : Единственная дополнительная информация, которая может оказаться актуальной, о которой я могу подумать, - это то, что вторая («неисправная») база данных была изначально создана с другим параметром сортировки и была изменена позднее, тогда как первый (вероятно) был создан с настройкой, установленной на текущее значение. Тем не менее, я думаю, что поскольку настройки могут быть изменены, это не должно быть проблемой. Кроме того, сервер был перезапущен после изменения параметров сортировки.

Ответы [ 2 ]

2 голосов
/ 05 августа 2010

Я предпочитаю использовать тип данных NVARCHAR (). NVARCHAR использует Unicode, что намного удобнее в локализации.

В любом случае, это определенно существенная проблема, что база данных изначально была создана с другим сопоставлением. Когда вы устанавливаете параметры сортировки в базе данных, вы фактически устанавливаете параметры сортировки по умолчанию для вновь создаваемых объектов. Посмотрите сами таблицы. Я готов поспорить, что они по-прежнему настроены на старое сопоставление. Возможно, вам придется пересоздать или изменить таблицы и индексы, чтобы новое сопоставление вступило в силу.

http://msdn.microsoft.com/en-us/library/ms175835.aspx

1 голос
/ 05 августа 2010

Вы определенно изменили параметры сортировки в самой базе данных? Не только колонка? Когда я пробую следующий скрипт в тестовой базе данных и переключаю сортировку database взад и вперед между словенским и латинским, я получаю разные результаты для символа č (префиксная версия N всегда работает)

SET NOCOUNT ON

DECLARE @testtable TABLE
(
A VARCHAR(5) COLLATE Slovenian_CI_AS,
B  VARCHAR(5) COLLATE Slovenian_CI_AI
)

INSERT INTO @testtable
VALUES ('čžš','čžš')

INSERT INTO @testtable
VALUES (N'čžš',N'čžš')

SELECT *,CAST(A AS VARBINARY(6)) ,CAST(B AS VARBINARY(6))  
FROM @testtable

Slovenian_CI_AS

A     B                    
----- ----- -------------- --------------
čžš   čžš   0xE89E9A       0xE89E9A
čžš   čžš   0xE89E9A       0xE89E9A

Latin1_General_CI_AS

A     B                    
----- ----- -------------- --------------
cžš   cžš   0x639E9A       0x639E9A
čžš   čžš   0xE89E9A       0xE89E9A
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...