A5:SQL Mk-2

開発のこと、日々のこと

PostgreSQLに直接接続した場合の文字コード

ホーム フォーラム A5:SQL Mk-2掲示板 PostgreSQLに直接接続した場合の文字コード

  • このトピックには9件の返信、2人の参加者があり、最後ににより6年、 7ヶ月前に更新されました。
10件の投稿を表示中 - 1 - 10件目 (全10件中)
  • 投稿者
    投稿
  • #890 返信
    candide
    ゲスト

    Version 2.12.3 (x64 edition)を使用しています。

    PostgreSQLに直接接続したとき、データベースの内容によって、
    以下のエラーが発生します。(ODBC経由だと発生しません)

    「符号化方式”UTF8″における0x** 0x** 0x**バイトシーケンスを持つ文字は”SJIS”符号化方式では等しくありません」

    直接接続の場合、内部的にはShift JISでクエリ結果を受け取っているのでしょうか?
    設定などで変更可能であれば、ご教示いただけますと幸いです。

    #1068 返信
    松原正和
    キーマスター

    candideさんこんにちは。

    返信が遅くなり申し訳ありません。書き込みに気が付いていませんでした。

    PostgreSQLとの接続での文字コードですが、UTF-8が使われています。A5:SQL Mk-2の内部ではUTF-16です。

    なので、「”SJIS”符号化方式では等しくありません」のエラーメッセージはちょっと不思議なのですが、調査したいと思います。多分、サロゲートペアか機種依存文字の扱い関連でしょうか…。少々お待ちください。

    #1069 返信
    松原正和
    キーマスター

    candideさん

    PostgreSQLの文字コードは何をご使用でしょうか?。

    以下のSQLで確認することができます。

    SELECT character_set_name FROM information_schema.character_sets;

    以上よろしくお願いいたします。

    #1072 返信
    candide
    ゲスト

    こちらこそ、情報が足りずに申し訳ございません。

    文字コードは「UTF8」でした。

    今日、たまたま発生したエラーメッセージは以下のとおりです。
    「符号化方式”UTF8″における0xc3 0xbcバイトシーケンスを持つ文字は”SJIS”符号化方式では等しくありません」
    UTF-8で0xc3 0xbcというと、「ü」(U+00FC)と思われ、
    実際データにはウムラウト付きのuが含まれているのですが、
    サロゲートペアでもないありふれたUnicode文字ではあるので、
    ちょっと発生条件が謎ではあります。

    #1117 返信
    松原正和
    キーマスター

    candideさんこんにちは。

    こちらでもUTF8のデータベースでテストしているのですが、発生しないようです。

    とりあえず、データ・SQLステートメント・エラーメッセージにüなどが含まれるようにしても発生しませんでした。

    データベースの登録ダイアログで、「その他」タブに「データベースの文字コードがSQL_ASCIIのとき文字列を強制変換する」があるのですが、そこに何か値を設定したりしているのでしょうか?。
    (指定しないのが正しい設定になります。)

    #1118 返信
    candide
    ゲスト

    ご確認いただき、ありがとうございます。

    「データベースの文字コードがSQL_ASCIIのとき文字列を強制変換する」は、何も設定していない状態です。

    オプション設定で何か変わるかや再現条件など、試してみようと思います。

    #1122 返信
    candide
    ゲスト

    追加情報です。

    「設定」>「オプション」>「デフォルトに戻す」を試しましたが、動作に影響はありませんでした。

    なお、関係ないかもしれませんが、Portableモードで使用しています。

    #1124 返信
    ぴろきん
    ゲスト

    postgresql.confのclient_encodingに何か指定していますか?

    通常はコメントになっていてデータベースと同じエンコーディングを使うことになるのですが
    何か指定されていると何か意図しない動きになるのかもしれません。

    出ているエラーは、windowsのコマンドプロンプトでpsqlを使ってると良く出る
    エラーですよね。

    #1128 返信
    candide
    ゲスト

    情報をいただき、ありがとうございます。
    postgresql.confを直接は確認できないのですが、
    以下のSQLで「SJIS」が返ってきました……。

    SHOW client_encoding;

    とりあえず以下のSQLを実行してから、エラーになっていたSQLを実行したところ、最初はUnicode文字の出力結果が文字化けしていましたが、A5:SQL Mk-2を再起動すると正しく表示されるようになりました。

    SET CLIENT_ENCODING TO ‘UTF8’;

    クライアントの文字セット情報を保持する仕組みについて、今一つ理解できていませんが(クライアント側でなくサーバ側で持っているのか等)、問題が起こった時に対応できる算段はつきました。

    たいへん助かりました。ありがとうございました。

    #1190 返信
    松原正和
    キーマスター

    candideさんこんにちは。

    CLIENT_ENCODINGがSJISになっていたのですね…。使っているUniDACでは接続時にUTF8に変更しているように見えるのですが…。

    とりあえず、Version 2.13.0 beta 46で接続直後に
    set CLIENT_ENCODING to 'UTF8'
    を実行するように修正してみました。

    お試しいただければと思います。

10件の投稿を表示中 - 1 - 10件目 (全10件中)
返信先: PostgreSQLに直接接続した場合の文字コード
あなたの情報:




コメントは受け付けていません。