プロが教える店舗&オフィスのセキュリティ対策術

いつもお世話になっております。
前提として、環境は、VMWareの中に、CentOS5があり、PostgreSQL8.4で、
文字コードはEUC-JPをinitdbしています。

今回、WindowのExcelでCSVを、PostgreSQLのCOPYコマンドでインポートできるかを検証しているのですが、下記のような形で、copyコマンドを実行しますと、
結果、UTF-8ですと、文字化けしていませんが、EUC-JPですと、文字化けしてしまいます。

デフォルトのDBのエンコードのEUC-JPで、SELECTの結果が文字化けしてほしくないのですが、どこか、間違っているところありますでしょうか。
お手数をおかけしますが、なにとぞご教授よろしくお願い申し上げます。


[foo@localhost ~]$ psql test
psql (8.4.6)
Type "help" for help.

test=> \encoding SHIFT-JIS
test=> \copy shinamono from /tmp/Book1.csv with csv
test=> select * from shinamono;
hinmei | nedan
---------------------+-------
・スンゑソス・ス・ス | 100
・ス・ス・ス・ス・ス・ス | 150
・ス・ス・ス・ス・ス・ス | 2500
・ス`・ス・ス・スR・ス・ス・ス[・スg | 100
・ス・ス・ス・ス・ス・ス,・スネゑソス・スフセ・スb・スg | 5000
・スワつゑソス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
・ス`・ス・ス・スR・ス・ス・ス[・スg | 100
・ス・ス・ス・ス・ス・ス,・スネゑソス・スフセ・スb・スg | 5000
・スワつゑソス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
・ス`・ス・ス・スR・ス・ス・ス[・スg | 100
・ス・ス・ス・ス・ス・ス,・スネゑソス・スフセ・スb・スg | 5000
・スワつゑソス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
(12 rows)

test=> \encoding EUC-JP
test=> select * from shinamono;
hinmei | nedan
---------------------+-------
・ス゜、・ス・ス・ス | 100
・ス・ス・ス・ス・ス・ス | 150
・ス・ス・ス・ス・ス・ス | 2500
・ス・ス・ス逾ウ・ス・シ・ス・ス | 100
・ス・ス・ス・ス・ス・ス,・スハ、・ス・スΥ・ス・スa・ス | 5000
・ズ、ト、・ス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
・ス・ス・ス逾ウ・ス・シ・ス・ス | 100
・ス・ス・ス・ス・ス・ス,・スハ、・ス・スΥ・ス・スa・ス | 5000
・ズ、ト、・ス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
・ス・ス・ス逾ウ・ス・シ・ス・ス | 100
・ス・ス・ス・ス・ス・ス,・スハ、・ス・スΥ・ス・スa・ス | 5000
・ズ、ト、・ス・ス・ス ・ス・ス・ス・ス・ス・ス | 10000
(12 rows)

test=> \encoding UTF-8
test=> select * from shinamono;
hinmei | nedan
---------------------+-------
みかん | 100
りんご | 150
メロン | 2500
チョコレート | 100
メロン,なしのセット | 5000
まつたけ すだち | 10000
チョコレート | 100
メロン,なしのセット | 5000
まつたけ すだち | 10000
チョコレート | 100
メロン,なしのセット | 5000
まつたけ すだち | 10000
(12 rows)

A 回答 (2件)

\encoding は、データベースサーバとクライアントとの間で


文字コードを変換することを指示します。

\encoding SHIFT-JIS とすれば、クライアントが扱う文字コードは
SHIFT-JIS として、データベースに登録する際は SHIFT-JIS から
データベースの文字コードに変換され、データベースからデータを
取り出した場合は、データベースの文字コードから SHIFT-JIS に
変換されて取り出されます。

しかし、これとは別に端末ソフトウェアが扱う文字コードがあります。
ご利用になられている端末ソフトウェアは何でしょうか。 TeraTerm,
Putty それとも Linux 上で Gnome 端末でしょうか。
これらの端末ソフトウェアにも文字コードの設定があり、UTF-8 と
設定した端末では SHIFT-JIS に変換されて取り出されたデータは
正しく表示されません。

質問されている例では、端末ソフトウェアの文字コードが UTF-8 と
設定されているのに、データベースからデータを SHIFT-JIS や
EUC-JP で取り出しているために化けているのだと思います。
    • good
    • 1
この回答へのお礼

す、すばらしいい!!

非常に良くわかりました。

感謝です!!


ありがとうございました!!!

お礼日時:2011/01/26 21:55

端末の文字コードが UTF-8 になっているため、


SHIFT-JIS や EUC-JP で表示したときに文字化けしている
だけではありませんか。

この回答への補足

早速のお返事いただきありがとうございます。

おっしゃるとおり、CentOSの文字コードは、UTF-8ですので、
それ要因だとわかりましたが、理解の仕方でくるしんでいます。

CentOSの文字コードをLANG="ja_JP.eucJP"にしました。

その後、\encoding SJISを実行して、Windowsのcsvファイルは取り込めました。
ちなみにこのとき、DBに格納されている文字コードは、EUC-JPですよね?たぶん。;

続けて、今とりこんだテーブルをselect * from shinamono;のように参照すると、
文字化けしますので、再度、\encoding EUC-JPとして、LANGと同じにしましたが、
まだ、文字化けします。

ここらへん、細かいですが、どのようになっていますでしょうか。

補足日時:2011/01/24 22:37
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す