C#2.0時代のゲームプログラミング(39)
MySQLやODBCまわりの話は、バージョンがいくつもあって、インターネットで探していても載っている情報は
いまC#側から、MySQL4.1に対して create tableでucs2(≒Unicode)の文字列フィールドを持ったテーブルを作成する。このとき、char[4]は漢字4文字が入るはずだ。
ところが、MySQLはインストール時のdefaultはlatin1なので文字列が1バイト1文字計算になり、実際は2文字しか格納されない。詳しい人に聞いたところ「C#側からMySQLに対して set names sjis; などとして2バイト1文字計算であることを示す必要がある」とのことだ。実際、これで正しく漢字4文字がchar[4]に格納されるようになる。
だが私の疑問は解消しない。何故sjis*1を指定する必要があるのか?set names ucs2;だと駄目なのか?
試してみたがset names ucs2;を指定するとうまく動かない。MySQLのfront endはucs2に対応していないようだ。
一時的な制限:UCS-2 はクライアントキャラクタセットとしては(まだ)使用できません。
つまり、SET NAMES ucs2 は有効ではないということです。
C#の内部ではucs2でMySQLのbackendもucs2のはずなのに途中経路がsjisになっているのは大変気持ちが悪い。国際化対応アプリを作っているはずがsjisにしか対応していないのは気分もよろしくない。
MySQLのfrontendがucs2に対応していないのはいいとしても、ODBC(MySQL用のODBCドライバ。Connector/ODBC 3.51。以下、単にODBCドライバと書く)のbackendとMySQLのfrontendとがsjisでやりとりしているのは何故だ?こっちはsjisなんて指定していない。誰がいつsjisを指定したのか?(つづく)