У меня проблема с кодировкой строковых констант в запросах в поле 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 перед строковыми константами, но это невозможно.
Я также пытался установить кодировку базы данных 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
@vbe Это выглядит странно. Все мои базы данных имеют точно Cyrillic_General_CI_AS сортировку и выбор некоторой строковой константы с кириллическими символами в ней и без префикса N работает нормально. Ну, ваш последний вариант - изменить настройку по умолчанию сервера, я полагаю, . –
Пример скрипта (он не работает!): '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