ホームページ  >  記事  >  データベース  >  MySQL データ型の概要

MySQL データ型の概要

迷茫
迷茫オリジナル
2017-03-26 11:41:411158ブラウズ

MySQL で定義されるデータ フィールドのタイプは、データベースの最適化にとって非常に重要です。

MySQL は、数値、日付/時刻、文字列 (文字) タイプの 3 つのカテゴリに大別できます。 type

Int(N)

のNの意味は、init(5)のzerofillを定義しています。 int(10)と結合すると、表示幅が一致せず、一時テーブル

が表示される場合があります。は、表示幅が N であることを意味しますが、依然として 4 バイトのストレージを占有し、ストレージ範囲は変更されません。

>create table int_test(a int zerofill NOT NULL auto_increment, PRIMARY KEY (a));
>createtable int_test_4(a int(4) zerofill NOT NULL auto_increment, PRIMARY KEY (a));
>select * from int_test_4;
+------------+
|a          |
+------------+
|       0001 |
|       0002 |
|2147483648 |
+------------+
>select * from int_test;
+------------+
|a          |
+------------+
|0000000001 |
|0000000002 |
|2147483648 |
+------------+

浮動小数点数型について: 1) 可能な限り使用しないようにしてください。2) 浮動小数点数は使用できません。等号比較シナリオでは、enum を TINYINT に置き換えることをお勧めします

日付と時刻の型

時間の値を表す日付と時刻の型は、DATETIME、DATE、TIMESTAMP、TIME、YEAR です。

MySQL5.6はyear(2)をサポートしていません

日付型に関する注意事項

Timestamp、datatimeはMySQL5.6.5からの現在時刻への自動更新をサポートしています: current timestamp
Date変換 : Cast (datatime_col as DATE)

>select now()+0;

5.6 をサポート

>select now(4),MICROSECOND(now(4));
+--------------------------+---------------------+
|now(4)                   |MICROSECOND(now(4)) |
+--------------------------+---------------------+
|2016-04-16 08:50:01.6589 |             658900 |
+--------------------------+---------------------+

timestamp 5.6.6 以降は null をサポートします

datetime はタイムスタンプを置き換えることをお勧めします

String 型

character 文字列型は、CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM、SET を指します。このセクションでは、これらの型がどのように機能するか、およびそれらをクエリで使用する方法について説明します。 -length タイプは次のとおりです。 char(M) タイプのデータ列では、各値が M バイトを占めます。特定の長さが M より小さい場合、MySQL は右側にスペース文字を追加します。 (パディングスペース文字は検索操作中に削除されます。) varchar(M) タイプのデータ列では、各値はその長さを記録するのに十分なバイトと 1 バイトのみを占めます (つまり、合計の長さは L+1 バイトです) ) varchar は可変長文字列を格納します。255 バイト未満の場合、長さは 65532 バイト (すべての列の合計) です。は固定長で保存され、読み取り時に末尾のスペースは切り捨てられます。最大長は 255 文字です。1) CHAR (M) の意味:

実際に割り当てられる長さは、M*文字エンコード長 = ストレージです。スペース

例: 255 文字の漢字が 3 バイトを占めます

255*3 = 765。合計 765 バイト

2) varchar(N) の N の意味 N 文字の最大格納量。 varchar(5) と varchar(200) は hello を格納するために同じスペースを占有しますが、後者はソート時により多くのメモリを消費します。これは、col による

ord

er が fix_length を使用して列の長さを計算するためです (同じことがメモリ エンジンにも当てはまります) )

例:

varchar(200)utf8 で占有されているバイト数

200*3+ 2

varchar(64) utf8

64*3=192<255

192+1=193

提案:

MySQL は通常 innodb エンジンとして使用されます。 innodb エンジンは本質的に可変長ストレージです:

行が保存されます:

trx_id、row-id、rollback、filed_pointer、null-flag、 filed1,....

innodb ストレージ エンジンは、MyISAM のようなヒープ テーブルに対して高速な varchar


char を推奨します

計算例

実際の長さの計算を説明するために 2 つの例を挙げます。

a)

createtable t4(c varchar(N)) charset=gbk;

として定義されているように、テーブルに varchar 型が 1 つだけある場合、ここでの N の最大値は (65535-1-2)/ となります。 2= 32766。

実際の行ストレージは 2 バイト目から始まるため、1 を減算する理由です。

2 で除算する理由は、varchar ヘッダーの 2 バイトが長さを表すためです。文字コードはgbkです。

b) テーブルが

createtable t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;

として定義されている場合、ここでの N の最大値は (65535-1-2) となります。 - 4-30*3)/3=21812

1を引くと2を引くのは上の例と同じです;

4を引く理由はint型cが4バイトを占めるためです;

30を引く理由* 3 は char( 30) 90 バイトを占め、エンコードは utf8 です。

以上がMySQL データ型の概要の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。