
postgresのデータベースから日本語の入った列の取得が上手くできずに困っています。
どうすればよいのでしょうか。。。
【DB】
postgres:9.1.1
perl: v5.10.1
databaseの文字コード:UTF-8
【クライアント】
postgres:8.4.0
perl:v5.8.8
文字コード:ECU-JP
このような環境で、クライアントで
県名テーブルから県名を取得する以下のようなperlを実行した結果、
OUT.csvの県名列が文字化けしてしまったため
(1)のように修正したのですがエラーとなってしまいます。
convertの記述の仕方が悪いのでしょうか?
DBD::Pg::st execute failed: ERROR: function convert(character varying, unknown, unknown) does not exist at character 19
(Test.pl)
#!/usr/local/bin/perl
use DBI;
$query = <<EOF;
SELECT
KEN_ID,
KEN_NAME ←修正前
convert(KEN_NAME,'UTF-8','EUC-JP')←(1)
FROM KEN_MASTER
EOF
$dbi = DBI->connect("dbi:Pg:dbname=datbase;host=DATA_SV","hogeUser","hogePass");
$dsi = $dbi->prepare($query);
$dsi->execute();
open(OUT, "> /OUT.csv");
while ($shr = $dsi->fetchrow_arrayref) { print OUT join(",", @$shr), "\n"; }
close(OUT);
$dsi->finish();
$dbi->disconnect();
exit();
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
CLIENT_ENCODING を指定して PostgreSQL 側で自動文字コード変換させれば良いのでは?
Perlスクリプト側や個々のSQLで文字コード変換をするより楽かと。
例) ------------------------------------------
$query = 'SELECT KEN_ID, KEN_NAME FROM KEN_MASTER';
# ↑個々のSQLに変換処理は必要なし。
$dbi = DBI->connect(・・・
$dbi->do("SET CLIENT_ENCODING TO 'EUC_JP';"); # ← この行を追加
$dsi = $dbi->prepare($query);
$dsi->execute();
----------------------------------------------
http://www.postgresql.jp/document/9.1/html/multi …
http://www.postgresql.jp/document/9.1/html/runti …
No.1
- 回答日時:
convert(KEN_NAME,'UTF-8','EUC-JP') と言う文字列がそのままSQLに渡されているように見えます。
そのため、「convert等という関数は知らない」とDBからエラーが返ってきているのでは?
この場合、KEN_NAME はカラムの名前で、「KEN_NAME」ってそのままで変換の必要はありません。
変換が必要なのは、読み出した後です。
print OUT join(",", @$shr), "\n";
この部分が出力ですから、その出力している文字列を変換する必要があります。
convertは、どのconvertでしょう?
普通のjcode.plなら、utf8は使えません。
Perl 5.8.8なら、今後のことを考え、Encode::from_toを使うのがよいでしょう。(use Encde;が必要)
convertもEncode::from_toも、文字列を直接書き変えます。
my $st=join(",", @$shr), "\n";
Encode::from_to($st, 'utf-8','euc-jp');
print OUT $st ;
ほかにも、いろいろとありますので、「Perl Encode」で検索して、いろんな資料に目を通してください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- CGI htmlからパラメータで、cgiに渡したい。 1 2023/02/06 16:15
- Excel(エクセル) PHPプログラムをエクセルに張り付けると検索ボックスがでてくる! 3 2022/05/08 07:10
- PHP PHPの構文で間違えが分からない 5 2022/07/11 16:38
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP アコーディオンPHPが上手くいかない 3 2022/07/15 16:29
- PHP SQLとPHPの連結方法がわからないのでアドバイスお願い致します 1 2022/07/12 12:16
- PHP if(preg_match("/[^0-9]/",$gu_d)){意味を教えてください。 1 2022/05/06 05:37
- Excel(エクセル) エクセルのVBAについて とあるサイトのコードを参考に、CSVの文字化けを直すVBAを作成しているの 7 2022/11/04 14:15
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CString型からdouble型への変換
-
文字列を quoted-printable 文...
-
テキストをhtml変換するには
-
CString から LPCTSTRの型に変換
-
文字コードの%E3%80%とは何です...
-
文字コード(多言語化?)の取り...
-
SQLのデータで半角カナを全角に...
-
シェルスクリプトで文字列置換
-
これはなんの文字コードでしょうか
-
Delphiの型変換
-
MacからWindowsへiTunesのデー...
-
SJIS->UTF8->SJISコード変換に...
-
LINUX上でシリアル通信(C++)
-
漢数字の変換
-
五十音の並べ替えsortを教えて...
-
vbwide(半角⇒全角変換)について
-
漢字からカタカナ変換マクロ
-
エクセルでの漢字(全角ひらが...
-
ローマ字からカナに変換する方...
-
VB6にも「ToString」ってあり...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CString から LPCTSTRの型に変換
-
Excel VBAでPDFファイルをMicro...
-
文字コードの%E3%80%とは何です...
-
SQLのデータで半角カナを全角に...
-
CString型からdouble型への変換
-
VBScript文字列をSJISからUTF8...
-
ローマ字からカナに変換する方...
-
テキストをhtml変換するには
-
gccでiconvを使った文字コード...
-
SJIS->UTF8->SJISコード変換に...
-
エクセルでの漢字(全角ひらが...
-
文字列を quoted-printable 文...
-
VB6にも「ToString」ってあり...
-
VBScript 全角英数記号→半角英...
-
16進数の文字列を文章に変える
-
Delphiの型変換
-
文字列が勝手にエスケープ文字...
-
ウイザードからのVBAでクエリー...
-
【PHP】全角記号を半角記号...
-
文字コードの変換によるレイア...
おすすめ情報