SQL Server, данные varchar в данные nvarchar

У меня есть база данных с сопоставлением Danish_Norwegian_CS_AS и множеством столбцов varchar. Я хотел бы преобразовать все эти данные в юникод, но пока не нашел способа преобразовать эти данные. Если я правильно понял, используется кодировка UCS-2 с прямым порядком байтов.

Например, у меня есть столбец, содержащий "PÃ¥l-Trygve", который легко преобразуется с помощью С# в "Pål-Trygve" с помощью Encoding.Default.GetString(Encoding.UTF8.GetBytes("PÃ¥l-Trygve")) ;

Есть ли способ сделать это преобразование в клиенте Microsoft SQL Server?


person Øyvind    schedule 10.05.2010    source источник
comment
Если я правильно понял, используется кодировка UCS-2 с прямым порядком байтов. UCS-2 - это формат Unicode, в который вы хотите преобразовать?   -  person Sam    schedule 10.05.2010
comment
Извините, эта часть была плохо написана, я пытаюсь преобразовать ее в utf-8 (которая также является юникодом: P)   -  person Øyvind    schedule 11.05.2010


Ответы (3)


Не могли бы вы просто использовать оператор CONVERT - или я упускаю здесь нюанс?

Из http://msdn.microsoft.com/en-us/library/ms187928.aspx

person Sam    schedule 10.05.2010
comment
Нет, я думаю, причина, по которой я не могу, заключается в том, что данные в столбце varchar представляют собой двоичный код для строки с прямым порядком байтов ucs2, а не ascii. - person Øyvind; 11.05.2010

На сервере sql, если вы поместите символ N перед своим любимым оператором, он преобразуется в Unicode. Например:

update mytable
set mycol = N'PÃ¥l-Trygve'

or

insert into mytable
values (N'PÃ¥l-Trygve',...)
person masoud ramezani    schedule 11.05.2010
comment
Если вы попробуете это сделать сами, то увидите, что результат будет таким же, как и у вас. - person Øyvind; 11.05.2010

В своем комментарии к ответу Сэма вы сказали, что «данные в столбце varchar представляют собой двоичный код для строки с прямым порядком байтов ucs2, а не ascii». Что отличается от того, что сказано в вопросе, где у вас есть текст.

Итак, я бы создал целый набор параллельных таблиц (со столбцами nvarchar) и загрузил их с помощью некоторого кода С#. Затем отбросьте, переименуйте и т. д. Это не то, что легко сделать в t-sql.

person gbn    schedule 16.05.2010