База данных SQL Server с кодовой страницей Latin1 показывает японские символы как "?" - PullRequest
1 голос
/ 03 декабря 2010

Три вопроса со следующим сценарием:

  • Производственная база данных SQL Server 2005 с кодовой страницей Latin1 и отображением "?" для недопустимых символов в Management Studio.
  • SomeCompanyApp клиент как сервис, который заполняет данные с серверов и рабочих станций.
  • SomeCompanyApp консоль управления, которая показывает "?" для азиатских символов.

Поскольку это prod db, я не буду писать в него.

Я не знаю, действительно ли клиентское приложение, которое хранит данные в базе данных, правильно хранит их как Unicode, и оно просто не отображается, потому что они используют Latin1 для консоли.

Q1: Насколько я понимаю, SQL Server сохраняет текст nvarchar как Unicode независимо от кодовой страницы, или я совершенно не прав, и если кодовая страница является Latin1, тогда все, что не в этой кодовой странице, преобразуется в " ?».

Q2: То же самое с текстовым столбцом?

Q3: Есть ли способ с помощью SQL Server Management Studio или Visual Studio и некоторого кода (неважно, на каком языке :)) запросить БД и показать, действительно ли символы отображаются как японский, китайский, корейский и т. д.

Моя последняя цель - извлечь данные из БД и сохранить их в другом БД, используя UTF-8, чтобы показать японские и другие азиатские символы в том виде, как они есть в моем собственном клиентском веб-приложении. Я соглашаюсь с ответом на вопрос 3. Я могу писать на нескольких языках и, по крайней мере, понимать некоторые другие, но я просто недостаточно разбираюсь в Unicode. Если вы хотите знать, что мое веб-приложение будет использовать pyodbc и cassandra, но для этих вопросов это не имеет значения.

1 Ответ

2 голосов
/ 03 декабря 2010

При вставке в столбец NVARCHAR в SSMS вы должны быть абсолютно уверены, что префикс вашей строки - N:

Это будет НЕ Работа:

 INSERT INTO dbo.MyTable(NVarcharColumn) VALUES('Some Text with Special Char')

SQL Server будет интерпретировать вашу строку в VALUES(..) как VARCHAR и, таким образом, исключит любые специальные символы.

Вам нужно это :

 INSERT INTO dbo.MyTable(NVarcharColumn) VALUES(N'Some Text with Special Char')

Префикс вашего текстового литерала с N'..' говорит SQL Server о необходимости обращаться с ним как с NVARCHAR.

Помогает ли это вам решить ваш Q3 ??

...