HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0108
SYAMHSPDBで utf8 以外のSQL文は送信できませんか2解決


SYAM

リンク

2010/1/8(Fri) 18:24:36|NO.29830

HSPDBを利用してデータベースの更新を行おうとしています。
データベース上の日本語データはすべてEUC-JPで書かれています。
入力する予定のデータもEUCです。

なので、そのまま送ればいっか、とたかをくくっていたのですが、HSPDBの挙動を見ていると、どうも送出予定のバッファ内のデータをそのまま送出はしておらず、バッファ内のデータはShift-JISで格納されているものとしてそれをUTF-8に変換して送出している?ように見えます。
送出する文字列が EUC だと、当然ながら化けてしまいました。
そこで、いったん送出予定の文字列をEUCから Shift-JISに変換して dbsend 命令に渡したところ、なんとか正しく送出できました。EUC→ShiftJIS→UTF-8→EUC とムダに変換しまくってるはずです。
ところが、UTF-8で送出されたデータをデータベースがEUCに変換しようとして、“〜”を変換できずにエラーとなってしまいます。

もとのデータをそのまま送出さえできれば、データベース側での文字コード変換も発生しないはずなので、このような不具合は発生しないと考えていますが、そのような方法はないでしょうか?
または、私なんか間違ったことやってるでしょうか(汗



この記事に返信する


おにたま(管理人)

リンク

2010/1/10(Sun) 12:26:49|NO.29848

あまりはっきりとしたお答えができなくて申し訳ないのですが、
hspdbのプラグイン自体では文字コードは変換していませんので、
送り出しを行なうAPIのSQLExecDirect関数か、ODBCドライバ内部で変換が行なわれていると思います。
デフォルトのキャラクタ設定はODBCのドライバにもよると思いますが、
hspdbからはそのまま文字列を渡しているだけになっています。
少なくともMySQLの場合は、間にutf8の変換がはさまれていることはないはずです。



SYAM

リンク

2010/1/14(Thu) 12:51:52|NO.29952

ご回答ありがとうございます。
何を勘違いしていたのか…確かに SJISで送出ができていたようです。
送出自体は、SET NAMES sjis; だけでちゃんとできていたのですね。
漢字コードの変換はすべてデータベース側で行われ、その際にunicodeを経由していただけでした。


どうやら、 MySQL Connector/ODBC 5.1 を利用すると、データベース側がEUCのときに"〜"の変換に失敗するみたいです。
MySQL Connector/ODBC 3.51を利用すると、そこだけ変えて後は同じスクリプトでも正常にデータベースを操作・更新できました。
これのせいでハマってましたorz



ONION software Copyright 1997-2021(c) All rights reserved.