• ベストアンサー

postgresのdatabase名と、そのencodingを取得する

postgresのdatabase名と、そのencodingを取得する方法を教えてください。 postgres8.1です。 システムカタログ http://www.postgresql.jp/document/pg811doc/html/catalogs.html の pg_databaseの項目として持っているだろうと思い、見てみました。 encoding int4 このデータベースの文字符号化方式 これか?と思いましたが、数値IDのみでした。 この数値から、utf8やsjisといった情報にどうやったら繋がりますか?

  • ngwave
  • お礼率65% (240/366)

質問者が選んだベストアンサー

  • ベストアンサー
  • yamada59
  • ベストアンサー率74% (29/39)
回答No.2

pg_encoding_to_char関数で文字エンコーディング名に変換できます。 => SELECT datname, pg_encoding_to_char(encoding) FROM pg_database; datname | pg_encoding_to_char -----------+--------------------- template1 | UTF8 template0 | UTF8 postgres | UTF8 (4 rows)

その他の回答 (1)

  • root139
  • ベストアンサー率60% (488/809)
回答No.1

psql が使える環境であれば、 psql -l で、データベースの一覧が表示され、エンコーディングも分かりますが、それでどうですか?

参考URL:
http://www.postgresql.jp/document/pg811doc/html/multibyte.html#AEN22451

関連するQ&A

  • XP+PHP+POSTGRES(SJIS)

    でPHPしてますが <?PHP $str=pg_escape_string('予算'); echo$str; ?> をすると 予\算 と表示されてしまいます これではPOSTGRESで日本語が使えません これに対処する方法はあるのでしょうか? pg_escape_string を使わなければ問題ないのですが これではデータベースを保護できません SJIS独自の問題でUTF-8やEUC-JPなど ほかのコードでは問題ないのでしょうか?

    • ベストアンサー
    • PHP
  • PHP+Postgres 「髙」が文字化け

    DB上に格納した文字列を取得し、PHPで出力すると、 「髙」(はしごだか)等、一部の文字が「□・」のような見た目に化けてしまいます。 環境は以下です。 Linux(CentOS 5) PHP 5.1.6 Apache 2.2.3 PostgreSQL 8.4.3 文字コードは以下です。 Postgres:EUC-JP PHPソース:EUC php.ini の[mbstring]はコメントのまま変更していません。 文字コードの変換を試してみたのですが、「髙」としては出力できませんでした。 Windows上では「CP51932」に変換すると正常に出力できましたが、Linux上ではやはり駄目でした。 mb_language("uni"); mb_internal_encoding("euc-jp"); mb_http_input("auto"); mb_http_output("euc-jp"); $str = "髙橋"; print(mb_convert_encoding($str, "EUCJP-win")); print(mb_convert_encoding($str, "EUCJP-win","EUC-JP")); print(mb_convert_encoding($str, "SJIS")); print(mb_convert_encoding($str, "SJIS","EUC-JP")); print(mb_convert_encoding($str, "SJIS-win")); print(mb_convert_encoding($str, "SJIS-win","EUC-JP")); print(mb_convert_encoding($str, "UTF-8")); print(mb_convert_encoding($str, "UTF-8","EUC-JP")); print(mb_convert_encoding($str, "EUC","SJIS")); print(mb_convert_encoding($str, "Unicode")); print(mb_convert_encoding($str, "Unicode","EUC-JP")); print(mb_convert_encoding($str, "UTF-8", "sjis-win")); print(mb_convert_encoding($str, "CP51932")); print(mb_convert_encoding($str, "MS932")); print(mb_convert_encoding($str, "MS932","EUC-JP")); print(mb_convert_encoding($str, "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win" ), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "EUCJP-win","EUC-JP"), "UTF-8","EUCJP-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "UTF-8","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win" ), "EUCJP-win","SJIS-win")); print(mb_convert_encoding(mb_convert_encoding($str, "SJIS-win","EUC-JP"), "EUCJP-win","SJIS-win")); http://blog.livedoor.jp/loopus/archives/50160285.html 上記サイトによると、解決法は「EUC-JPで出力しないこと」という事でしたが、 文字コードを変換して出力できるような事を書いているサイトもあり、結論が出せずにいます。 ソースを書き換えるのは避けたいのですが、いい方法がありましたらご教示ください。

    • ベストアンサー
    • PHP
  • postgresのWindows版でinitdbで初期化するには

    postgresのWindows版でinitdbで初期化するには どうすれば良いですか? postgresユーザで # initdb --encoding=UTF8 --no-locale を実行するという記事を見つけました。 linuxの場合、 su - postgres の後、実行すればよいのでしょうが、 Windows版ではどうなりますか? とりあえず、やってみましたが、以下のような状態です。 C:?Program Files?PostgreSQL?8.1?bin>initdb --encoding=UTF8 --no-locale initdb: no data directory specified You must identify the directory where the data for this database system will reside. Do this with either the invocation option -D or the environment variable PGDATA.

  • 文字コードの設定

    文字コードの設定する場所って 何箇所かあると思うんですが 教えてもらえないでしょうか psql -l Database | Owner | Encoding -----------+----------+----------- template1 postgres SQL_ASCII php.ini i18.internal_encoding = SJIS 後、ありましたら教えてください 違うマシンで同じ環境を作ろうしているのですが できなくて困っています Redhat6.2J postgres 7.0.2 php3.0.18

    • 締切済み
    • PHP
  • initdbの文字コードと違う文字コードでDB作成

    postgres9.0.4でEUCでinitした環境があります。 initdb --encoding=EUC_JP そこにUTF8のDBを作成したいのですが、以下のようなエラーがでます。 psql -U postgres postgres=# CREATE DATABASE dbname postgres-# WITH ENCODING='UTF8' postgres-# OWNER=dbowner postgres-# CONNECTION LIMIT=-1; ERROR: encoding UTF8 does not match locale ja_JP.eucJP DETAIL: The chosen LC_CTYPE setting requires encoding EUC_JP. 既に運用が始まっているEUCのDBが稼動している状態です。 EUCで初期化したところに後からUTF8のDBを作成する方法はないのでしょうか?

  • エラーが起こっているレコードの特定

    エラーが起こっているレコードの特定 pg_dumpでバックアップを取っていたら以下のメッセージが出力されました。 > pg_dump: サーバのエラーメッセージ: ERROR: 符号化方式"UTF8"文字0xe28093<は"SJIS"と同じではありません おそらくユーザがSJISで表現できない文字を入力したのではないかと思います。 それはなんらかの根本的な対処が必要として、とりあえずバックアップができるように、このレコードの該当する文字列をpgadminを使って手動で修正しようと思っています。ですが、そのレコードを特定する方法がわかりません。 このエラーが出た場合、問題があるレコードを特定するにはどうしたらいいでしょうか。

  • データベースにアクセス出来ません。宜しくお願いします。

    こんにちわ。先日postgre8.2をwinXPにダウンロードしました。デpostgresの画面ではデータベースの新規作成が出来るようになっているのですが、パールから作ろうとするとコマンドプロンプトにエラーが出てきます。以下にパールの文とエラーを書きますので、何かチェックする点や設定など確認や文自体の間違いなどお教え下さい。宜しくお願いします。 #!c:/perl/bin/perl use DBD::Pg; use DBI; $dbh=DBI->connect("dbi:Pg:host=localhost;dbname=postgres",'ddd','cc'); $sth=$dbh->prepare($a); my$a=(<<"EOL"); CREATE DATABASE kensaku with encoding='euc_jp' owner=ddd template=postgres tablespace=pg_default; grant all on database kensaku to public; EOL $v=$sth->execute(); $d=$dbh->disconnect; エラー:DBD::Pg::st execute warning: at test.pl line 21. 宜しくお願いします。

    • ベストアンサー
    • Perl
  • 検索で濁点や半濁点をヒットさせない

    PostgreSQLで検索をすると濁点や半濁点もヒットしてしまいます。 「%カルヒ」で、「カルビスープ」も「カルピス」もヒットしてしまいます。 データべースは下記の通り作成しました。 CREATE DATABASE testdb WITH OWNER = postgres ENCODING = 'UTF8' TABLESPACE = pg_default LC_COLLATE = 'Japanese_Japan.932' LC_CTYPE = 'Japanese_Japan.932' PostgreSQLにて検索で濁点や半濁点をヒットさせない方法はありますか?

  • 日本語コードにできるだけ悩まされない為には?

    サーバーはUNIX系・メンテナンス側はWindowsという環境で、主な閲覧者は携帯電話からというサイトを作りたいと思っております。 携帯配信という事とテナンス性を優先すれば、SJISで統一したい所ではありますが、ネットの情報を拾い見ていると、SJISは色々と問題があるような記述が多い印象を受けます。MySqlも絡めて、このような場合、日本語をどう扱うのが一番良いのでしょうか? 下記方式で行こうとするのは無謀でしょうか? mb_internal_encoding -> SJIS mb_regex_encoding -> SJIS MySQL -> EUC-JP or UTF-8(DBとのやりとりは逐一mb_convert_encoding) できましたらSJISを使う場合の具体的な弊害例、MySQLはEUCとUTFどっちがより問題が少ないのか等、漠然とした質問で答えにくいとは思いますが、経験からのアドバイス等よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • perlからDBIを使用したpostgresへの接続でエラー

    perlからDBIを使用して、データベースにアクセスしたいと思っていますが、connectで下記のようなエラーが出力され接続できません。 ↓↓↓↓↓↓apacheのエラーログ↓↓↓↓↓↓↓ DBI connect('dbname=[mscdb]','[postgres]',...) failed: FATAL: database "[mscdb]" does not exist at /web/member/cgi-bin/dbitest.pl line 8 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ mscdbがないとエラーが出力されているように思いますが、mscdbは存在します。どういった原因が考えられるでしょうか? プログラムには以下のように記述しています。 #!/usr/bin/perl use DBI; use constant DBNAME => 'DBI:Pg:dbname=[mscdb]'; use constant DBUSER => '[postgres]'; use constant DBPASS => '[××××]'; DBI->connect( DBNAME, DBUSER, DBPASS, { AutoCommit => 0 }); print "Content-Type: text/plain\n\n"; print $DBI::errstr? $_: 'Done'; 環境は以下の通りです。    perl v5.8.2    postgres v8.1.2 vine linux dbd v1.49

    • ベストアンサー
    • Perl