1177712396 【PostgreSQL】

まず添付されている画像を参照して頂ければと思います。
文字数制限の為画像に追記がある事をご容赦下さい。

以下、検証の為のテスト環境
PostgreSQL 8.13とPostgreSQL 8.23が別々のwin32マシンにインストールされています。(逆にもしました)
設定共にほぼ同様、confもデフォルトの状態です。
それをpgAdmin 1.63で管理しています。
共にtest_tblのtestにドコモの太陽の絵文字が入っています。

問題は、この事を踏まえテーブルをpgAdminⅢからデータビューを行うと。
8.13の場合、クエリツールと同様、絵文字は削除され表示される。
8.23の場合、異常終了し表示できない。

クエリーツール時のエラーを考えると、UTF8で表示しようとしているが、対応する領域が無いので表示できないという事になるのだろうと思うのですが、8.13の方だと問題なく表示されるのが謎です。

これの改善策があれば教えてください。
8.13ではエラーが出ないのが何故なのか気になります…
クエリーツールからSHOW CLIENT_ENCODING;で確認すると共にUNICODEなのです。
UTF8のマップファイルを更新すれば何とかなりそうな感じはしますが、Windows版で可能なのでしょうか?

回答の条件
  • 1人5回まで
  • 登録:2007/04/28 07:19:56
  • 終了:2007/05/05 07:20:02

回答(2件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/04/28 12:51:50

ポイント35pt

まず、文字数制限は自分で自分の質問にコメントすることで回避できます。


本題ですが、PostgreSQL ではデータベース側が UNICODE であればドコモの絵文字は問題なく扱えます。

コマンドラインから表示できている事からも、そこは問題ないでしょう。

ドコモの絵文字はシステム的には単なる SJIS の外字です。

実際に表示できるのは CLIENT_ENCODING が UNICODE か SJIS の場合になります。

設定共にほぼ同様、confもデフォルトの状態です。

とありますが、「ほぼ」とか「デフォルトのまま」というのはお互いに認識違いを起こす元となります。

正確な設定内容を教えてください。

とくに問題となるのはデータベースのエンコーディングでしょう。


エラー内容は EUC に変換しようとして失敗しているようですので、

クエリ実行前に

SET CLIENT_ENCODING 'SJIS';

とすれば問題ないはずです。


バージョンによって挙動が異なるのは UTF-8 <-> EUC_JP 間のマッピングが変わっているのかもしれませんね。確認はしていませんが。

id:tenshiks

有難う御座います。

設定が違うのは、マシンの固定IPのアドレス設定のみです。

postgresql.confは共にインストール後一切手を加えない状態です。

画像に書いた通り、クエリツールですと

SET CLIENT_ENCODING 'SJIS';

で解決するのですが、pgAdminⅢのテーブル→テーブル名→データビューですとそのクエリを流す事ができないのでどうにも困っています。

何か改善策はあるでしょうか?

2007/04/28 18:37:12
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402007/04/28 21:40:44

ポイント35pt

設定が違うのは、マシンの固定IPのアドレス設定のみです。

もう一度お伺いします。データベース自体のエンコードを教えてください。


(1)postgresql.conf の編集

 スタート -> (すべての)プログラム -> PostgreSQL 8.0 -> 構成ファイル -> postgresql.conf の編

 集 を実行してください。 以下の画面が表示されます。

(中略)

 ・client_encoding (クライアント側の文字コード) の項目をダブルクリックして値に SJIS を設定して

  ください。

  チェックマークを付けて設定を有効にしてください。

id:tenshiks

解答有難う御座います。

ごめんなさい。

データベース自体は8.13も8.23もEUC-JPです。


client_encodingについては以前にも試してみたのですが、改善されませんでした。

サービスも手動で再起動しています。


cmdのpsqlからSHOW CLIENT_ENCODING;と流すと、client_encodingが設定されていなくとも、SJISに設定されていても、SJISとなります。

これもおかしいような気がしますが…


client_encoding

----------------

SJIS

(1行)


しかし、pgAdminⅢのクエリーツールからSHOW CLIENT_ENCODING;と流すと、どちらの場合でもUNICODEとなります。


先に述べたとおり

SET CLIENT_ENCODING TO 'SJIS';

SHOW CLIENT_ENCODING;

とすれば勿論SJISと返ってきます。


また、データベース自体をUNICODEにしてしまった場合には、AU,SBの場合にマップファイルを書き換えない限り不都合が出た記憶があるので考えていませんでしたがどうでしょうか?

長々とすみません。

2007/04/29 02:06:28
  • id:kurukuru-neko

    http://itpro.nikkeibp.co.jp/article/COLUMN/20070409/267852/?ST=lin-server&P=4

    http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/basic/index.html

    http://www.nttdocomo.co.jp/service/imode/make/content/pictograph/extention/index.html

  • id:b-wind
    >AU,SBの場合にマップファイルを書き換えない限り不都合が出た
    AU の最近の事情は知りませんが
    Softbank は昔から制御コードを使用した独自規格なんで文字コードの設定はほとんど関係ありません。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません