質問

かを明確に定め、のようなものVARCHAR(45)るのはこれまでで最大45す。たのを覚えていたのを聞いたことがある人は数年前に人数を括弧ないの数字を、その人について説明してくれました。いても、非常に複雑であるかわからない、忘れています。

とはどう違うのCHAR、VARCHAR?かったので検索周辺のビットを見るCHARの最大の列のサイズであって使用したほうがいいでしょうがデータを固定サイズ及び使用VARCHAR場合はデータサイズが異なります。

だが、最大のサイズのカラムのすべてのデータはこのコラムではないのって使用したほうがいいでしょうがデータサイズが変化?特にわからない場合はビッグデータのサイズです。VARCHAR必要サイズを指定し(CHARは不要なのかもしれません。), なり面倒な?

役に立ちましたか?

解決

また、サイズを指定する必要があります CHAR. 。と CHAR, 、列の値には、指定したサイズを埋めるためにスペースが詰め込まれていますが、 VARCHAR, 、指定した実際の値のみが保存されます。

例えば:

CREATE TABLE test (
    char_value CHAR(10),
    varchar_value VARCHAR(10)
);

INSERT INTO test VALUES ('a', 'b');

SELECT * FROM test;

上記は「a」を選択します char_value と「b」 varchar_value

すべての値がほぼ同じサイズである場合、 CHAR 多くの場合、より少ないストレージスペースが必要なので、おそらくより良い選択です VARCHAR. 。それの訳は VARCHAR 値の長さと値自体の両方を保存しますが、 CHAR (固定サイズの)値を保存するだけです。

他のヒント

MySQLの文書 すい説明についての保管要件の各種データの種類です。

特に、文字列の長さをL、 CHAR(M) データ型取り上げたいのは(M×c)バイトが数バイトを文字...この文字セット。A VARCHAR(M) 取り上げたいのは(L+1)またはL+2)かどうかに応じてM <=255や>255です。

この変化により契約内容の変更をどのように長いことを期待したい文字列をすると、どのバリエーションに長さとなります。

※のdocumetationな影響を話し合うた文字セットの保管要件の VARCHAR タイプです。またを引用するので正確なものだと思うのがあります掛け文字列の長さの文字、全角、半角のものの保存に必要です。

Varcharやテキストのように、テーブルに1つの可変長さフィールドしかない場合、charとvarcharは実際には無関係になります。 MySQLは、すべてのCharをVarcharに自動的に変更します。

固定された長さ/サイズのレコードは追加のパフォーマンスを提供できますが、変数長さフィールドタイプは使用できません。その理由は、MySQLが次のレコードを見つける方が迅速かつ簡単になるためです。

たとえば、Table Limit 10 From Select *を実行する場合、MySQLは10番目のレコードのテーブルファイルをスキャンする必要があります。これは、10番目のレコードの終わりを見つけるまで、各レコードの終了を見つけることを意味します。ただし、テーブルに固定された長さ/サイズのレコードがある場合、MySQLはレコードサイズを知り、10 xバイトをスキップする必要があります。

列に少数の固定数のcharが含まれていることがわかっている場合は、charを使用し、それ以外の場合はvarcharを使用します。 char列は最大長にパッドで塗られています。

Varcharのオーバーヘッド(RDBMSに応じて4〜8バイト)がありますが、オーバーヘッド +実際のChar数のみを使用します。

それらが一定になることを知っている値については、たとえば電話番号、zipコードなどの場合、「char」を確実に使用することが最適です。

あなたが覚えていない複雑なものは、45が文字ではなくバイトを参照していることです。マルチバイト文字エンコードを使用している場合、それは同じではありません。 Oracleでは、バイトまたは文字を明示的に指定できます。

varchar2(45 BYTE)

また

varchar2(45 CHAR)

見る 列データ型のBYTEとCHARの違い

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top