• 締切済み

Oracleのnchar型について

お世話になります。教えてください。 Oracle9iのnchar型について詳しく知りたいのですが。 char型の場合、データベースの作成時の文字コードで文字が格納 されますが、nchar型の場合、unicodeで格納されるという 認識でいます。 例えば、SJISには存在しない文字は、char型の列に登録すると、 文字化けするので、 nchar型の列に登録しようと思うのですが、nchar型の列の値を SQLPlusやosqledit,objectbrowserで表示しても '?' と 表示されます。 正しく nchar型の列の値を表示する にはどうすればいいのでしょうか? 例えば、VB.netなどのプログラムから取得した場合には、正しく 文字化けせずに取得できるという認識でいいのでしょうか?  よろしくお願いします。

みんなの回答

回答No.1

データベースに格納される情報は、データベースキャラクタセットで決まります。(つまりunicodeとは限らない) クライアント側でデータと取り出した場合は、クライアント側のNLSに合わせたコード変換がされて、 クライアントの文字セットで取り出せます。 登録もクライアントの文字セットで登録/更新した文字列は、データベースのキャラクタセットに変換し格納します。 NLSで変換不能な文字については、?に置き換わると思いますが・・ どのようにして登録されたのか判りませんが、データが正しく登録されていて、正しく設定されたクライアントなら SQLPLUSでも、それなりに表示されるはずですよ。(OSが表現できない文字とかは、部分的に?になるけど)

JINJapan
質問者

補足

回答ありがとうございます。 重ねて質問させてもらいますが、nchar型に関しても回答いただいた内容だと考えて間違いないのでしょうか?じゃあ何のために、char型と nchar型が存在するのかを知りたいです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ORACLEでNCHAR/CHARの違い

    ORACLEでNCHAR/CHARの違いについて教えて下さい。 文字列の記述に以下の2つの書きかたがありますが、 1.NCHAR(40) 2.CHAR(40 CHAR) これらにはどのような違いがあり、どう使い分けると良いでしょうか? よろしくお願い致します。 以上

  • oracle10g eucのblobをsjisのcharに変換したい

    oracle10g eucのblobをsjisのcharに変換したい oracle10gでblob型でeuc_jpの文字列を格納しています これをshift_jisのvarchar2に変換したいのですが 無理でしょうか? utl_raw.cast_to_nvarchar2では文字化けしました

  • oracle9iでユーロ記号を使いたい

    oracle9iを使用したWindowsアプリケーションで、ユーロ通貨記号を使いたいです。 DBのNキャラクタセットは、AL16UTF16。NVarchar2(20)列を用意しています。 クライアントは、環境変数NLS_LANG=JAPANESE_JAPAN.JA16SJIS クライアントでOsqleditを使用したときに、 (文字化けしない)データベースにデータ格納の仕方、 (文字化けしない)データベースからデータの取り出し方を教えて下さい。

  • PHP + Mysql で特定のフィールドの値を全て表示したいのですが・・・。

    id、url、titleなどを格納してるテーブルがありまして、 全てを表示させるのはわかったのですが、 idとurlだけなどといった特定のフィールドの値を全て 表示させ方が分かりません。 検索かけて探してはいるものも、探し方が悪いのか 見つからなかったので質問してみました。 それと、phpmyadmin上では日本語の文字化けはしてないのですが ブラウザ上ではどうも文字化けしてしまいます。 utf8で格納しているはずなのですが、mysqlで表示させるときはsjisでないと文字化けします。 ちなみに照合順序はutf8_unicodeです。

  • oracleの文字コードとlinuxサーバの文字コードが異なる場合、サ

    oracleの文字コードとlinuxサーバの文字コードが異なる場合、サーバからシェルまたはsqlplusでDBに接続し、spoolコマンドで指定したファイルに、SQLの実行結果や、PLSQLのDNMS_OUTPUTで出力した内容を保存すると文字化けしてしまいます。 これを回避するにはどうすればよいのか、ご教授下さい。 具体的な環境は、下記の通りです。 oracles:SJIS(NLS-LANGはSJIS系にしています) サーバUTF8 出来ればUTF8でファイルに出力したいのですが、無理なら最低でもSJISで出力させたいです。現在は、ftpでバイナリーダウンロードさせて秀丸などのエディターで見ても、どちらとも認識できない文字コードになっているようです。 なお、お客様側のサーバなので、DBやOSの文字コードを変えることはできません。

  • 文字コード変換

    SJISで取得したダブルバイト(日本語)の文字列を EUCで表示したいのですが どのようにすればSJISの文字列をEUCの文字列に変換することができるのでしょうか?

    • 締切済み
    • PHP
  • 配列への文字列の格納について

    C言語で文字列を扱う時、配列に1文字ずつ格納していくか、ポインタ変数を使うと思うのですが、 ポインタ変数を使った場合の処理が上手くできずに困っています。 詳細を説明すると、値を取得して、前回取得した値と比較します。 それで、同じだった場合には"chritm1"に格納した矢印を書き込む処理なのですが、 現在はfor文により配列に格納したものを使用していますが、 この部分をポインタ変数を使用した処理(1文字1文字書くのではなく、string型変数の用に書き込みたい) に変更したいのですが、上手くできないという状況です。 何かとっかかりとなるようなことでもかまいませんので、教えてください。 よろしくお願いします。 static int mainA( char *fileName){ int loop, i, j; FILE *fd; /* 前回値格納用 */ char *preval; /* 現在値格納用 */ char *thisval; /* 同値用記号格納用 */ char chritm1[6] = " → "; -- 中略 -- for( i = 0 ; i < 150 ; i++ ) { thisval = redata[i]; /* 値の比較 */ if(preval == thisval) { for( j = 0 ; j < 6 ; j++){ /* 前回値と同じ場合は矢印 */ fprintf( fd, ",%c",chritm1[j]); } }else{ /* 前回値と異なる場合は値 */ fprintf( fd, ",%s", thisval); } preval = thisval; /*完了したら改行 */ fprintf( fd, "\n" ); } -- 以下略 --

  • VB2005でJIS拡張漢字の各文字コードを取得する方法

    ある関数に文字列を渡して各文字コードを取得するプログラムを作成しようとしています。 基本的な文字のコードは取得できるのですが、JIS拡張漢字のほとんどが正しく取得できません。 失敗している文字は内部的に「?」(3F)となってしまいます。 例:拡張漢字のコード値(SJIS:81B2)を変換するとコード値が「3F」になってしまう。(テキストエディタなどで文字化けすると「?」に化けるのと同じなのかな?) 正しく文字コードを取得する方法をご存知の方、またヒントなどありましたらよろしくお願いします。 【環境】WindowsXP     VisualBasic2005 【プログラムの流れ】例:SJISコードを取得する場合 文字列を受取る→1文字取得→System.Text.EncodingでSJIS指定のバイト型配列文字に変換(文字コードを取得)

  • 配列について

    こんにちは。 int p[1000]という整数型の配列を作成しました。 例えば、 p[0] = 1; p[1] = 2; p[2] = 3; ・ ・ ・ p[99] = 100; を格納し、配列の長さ?を調べる際、 unsigned int len = 0; while(p[len]!='\0') len++; とすることで調べることが可能でしょうか?p[100]番以降に0が格納されている場合それがナル文字となるのでしょうか? また、char c[1000]と文字列型の配列を作成し、文字列の数値を格納していく場合、一桁であれば要素1個(1Byte?)で格納できますが、二桁以上であれば要素2個以上(2Byte以上←あっていますでしょうか)必要です。 c[0]='1' c[1]='2' c[2]='3' c[3]='4' ・ ・ ・ c[9]='1' c[10]='0' c[11]='1' c[12]='1' ・ ・ ・ ここで問題なのですが、文字列10と文字列11の判別はできないのでしょうか? 110111が連続している場合も値110と値111と判別できないのでしょうか? 値を格納する場合は、整数型のint c[1000]を用意するという事でしょうか? よろしくお願いします。

  • PHPに組み込まずにiconvを使用する方法はありませんか?

    PHPに組み込まずにiconvを使用する方法はありませんか? 製品版のカスタマイズで、Linux上のPHPからWindows上のSQL-Server2005にデータを登録するシステムを作成しています。 ・環境   RHEL4.7   PHP4.4.7(文字コードは全てUTF-8)   Windows2003Server   SQL-Server2005 mbstringを使用して、文字コードをUTF-8からSJIS-winに変換してDBに登録し、DBから取得した値をSJIS-winからUTF-8に変換して画面に表示しているのですが、画面表示で文字化けします。 (mssqlを使用してDB接続しています) DBから取得した値の文字コードをmb_detect_encodingで確認すると、SJIS-winと出るのですが、mb_convert_encodingでSJIS-winからUTF-8へ変換しても文字化けします。 (チェック順は「UTF-8,SJIS-win,EUC-JP」です) mbstringではなくiconvを使用するサンプルを作成したら、文字化けしなかったので、iconvを使用したいのですが、iconvは製品版のPHPに組み込まれていない(Configureで指定していない)ので、使用できません。 製品版のPHPはリビルドできないので、PHPに組み込まない状態でiconvを使用する方法を探しています。 FreeTDSにiconvを組み込み、FreeTDS+unixODBC+pearでODBC接続する方法は、PHPにODBCが組み込まれていないので、できませんでした。。 他に何か思いつく方法がありましたら教えてください。 よろしくお願い致します。

    • ベストアンサー
    • PHP