2016-04-08 6 views
1

SQLクエリからのデータを使用してJSON Webサービスにデータを提供しようとしています。私が持っている問題は、SQL ServerデータベースにUTF16として格納されているデータで、UTF8としてWebサービスに提供する必要があるということです。UTF16ではなくUTF8へのSQL Server出力クエリ

SQLクエリが実行されるときに、自分のSQLクエリを使用してデータを変換したいと考えています。私は様々なフォーラムを読んでいて、特に簡単な変換方法はないという印象を受けました。

たとえば、ÖSTLUNDなどの名前があります。有効なUnicode/Windowsコードページ1253は、わかっている限りです。

UFT8がWindowsコードページ1252のようになっていると思いますか?

キャストとコレートのさまざまなバージョンを試してみましたが、どちらの方法で最善の答えが得られるか分かりません。

(cast(SURNAME as varchar(100)) COLLATE SQL_Latin1_General_Pref_CP1_CI_AS) 

または

(cast(SURNANE as varchar(100)) COLLATE Latin1_General_100_CI_AS_KS_WS_SC) 

誰もがこれを行うための最善の方法を任意の提案を持っていますか?これを行うにはキャストとコレートがありますか?

UPDATE:

アプリケーションがのUnifaceで書かれている古いものです。アプリケーション・サーバーは、データベース・フィールドの変更に応答してSQLスクリプトを実行しています。次に、WebサービスポストのペイロードにSQL出力を取り込みます。 SQLの出力は、WebサービスのJSONに準拠しています。

+1

「sql-server」はUTF8をサポートしていない可能性があります。たぶんCLRで... – HoneyBadger

+0

私は可能な限り、あなたのWebサービス層に必要なカバーをしたいと思います。 UTF-8はコードページではありません1252 –

+0

ありがとうございました。アランは、DBにリンクされているWebサービスがかなりばかげているので、何らかの処理を行うのではなくメッセージを外部に投稿しています。 – jonah

答えて

1

最初に、Unicodeはすべての文字を表現する能力であり、コードページは必要ありません。 UTF-8、UTF-16、およびUTF-32はすべてUnicodeであり、すべてUnicode(すべて現在はマップされています)の文字を表します。

この特定の問題に関して、SQL ServerはWindowsと.NETのように、実際にはUnicodeデータに関してUTF-16(リトルエンディアン)でのみ動作します。 UTF-8で文字列を使用する場合は、結果セットのSQL Serverからデータを取得した後にUTF-8としてエンコードします。これはJSON形式にパッケージ化しているためです。だから、 "Uniface"で行う必要があるように聞こえます。

また、Question内の2つのCASTステートメントについては、両方とも、VARCHARのコードページ1252にマップされているLatin1ロケール/ LCIDを使用しているため、同じことを効果的に実行します。