[前][次][番号順一覧][スレッド一覧]

mysql:6301

From: Okamoto RYO <Okamoto RYO <ryo@xxxxxxxxxx>>
Date: Fri, 27 Sep 2002 23:05:07 +0900
Subject: [mysql 06301] 2バイト文字の境界を考慮したデータ格納の有無

おかもとと申します。

mysqld-3.23 を --with-charset=ujis オプション付きでコンパイルして
運用しています。OS は主に FreeBSD 4.3R です。

この時、例えば varchar(255) のカラムに2バイト日本語 EUC 文字(例えば
「あ」など)を128個、つまり 256 バイト分インサートすると、最後の
文字は前半1バイト分のみ格納されるようです。結果として、プログラムを
通じて取得したデータの最後の文字は化けておかしくなります。

これまで、mysql 側で、マルチバイト文字が格納バイト数を越えて境界の
文字が分割?される場合はその文字が削除されて(もしくは半角スペースなどで
自動置換されて)登録されていると思い込んでいたのですが、実際には
境界は一切考慮されていないのでしょうか?

みなさまはこの問題をどのように回避されていますでしょうか。

例えば varchar(64) などとした場合、プログラム側で 60 バイト
以下であればエラーを出すなど、常に数バイトほど余裕を持ってチェックを
行う、などの方法しか無いのでしょうか。

LIKE 演算子を用いた SELECT 文などを発行した場合はきちんと
2バイト文字の境界を考慮してくれているのにもかかわらず、
データ格納の際は境界が考慮されていない(ように見える)のが謎です。

どなたか、ご存じの方がいらっしゃいましたら、この辺りの
事情を簡単にでもご教授頂けませんでしょうか。よろしく
お願い致します。

=================================
   @@  Squeeze Lab.  @@
 mail : ryo@xxxxxxxxxx
 web  : http://www.sqz.jp
 written by : Okamoto RYO  :-)
=================================

[前][次][番号順一覧][スレッド一覧]

->    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]