プロが教える店舗&オフィスのセキュリティ対策術

MySQL4.0.27です。
最近、MySQLの勉強を始めました。
PHPと合わせて、試行錯誤を繰り返していますが、どうしてもカラム型が理解できずにいます。
いろいろ調べましたがよくわかりませんでしたので、教えてください。

例えば、VARCHAR(100)というカラム型を設定すると、全角文字が33文字と半角文字が1文字入るようです。
次に、TINYTEXT(100)とすると、上記よりもっと長く格納できるようです。(文字数は未確認)
他にもBLOBやBINARYなどたくさんあり、どれを使うべきかわかりません。

以下のような場合、どの型をどれくらいの長さで設定するのが一般的なのでしょうか?
・住所などのように、比較的短いことが予想される文字列
・メッセージなどのように、数十文字から数千文字までが予想される文字列
・整数部3桁、小数部20桁程度の小数点数
上記3点について、一般的な型と長さを教えてください。

A 回答 (1件)

MySQL 4.0.27とのことですが、MySQL 4.1以降に上げることはできないでしょうか?


MySQL 4.1やMySQL 5.0で、多くの機能追加や一部の仕様変更があります。

>例えば、VARCHAR(100)というカラム型を設定すると、全角文字が33文字と半角文字が1文字入る

VARCHAR(n)は、MySQL 4.0まではnバイトまで格納できました。MySQL 4.1以降では、1バイト文字・2バイト文字に関係なく、n文字まで格納できるように仕様変更されています。

>TINYTEXT(100)とすると、上記よりもっと長く格納できるようです

TINYTEXTには、(100)といった指定はできないはずです。TEXT(100)の誤りでしょうか?(n)を指定した場合、「指定された値を格納できる十分な領域を確保する」となっており、4KBや8KBくらいは最低でも確保されるのかも知れません。

>他にもBLOBやBINARYなどたくさんあり

BLOBは、画像データ等を格納することを想定したデータ型です。

>住所などのように、比較的短いことが予想される文字列

文字数が固定ならchar(n)、文字数が可変で255文字までならvarchar(n)といった感じです。
インデクスを付けたり、order byやgroup byを指定する場合、MySQL 4.0くらいだと、長さ制限があったように思います。
その後のバージョンでこれら制限のいくつかは緩和されましたが、やはりオーバヘッドがあると思います。

>メッセージなどのように、数十文字から数千文字までが予想される文字列

上述のように、検索の条件にしたり、order byやgroup byで指定される可能性のある列は、なるべくvarcharにした方が良いでしょう。
そういった操作をすることがなく、最大長の予測が困難な場合は、textを選択するしかありません。

>整数部3桁、小数部20桁程度の小数点数

小数点以下が20桁というのは、あまり一般的なデータとは言えないと思いますが?どういったデータなのでしょうか?

小数部も高精度で維持する必要があるなら、decimalを使うしか選択肢はありません。dec(23,20)といった指定になります。

詳しくは、マニュアルの以下の記述を、参照してみてください。
http://dev.mysql.com/doc/refman/4.1/ja/column-ty …
http://dev.mysql.com/doc/refman/4.1/ja/silent-co …
    • good
    • 0
この回答へのお礼

丁寧なご回答ありがとうございます。
DBのバージョンですが、レンタルサーバーなので、バージョンを換えるには契約しなおすしかないかもしれません。(未調査)
さらにこの契約で、別のシステムも稼働中ですので、あまり動かしたくないのが本音です。
ですので、しばらくは4.0で利用することになります。

TINYTEXT(100)は当方の間違いでした。(^^ゞ
今回は、VARCHAR(n)とTEXTを使おうと思います。(TEXTは、コメント部なので、ORDER BYなどは不要です。)

小数点数は、地図データの緯度経度を格納する予定です。
小数第15位くらいまでは必要のようです。
こちらはDECIMALを使おうと思います。整数部は3桁以上にはなりませんので、(23,20)でいけると思います。

ご提示いただいたマニュアルも読んだのですが、日本語が難しく苦労してます。(^^ゞ

お礼日時:2007/10/08 17:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!