Как я могу восстановить данные Unicode, которые отображаются в SQL Server как? - PullRequest
0 голосов
/ 11 февраля 2010

У меня есть база данных в SQL Server, содержащая столбец, который должен содержать данные Unicode (он содержит адреса пользователей со всего мира, например, القاهرة для Cairo)

Этот столбец является столбцом nvarchar с сопоставлением по умолчанию для базы данных (Latin1_General_CI_AS), но я заметил, что данные вставляются в него с помощью операторов SQL, содержащих не английские символы, и отображаются как ?????.

Решение, похоже, заключается в том, что я не использовал префикс n, например,

INSERT INTO table (address) VALUES ('القاهرة')

Вместо:

INSERT INTO table (address) VALUES (n'القاهرة')

У меня сложилось впечатление, что Юникод будет автоматически преобразован для столбцов nvarchar, и мне не нужен этот префикс, но это, похоже, неправильно.

Проблема в том, что у меня все еще есть данные в этом столбце, которые отображаются как ????? в SQL Server Management Studio, и я не знаю, что это такое!

Данные все еще там, но в неправильной кодировке символов, которые не позволяют отображать их, но они все еще могут быть восстановлены (и если да, то как я могу их восстановить?), Или они исчезли навсегда?

Спасибо

Tom

Ответы [ 3 ]

1 голос
/ 11 февраля 2010

Чтобы узнать, что SQL Server действительно хранит, используйте

SELECT CONVERT(VARBINARY(MAX), 'some text')

Я только что попробовал это с умноженными символами и арабским языком (скопировано из Википедии, я понятия не имею) как в виде простых строк, так и в виде N '' строк Unicode.

В результате арабские строки, не относящиеся к Юникоду, действительно заканчиваются как вопросительные знаки (0x3F) при преобразовании в VARCHAR.

1 голос
/ 11 февраля 2010

SSMS иногда не отображает все символы, я просто попробовал то, что у вас было, и это сработало для меня, скопируйте и вставьте его в Word, и оно может отображать его в основном

Обычно, если SSMS не может отобразить это, это должны быть поля не?

0 голосов
/ 11 февраля 2010

Попробуйте написать небольшой клиент, который будет извлекать эти данные в файл или веб-страницу. Проверьте ВСЕ свой код, если нет других вставок или обновлений, которые могли бы преобразовать данные в varchar перед сохранением их в таблицах.

...