- PR -

UTF-16の文字列格納で文字化け(SQLServer2005)

1
投稿者投稿内容
seek_do
会議室デビュー日: 2007/11/07
投稿数: 2
投稿日時: 2007-11-07 16:56
こんにちは。seek_doと申します。

現在、WindowsXP + SQLServer2005の環境で、データベース構築しています。
VB2005で作成したプログラムにて、UTF-16BE-BOM付きのテキストファイルを読み取り、DBにInsertしていますが、Insertした文字列の内、私用領域にあたる文字が全て「?」(半角のクエスチョン)になってしまいます。バイナリエディタで確認しましたが、一律同じコードでした。(私用領域以外の文字は問題ありません)
※テーブルからSELECT文でデータを持って来て、StreamWriterで出力したファイルにて確認しました。この際もエンコード指定しています。

Insert先カラムのデータ型は、「nvarchar(max)」です。

ファイルから文字列を取得する際は、StreamReaderを使用しています。(エンコードは、BigEndianUnicodeを指定。)
試しに、取得した文字列をStreamWriterでファイルに書き出してみましたが、問題なく文字コードを保ったまま出力されていました。

Insert文は、単純にINSERT INTOを使用しています。

どうにかして、文字の情報を保ったまま、DBへ格納したいのですが、良い方法はありませんでしょうか?
よろしくお願い致します。
seek_do
会議室デビュー日: 2007/11/07
投稿数: 2
投稿日時: 2007-11-08 15:09
自己解決しました。

INSERTする際、UNICODE文字列と明示的に宣言すればOKとなりました。
方法としては、

INSERT INTO xxx VALUE(N'xxxxx')

INSERTする文字列にNプレフィックスを付けるというものです。

こちらのページに記載されていました。

http://www.microsoft.com/japan/msdn/sqlserver/sql2005/bb330962.aspx
の「SQL ステートメント内の文字列リテラルのエンコード」あたり

以上、報告でした。
1

スキルアップ/キャリアアップ(JOB@IT)