Я не могу воспроизвести потерю данных или проблему с кодировкой.Я могу воспроизвести квадраты, которые при копировании становятся ?
.Это, вероятно, вызвано шрифтом , используемым для отображения результатов в сетке 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 МБ. У них не будет проблем с отображением китайских иероглифов.