0

SQL Serverに、Unicodeデータを含める必要のある列を含むデータベースがあります(これには、世界中のユーザーのアドレスが含まれています。たとえば、カイロの場合はالقاهرة)。

この列は、データベースのデフォルト(Latin1_General_CI_AS)を照合したnvarchar列ですが、英語以外の文字を含むSQLステートメントを介してデータが挿入され、?????として表示されることに気付きました。

解決策は、nプレフィックスを使用していなかったということのようです。

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

それ以外の:

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

Unicodeはnvarchar列に自動的に変換され、このプレフィックスは必要ないという印象を受けましたが、これは正しくないようです。

問題は、この列に?????と表示されるデータがまだあることです。SQL Server Management Studioで、それが何であるかわかりません。

データはまだそこにありますが、正しくない文字エンコードで表示されないのに回収可能です(もしそうなら、どうすればデータを回復できますか?)、またはそれは永久に失われていますか?

ありがとう、

トム

4

3 に答える 3

1

SSMSですべての文字が表示されない場合があります。お持ちの文字を試してみたところ、うまくいきました。コピーしてWordに貼り付けると、正しく表示される場合があります。

通常、SSMSが表示できない場合は、ボックスではないはずですか?

于 2010-02-11T17:32:00.090 に答える
1

SQL Serverが実際に何を格納しているかを確認するには、次を使用します。

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

ウムラウト文字とアラビア語(ウィキペディアからコピーしたものですが、わかりません)を使用して、プレーン文字列とN''Unicode文字列の両方でこれを試しました。

その結果、アラビア語の非Unicode文字列は、VARCHARへの変換で実際には疑問符(0x3F)になります。

于 2010-02-11T19:48:41.030 に答える
0

これらのデータをファイルまたはWebページに取得する小さなクライアントを作成してみてください。テーブルに保存する前に、データをvarcharに変換する可能性のある他の挿入または更新がない場合は、すべてのコードを確認してください。

于 2010-02-11T19:34:46.550 に答える