質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Q&A

解決済

2回答

11918閲覧

pgadmin3/4でUTF8でクエリをかけてしまうのをどうにかしたい

Marin_MTB

総合スコア11

pgAdmin

pgAdminは、オープンソースのPostgreSQL管理ツール。様々な機能を持ち、コマンドラインベースでPostgreSQLへ行う操作のほとんどをpgAdminを用いて実行することができます。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

0グッド

0クリップ

投稿2017/01/24 04:25

###前提・実現したいこと
PostgreSQL9.6.1にEUC_JPのDBを作成したものをpgadminで接続し、テーブルを直接編集したいです。

pgadminIII、またはpgadmin4にて、
■pgadminIII時
「データベース」→任意のデータベース→スキーマ→「public」→「テーブル」→任意のテーブルを選択→ウインドウ上メニューの「選択オブジェクトデーデータをビュー」ボタンを押下。

■pgadmin4時
DB選択→Schemas→public→Tables→任意のテーブル右クリック「View Data」→「View All Rows」を選択。

どちらのケースでも白紙となり、pgadminIIIでは「アボート」と左下に表示されます。

###発生している問題・エラーメッセージ
PostgreSQLサーバーでは以下のメッセージとなります。

< 2017-01-24 12:54:08.287 JST > ERROR: 符号化方式"EUC_JP"における0xf9 0xf5バイトシーケンスを持つ文字は"UTF8"符号化方式で は等しくありません < 2017-01-24 12:54:08.287 JST > ステートメント: SELECT * FROM public.order ORDER BY order_id ASC

このことから、UTF8でクエリを行っていることがマズイのですが、これをEUC_JPでクエリさせる方法が解りません。

###試したこと
ローカルPCの環境変数に「PGCLIENTENCODING」を作成し、値に「EUC_JP」を設定しましたが、結果は同じでした。

###補足情報(言語/FW/ツール等のバージョンなど)
クライアントOSはWindows10 Pro 64bitです。
PostgreSQLサーバーに対し、postgresql.confに
client_encoding = EUC_JP
を設定して再起動しましたが、結果は同じでした。
どうも、pgadminが強制的にUTF8で見に行っているようです。
コマンドプロンプトで
C:>cd "c:\Program Files (x86)\pgAdmin III\1.12"
c:\Program Files (x86)\pgAdmin III\1.12>psql -U postgres -p hoge -hexample.com testdb
psql (9.0.0, server 9.6.1)
WARNING: psql version 9.0, server version 9.6.
Some psql features might not work.
Type "help" for help.

testdb=# \encoding
EUC_JP
testdb=# SELECT * FROM public.order
testdb-# ORDER BY order_id
testdb-# ASC;
order_id ..snip...
と正常に出力されます。
また、100件までのクエリでは正常に結果が返る事から、テーブル内でEUCコードとUTF8と相容れない文字があるのだと推測しますが、解決法が解りません。
どなたか、解決法は解りますでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

問題になっている0xf9f5は、「﨑」という文字で、これはMicrosoftなどによる独自拡張の文字です。

しかもややこしいことに、この「﨑」は「NEC選定IBM拡張文字」と「IBM拡張文字」として、文字コード上に二重に入っているため、EUC⇔Unicodeの変換テーブルから外されてしまっている、ということのようです(参照)。

クエリもEUCで投げ続けるか、テーブルごとUTF-8に変えて運用するかの2つに1つだと思います。

投稿2017/01/24 04:46

編集2017/01/24 04:49
maisumakun

総合スコア145184

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Marin_MTB

2017/01/24 05:24

こんな罠があるんですね…。 ``` nkf -e data.sql > data2.sql ``` したらデータサイズが変わったので、恐らくこの問題でしょうね。 ありがとうございます!
guest

0

同じことだと思いますが、以下のクエリを発行しても駄目でしょうか。
set client_encoding to 'EUC_JP';

投稿2017/01/24 04:38

mukkun

総合スコア882

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Marin_MTB

2017/01/24 05:24

それはやってみました…。が、ダメでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問