mysql:6304
From: とみたまさひろ <とみたまさひろ <tommy@xxxxxxxxxx>>
Date: Sat, 28 Sep 2002 13:47:24 +0900
Subject: [mysql 06304] Re: 2バイト文字の境界を考慮したデータ格納の有無
とみたです。 On Fri, 27 Sep 2002 23:05:07 +0900 Okamoto RYO <ryo@xxxxxxxxxx> wrote: > この時、例えば varchar(255) のカラムに2バイト日本語 EUC 文字(例えば > 「あ」など)を128個、つまり 256 バイト分インサートすると、最後の > 文字は前半1バイト分のみ格納されるようです。結果として、プログラムを > 通じて取得したデータの最後の文字は化けておかしくなります。 そうなります。 > これまで、mysql 側で、マルチバイト文字が格納バイト数を越えて境界の > 文字が分割?される場合はその文字が削除されて(もしくは半角スペースなどで > 自動置換されて)登録されていると思い込んでいたのですが、実際には > 境界は一切考慮されていないのでしょうか? 一切考慮されてません (^^; > みなさまはこの問題をどのように回避されていますでしょうか。 > > 例えば varchar(64) などとした場合、プログラム側で 60 バイト > 以下であればエラーを出すなど、常に数バイトほど余裕を持ってチェックを > 行う、などの方法しか無いのでしょうか。 やはりプログラムでできることはプログラムで行なうというのが MySQL らし い解決方法だと思います。 > LIKE 演算子を用いた SELECT 文などを発行した場合はきちんと > 2バイト文字の境界を考慮してくれているのにもかかわらず、 > データ格納の際は境界が考慮されていない(ように見える)のが謎です。 > どなたか、ご存じの方がいらっしゃいましたら、この辺りの > 事情を簡単にでもご教授頂けませんでしょうか。よろしく > お願い致します。 もともと、MySQL は登録時にテーブルのフィールド長よりも長い文字列を指定 しても黙ってブチ切ってくれます。なので、マルチバイト対応した際も、その 辺は一切考慮してません。 -- とみたまさひろ <tommy@xxxxxxxxxx> 日本MySQLユーザ会 http://www.mysql.gr.jp
6301 2002-09-27 23:05 [Okamoto RYO <ryo@xxx] 2バイト文字の境界を考慮したデータ格納の有無 6302 2002-09-28 00:54 ┣[<moeru@xxxxxxxxxx> ] -> 6304 2002-09-28 13:47 ┗[とみたまさひろ <tomm] 6305 2002-09-29 10:04 ┗[Okamoto RYO <ryo@xxx]