人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【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版で可能なのでしょうか?

1177712396
●拡大する

●質問者: tenshiks
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:23 postgreSQL test Unicode Win32
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● b-wind
●35ポイント

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


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

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

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

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

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

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

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

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


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

クエリ実行前に

SET CLIENT_ENCODING 'SJIS';

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


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

◎質問者からの返答

有難う御座います。

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

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

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

SET CLIENT_ENCODING 'SJIS';

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

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


2 ● b-wind
●35ポイント

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

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


(1)postgresql.conf の編集

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

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

(中略)

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

ください。

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

◎質問者からの返答

解答有難う御座います。

ごめんなさい。

データベース自体は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の場合にマップファイルを書き換えない限り不都合が出た記憶があるので考えていませんでしたがどうでしょうか?

長々とすみません。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ