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

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]