2011-01-12 15 views
2

データベース内のほとんどのテーブルにはvarchar型のデータがあり、長さは36に設定されており、ネイティブに作成されたguidを埋めるために使用されます。 varcharはmysqlにguid値やその他の型を格納するのに最適なデータ型ですか? plz説明mysqlデータ型

+3

あなたのGUIDがどのように見えますか? – Tobias

答えて

1

これは良い質問です。私は多くの場所で、数字のように見えるさまざまな種類のIDに対してvarcharを使用することを見てきました。なぜ整数を使用しないのですか?まあ、私の経験では、3つの主要なケースがあります:

  1. 数字は大きすぎます。たとえば、32桁の数値(64ビットの符号なし整数の最大値は20桁)に対して整数(64ビットの大整数)を使用することはできません。

  2. 一部の数字には特殊な書式があります。たとえば、電話番号は+44(12)3456789のようになります。今や明らかに、+、(、)は数値の一部ではなく、数値なしで呼び出すことができますが、これは通常の形式なので、整数変数の場合はこれを保存することはできません。

  3. 今後、IDを変更して文字を含むことがあるため、最初から数百万件のレコードを変更する必要がないようにすることをお勧めします。

希望します。

2

PROCEDURE ANALYSEをチェックアウトすることができます。すでにテーブルにあるものに基づいて適切なデータ型を提案するのに役立ちます。

ここにはblog postがあります。これはPROCEDURE ANALYZEについてもお伝えしており、参考になる場合もあります。

0

つまり、varcharではすべての文字を使用できますが、数値データ型のようにオーバーフローすることは通常ありません。ですから、あなたのGUIDに大きな数値や数値が含まれていると予想されたら、あなたは金色です。

1

GUIDの長さが常に36でヌルでない場合は、VARCHARではなくCHARを使用してください。 VARCHARは各行の長さ接頭部を格納する必要があるため、スペースを節約します。

また、すべての列が固定長であると、データベースがより効率的に行をスキャンできるため、パフォーマンスが向上する場合もあります。

MySQL Reference Manual - The CHAR and VARCHAR Types

1

それはすべてあなたが「最も適した」によって何を意味するかに依存します。

varchar(36)の利点は簡単です。 GUIDをそのまま保存し、簡単に読み戻すことができます。

しかし、あなたが列を取り、その後、あなたはいくつかの選択肢があることをディスク領域の量を心配している場合:

VARCHAR(36)= 37バイト CHAR(36)= 36バイト チャー(

もしあなたがディスクスペースを心配しているなら、バイナリ(バイナリ文字列を得るためにハイフンを取り除いてunhexを)バイナリ(16) (16)はvarchar(36)よりはるかに優れています。

は、ここでのMySQLにGUIDからバイナリ(16)の文字列を取得する例を示します

unhex(replace(uuid(),'-',''))