ホーム › フォーラム › A5:SQL Mk-2掲示板 › PostgreSQLに直接接続した場合の文字コード
- このトピックには9件の返信、2人の参加者があり、最後ににより6年、 7ヶ月前に更新されました。
-
投稿者投稿
-
candideゲスト
Version 2.12.3 (x64 edition)を使用しています。
PostgreSQLに直接接続したとき、データベースの内容によって、
以下のエラーが発生します。(ODBC経由だと発生しません)「符号化方式”UTF8″における0x** 0x** 0x**バイトシーケンスを持つ文字は”SJIS”符号化方式では等しくありません」
直接接続の場合、内部的にはShift JISでクエリ結果を受け取っているのでしょうか?
設定などで変更可能であれば、ご教示いただけますと幸いです。松原正和キーマスターcandideさんこんにちは。
返信が遅くなり申し訳ありません。書き込みに気が付いていませんでした。
PostgreSQLとの接続での文字コードですが、UTF-8が使われています。A5:SQL Mk-2の内部ではUTF-16です。
なので、「”SJIS”符号化方式では等しくありません」のエラーメッセージはちょっと不思議なのですが、調査したいと思います。多分、サロゲートペアか機種依存文字の扱い関連でしょうか…。少々お待ちください。
松原正和キーマスターcandideさん
PostgreSQLの文字コードは何をご使用でしょうか?。
以下のSQLで確認することができます。
SELECT character_set_name FROM information_schema.character_sets;
以上よろしくお願いいたします。
candideゲストこちらこそ、情報が足りずに申し訳ございません。
文字コードは「UTF8」でした。
今日、たまたま発生したエラーメッセージは以下のとおりです。
「符号化方式”UTF8″における0xc3 0xbcバイトシーケンスを持つ文字は”SJIS”符号化方式では等しくありません」
UTF-8で0xc3 0xbcというと、「ü」(U+00FC)と思われ、
実際データにはウムラウト付きのuが含まれているのですが、
サロゲートペアでもないありふれたUnicode文字ではあるので、
ちょっと発生条件が謎ではあります。松原正和キーマスターcandideさんこんにちは。
こちらでもUTF8のデータベースでテストしているのですが、発生しないようです。
とりあえず、データ・SQLステートメント・エラーメッセージにüなどが含まれるようにしても発生しませんでした。
データベースの登録ダイアログで、「その他」タブに「データベースの文字コードがSQL_ASCIIのとき文字列を強制変換する」があるのですが、そこに何か値を設定したりしているのでしょうか?。
(指定しないのが正しい設定になります。)candideゲストご確認いただき、ありがとうございます。
「データベースの文字コードがSQL_ASCIIのとき文字列を強制変換する」は、何も設定していない状態です。
オプション設定で何か変わるかや再現条件など、試してみようと思います。
candideゲスト追加情報です。
「設定」>「オプション」>「デフォルトに戻す」を試しましたが、動作に影響はありませんでした。
なお、関係ないかもしれませんが、Portableモードで使用しています。
ぴろきんゲストpostgresql.confのclient_encodingに何か指定していますか?
通常はコメントになっていてデータベースと同じエンコーディングを使うことになるのですが
何か指定されていると何か意図しない動きになるのかもしれません。出ているエラーは、windowsのコマンドプロンプトでpsqlを使ってると良く出る
エラーですよね。candideゲスト情報をいただき、ありがとうございます。
postgresql.confを直接は確認できないのですが、
以下のSQLで「SJIS」が返ってきました……。SHOW client_encoding;
とりあえず以下のSQLを実行してから、エラーになっていたSQLを実行したところ、最初はUnicode文字の出力結果が文字化けしていましたが、A5:SQL Mk-2を再起動すると正しく表示されるようになりました。
SET CLIENT_ENCODING TO ‘UTF8’;
クライアントの文字セット情報を保持する仕組みについて、今一つ理解できていませんが(クライアント側でなくサーバ側で持っているのか等)、問題が起こった時に対応できる算段はつきました。
たいへん助かりました。ありがとうございました。
松原正和キーマスターcandideさんこんにちは。
CLIENT_ENCODINGがSJISになっていたのですね…。使っているUniDACでは接続時にUTF8に変更しているように見えるのですが…。
とりあえず、Version 2.13.0 beta 46で接続直後に
set CLIENT_ENCODING to 'UTF8'
を実行するように修正してみました。お試しいただければと思います。
-
投稿者投稿