2017-02-16 28 views
0

У меня проблема с кодировкой строковых констант в запросах в поле NVARCHAR в SQL Server v12.0.2. Мне нужно использовать национальные символы (все в одной кодовой странице, например, кириллический WIN1251), в запросах без префикса N.SQL Server: кодировка строковых констант в SQL

Возможно ли это?

Пример:

1. CREATE TABLE TEST (VALUE NVARCHAR(100) COLLATE Cyrillic_General_CI_AS); 
2. INSERT INTO TEST VALUES (N'привет мир'); 
3. INSERT INTO TEST VALUES ('привет мир'); 
4. SELECT * FROM TEST; 

Это вернет две строки:

| привет мир | 
| ?????? ??? | 

Так первая вставка работает правильно, я ожидаю, что второй сделать то же самое, потому что test.value столбца сверенного в Cyrillic_General_CI_AS. Но похоже, что национальные символы игнорируют сопоставление полей и используют кодовую страницу из другого места.

Я понимаю, что в этом случае я не смогу использовать символы из более чем одной кодовой страницы и языков, которые не соответствуют 1-байтовой кодировке, но это нормально для меня. Другой вариант - изменить все запросы на использование префикса N перед строковыми константами, но это невозможно.

ответ

2

Без префикса N строка преобразуется в кодовой страницы по умолчанию базы данных, а не таблица вы вставляя в (см MSDN подробности)

Так как вы должны изменить параметры сортировки базы данных Cyrillic_General_CI_AS, или найдите все строковые константы и вставьте префикс N.

+0

Я также пытался установить кодировку базы данных Cyrillic_General_CI_AS (например, в некоторых статьях, например, [здесь] (https://support.microsoft.com/en-us/help/239530/you-must-precede-all -unicode-strings-with-a-prefix-n-when-you-deal-with-unicode-string-constants-in-sql-server) указывает, что национальные символы используют кодовую страницу DB по умолчанию при перекодировке, но это не help – vbe

+0

@vbe Это выглядит странно. Все мои базы данных имеют точно Cyrillic_General_CI_AS сортировку и выбор некоторой строковой константы с кириллическими символами в ней и без префикса N работает нормально. Ну, ваш последний вариант - изменить настройку по умолчанию сервера, я полагаю, . –

+0

Пример скрипта (он не работает!): 'CREATE DATABASE TEST COLLATE Cyrillic_General_CI_AS; CREATE TABLE.TT.dbo.TEST ( VALUE NVARCHAR (10) COLLATE Cyrillic_General_CI_AS ); INSERT INTO TEST.dbo.TEST VALUES ('привет мир'); SELECT * FROM TEST.dbo.TEST; ' – vbe