日本語に中国語を混ぜた文字列のデータ登録が出来ない?

解決


GTR  2016-01-25 23:58:21  No: 47928

いつも参考にさせていただいております。
環境は以下の通りです。
OS:Windows7
データベース:Oracle11g
言語:DelphiXE2
(データ確認用でObjectBrowser12を使用しました。)

長い内容ですがご了承下さい。

タイトルの通り、日本語に中国語を混ぜた文字列をデータベースに
登録したいのですが、うまく登録することが出来無いのです。

まず、データベースに日本語と中国語を混ぜた文字列が登録出来るか
ですが、ObjectBrowser12と言うソフトを使いデータベース項目に
正しく登録され、表示出来る事を確認しております。
(データベース項目はNVARCHAR2で定義しています。)

私自身が以下の2通りの方法を主として、
データベース接続をしていますのでそれぞれについてテストしてみました。

1.コンポーネントにDBXPRESSを使用した場合です。
  TSQLConnectionを使用しOracle11gに接続します。
  1)データ抽出
    TSimpleDatasetでCommandTextに抽出SQL分を入力しデータを抽出しました。
    DataSourceのDataSetにTSimpleDatasetを設定し、DbGridに表示しました。
    表示結果は中国語部分が?となります。
  2)データ登録
    TEditに日本語と中国語を入力し、TSqlQueryのSQLに追加SQL文を入力し
    項目パラメータに日本語と中国語を混ぜた文字列がセットされたのを確認。
    TSQLQuery.ExcSQLを実行。
    データ登録結果は中国語部分が?となります。

2.コンポーネントにDbGOを使用した場合です。
  TADOConnectionを使用しOracle11gに接続します。
  1)データ抽出
    TADOQueryを使用し、SQLに抽出SQL分を入力しデータを抽出しました。
    DataSourceのDataSetにTADOQueryを設定し、DbGridに表示しました。
    表示結果は中国語部分も正しく表示出来ました。
  2)データ登録
    TEditに日本語と中国語を入力し、TADOQueryのSQLに追加SQL文を入力し
    項目パラメータに日本語と中国語を混ぜた文字列がセットされたのを確認。
    TADOLQuery.ExcSQLを実行。
    データ登録結果は中国語部分が?となります。

結果、DBEXPRESSでは、登録、表示ともに不可。
      DbGOを使用すると表示は出来ましたが、登録は不可となりました。

うまく動作させるには、接続パラメータに何か必要なのでしょうか?
Delphi側で解決方法がありましたら教えていただけませんでしょうか。


igy  2016-01-26 02:38:54  No: 47929

> DbGOを使用すると表示は出来ましたが、登録は不可となりました。

登録のとき、

ADOQuery1.Parameters.ParamByName('HOGE').DataType := ftWideString;
ADOQuery1.Parameters.ParamByName('HOGE').Value    := '文字列';

みたいに指定してもダメですか?


GTR  2016-01-26 02:53:06  No: 47930

igyさん、お世話になります。

早速、ご教授頂いた文を実行しましたが、結果はダメでした。
やはり、中国語部分が?となります。

他に、ftVariantがありましたので試しましたが、結果はダメでした。


igy  2016-01-26 05:27:47  No: 47931

Oracleに関しては、詳しくないのですが、

文字化けに関するトラブルに強くなる【基礎編】 (1/3)
http://www.atmarkit.co.jp/ait/articles/0901/21/news124.html
を見てみたのですが、

データベースのキャラクタセットは、AL32UTF8ですか?
あと、NLS_LANGのキャラクタセットは、どのようになってますか?


GTR  2016-01-26 19:40:19  No: 47932

igyさん、お世話になります。

データベースのキャラクタセットは、JA16SJISTILDEです。
クライアントにはNLS_LANG環境変数は設定しておりません。

他のツールでは、登録できていたので、関係無いかと思っていましたが
データベースキャラクタセットを変更して、試してみます。


GTR  2016-01-26 22:30:48  No: 47933

igyさん、有難うございました。

データベースのキャラクタセットAL32UTF8で試したところ
うまく登録することが出来ました。

Delphiでは、データベースのキャラクタセットによるとなるのですかね?
ObjectBrowserやA5M2等のソフトはどうやっているんでしょうね。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加