3

CHAR と VARCHAR の違い (一方は固定長、もう一方は可変長) を理解しています。また、行内のすべてのフィールドが固定長である場合、テーブルのパフォーマンスは一般的に向上します。

ただし、VARCHAR(500) などの長さを VARCHAR に指定すると、その行は固定長として保持されるのでしょうか?

コンテキストとして、50 列 (ほとんどが TINYINT) のクリーンなテーブルがありますが、それぞれ最大 500 文字を格納する必要があるため、このテーブルには VARCHAR として 2 つの列が必要です。正確な長さはユーザーの入力に左右されるため、不明です。

追加の条件として、これらの VARCHAR フィールドを別の参照テーブルに入れたくありません。これは、不要な結合が生成され、予想されるクエリ パターンに効率的に適合しないためです。

どんな助けでも大歓迎です。ありがとう。

4

2 に答える 2

6

そうでなければ、そもそも可変長とは呼ばれません。単純に行うことは、その列に格納できる文字列の最大長に上限を設定することです。他のより信頼できるデータベース エンジンでは、文字列が最大長よりも長いとエラーが発生しますが、MySQL は余分なデータを切り捨てるだけです。

mysql> create table t (a varchar(3));
Query OK, 0 rows affected (0.00 sec)

mysql> insert into t values ('abc'), ('defgh');
Query OK, 2 rows affected, 1 warning (0.00 sec)
Records: 2  Duplicates: 0  Warnings: 1

mysql> select * from t;
+------+
| a    |
+------+
| abc  |
| def  |
+------+
2 rows in set (0.00 sec)
于 2010-01-06T18:00:01.920 に答える
1

いいえ、最大サイズを設定するだけです。

CHAR および VARCHAR 型は、格納する最大文字数を示す長さで宣言されます。たとえば、CHAR(30) は 30 文字まで保持できます。

于 2010-01-06T17:59:30.360 に答える