mysql:13245
From: Tetsuro IKEDA <Tetsuro IKEDA <te.ikeda@xxxxxxxxxx>>
Date: Tue, 15 Aug 2006 12:25:38 +0900
Subject: [mysql 13245] Re: FEDERATED ストレージ・エンジンでの日本語取り扱い
こんにちは。いけだです。 saka kingさんが仰っているところの、 skip-character-set-client-handshakeを指定することで クライアント側の文字コード、すなわち ・character_set_client ・character_set_connection ・character_set_result といったものが、character_set_serverの値によって 自動的に設定されるというのは合っていると思います。 しかしこの機能には盲点がありまして、 明示的に"SET NAMES xxx"を発行すると上記変数を 上書きできるというのがあります。 従って、character_set_server=utf8となっていて、 skip-character-set-client-handshakeが指定されていても、 SET NAMES latin1; というのが発行されると、character_set_result=latin1となるため、 MySQL 4.1から実装された文字コード自動変換機能がここで使用される ようになり、「utf8→latin1」への変換過程で文字化けが発生する、 ということです。 で、この"SET NAMES latin1"というのが、Federatedのローカルmysqldと リモートmysqldの接続が切れた場合(かつローカルmysqldがそれに気づいて いない場合)に、発行されるということが、今回のポイントではないかと 思います。 ここでコンパイル時に--with-charset=utf8としておくと、"SET NAMES utf8" が発行されるので問題ないのですが、MySQL AB配布バイナリを使用すると latin1でコンパイルされているために、こういうことが起きることになります。 ska_king2005@xxxxxxxxxx wrote: > ska kingです。 > >> TO 池田さん > バグレポート見てませんでした。 > 英語がわからず、、、さらにC言語がわからず、、、すいませ > ん(爆) > > 接続や再接続に関わらず、「skip-character-set-client-handshake > 」を指定すると、 > クライアントの文字コードが、サーバ側の「character_set_server > 」の値で > 上書きされるものだと思っていました。 > 内部的な動きはわかっていませんが。。。 > > FEDERATEDを使用したときの文字コード決定フローは、mysqlク > ライアントと同じ流れなんでしょうかね。 > -- Tetsuro IKEDA Sumisho Computer Systems Corp. Open Source System Div. te.ikeda@xxxxxxxxxx TEL +81-3-5166-2420 FAX +81-3-5166-1189
13235 2006-08-10 22:41 [tateyan <tateyan@xxx] FEDERATEDストレージ・エンジンでの日本語取り扱い 13236 2006-08-10 22:57 ┗["Tetsuro IKEDA" <ikd] 13237 2006-08-10 23:22 ┗["Tetsuro IKEDA" <ikd] 13238 2006-08-11 01:12 ┗["Tetsuro IKEDA" <ikd] 13239 2006-08-11 22:39 ┗[Tetsuro IKEDA <te.ik] 13240 2006-08-11 22:57 ┗[tateyan <tateyan@xxx] @ 13242 2006-08-14 17:39 ┗[<ska_king2005@xxxxxx] 13243 2006-08-14 18:04 ┗["Tetsuro IKEDA" <ikd] 13244 2006-08-15 10:06 ┗[<ska_king2005@xxxxxx] -> 13245 2006-08-15 12:25 ┗[Tetsuro IKEDA <te.ik] 13246 2006-08-15 16:31 ┗[<ska_king2005@xxxxxx]