Невозможно сохранить определенные точки Unicode в полях nvarchar - PullRequest
0 голосов
/ 20 февраля 2019

Я делаю некоторые тесты с SQL Server 2017. Я пытаюсь сохранить произвольные точки Unicode в столбце nvarchar.Я пробовал разные сопоставления.У меня нет проблем с обычными символами в плоскости PBS юникода.

Для более экзотических символов, например, если я пытаюсь сохранить символ ? (U + 1D33), происходит следующее:

Если я делаю это в Management Studio, я вижу только печально известный квадратный символ.Но у студии управления есть подходящий шрифт, так как я могу вставить его в редактор запросов.

Если я отправляю текст из Visual Studio, значение, которое я вижу в студии управления, - «??», вот из чего я получаюVisual Studio также после выполнения запроса.

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

Но я попробовал с Latin1_General_100_CS_AS_KS_WS_SC как на уровне БД, так и на уровне столбца, и, похоже, он тоже не работает.

Есть идеи?Спасибо

1 Ответ

0 голосов
/ 20 февраля 2019

Я не могу воспроизвести потерю данных или проблему с кодировкой.Я могу воспроизвести квадраты, которые при копировании становятся ?.Это, вероятно, вызвано шрифтом , используемым для отображения результатов в сетке SSMS или окнах отладчика Visual Studio.

SQL Server и Windows уже некоторое время используют UTF16, а не UCS-2.Немногие шрифты поддерживают полный диапазон UTF16.

Когда я попробовал это в SSMS:

create table #tc(name nvarchar(20));
insert into #tc values (N'?');

select name,len(name),DATALENGTH(name) from #tc;

Я увидел квадрат, 2 и 4 в сетке.Это означает, что символ был сохранен правильно и занял 4 байта.Когда я попытался скопировать эти результаты в SO, я увидел:

name    (No column name)    (No column name)
?      2                    4

Когда я использовал Result to Text, я получил действительный символ:

name                             
-------------------- ----------- -----------
?                   2           4

Правильный символ есть, ноШрифт сетки SSMS не может отображать его

Обновление

Как отметил Дэн Гузман, шрифт можно изменить из Сервис -> Параметры -> Среда ->Шрифты и цвета -> Показать настройки для: -> Результаты сетки.Шрифт по умолчанию Microsoft Sans Serif , маленький шрифт (855 КБ), используемый в Windows в качестве шрифта по умолчанию.Он содержит только 3000 символов.Китайские символы не включены, поэтому отображаются квадраты.

Китайские компьютеры по умолчанию используют SimShun, размер файла которого составляет 17,1 МБ. У них не будет проблем с отображением китайских иероглифов.

...