Mysql データ型には、BOOL、TINY INT、INT、BIG INT、FLOAT、DOUBLE、DECIMAL、CHAR、VARCHAR、TINY TEXT、TEXT、Date、DateTime、TimeStamp、 Year などがあります。
1. MySQL データ型
主に次の 5 つのカテゴリが含まれます:
整数型: BIT、BOOL、TINY INT、SMALL INT、MEDIUM INT、INT、BIG INT
浮動小数点型: FLOAT、DOUBLE、DECIMAL
文字列型: CHAR、VARCHAR、TINY TEXT、TEXT、MEDIUM TEXT、LONGTEXT、 TINY BLOB、BLOB、MEDIUM BLOB、LONG BLOB
日付型: Date、DateTime、TimeStamp、Time、 Year
その他のデータ型: BINARY、VARBINARY、ENUM、SET、Geometry、Point、 MultiPoint、LineString、MultiLineString、Polygon、GeometryCollection など
1. 整数型
MySQL データ型
意味 (符号付き)
tinyint(m)
1 バイト範囲 (-128~127)
#smallint (m)
2 バイト範囲 (-32768~32767)
mediumint(m)
3 バイト範囲 (-8388608~8388607)
int(m)
4 バイト範囲 (-2147483648~2147483647)
bigint(m)
8 バイト範囲 (-9.22*10 の 18 乗)
##数値範囲 符号なしを加算した場合、最大値は 2 倍になります。 tinyint unsigned の値は (0~256) です。
int(m) の m は、SELECT クエリ結果セットの表示幅を表します。実際の値の範囲や表示幅には影響しません。この m の用途がわかりません。
2. 浮動小数点型 (float および double)
##MySQL データ型
意味
float(m,d)
単精度浮動小数点型 8 ビット精度 (4 バイト) m 総数、d 小数点以下
#double(m,d)
倍精度浮動小数点型 16 ビット精度 (8 バイト) m 合計数、d 小数点以下桁数
##仮定しますフィールドは float(6,3) として定義されており、数値 123.45678 が挿入された場合、データベースに格納される実際の数値は 123.457 ですが、合計数値は実際の数値、つまり 6 桁の影響を受けます。整数部分の最大値は 3 桁です。数値 12.123456 を入力した場合、格納される数値は 12.1234 になります。12.12 を入力した場合、格納される数値は 12.1200 になります。
3、固定小数点数値
浮動小数点型はデータベースに近似値を保存しますが、固定小数点型はデータベースに正確な値を保存します。
decmal(m,d) パラメータ m
4.文字列 (char、varchar、_text)
##MySQL データ型
意味
char(n)
固定長、最大 255 文字
varchar(n)
固定長、最大 65535 文字
tinytext
可変長、最大 255 文字
text
可変長さ、最大 65535 文字
mediumtext
可変長、最大 2 の 24 乗 - 1 文字
longtext
可変長、最大 2 の 32 乗 - 1 文字
char および varchar:
1.char(n) 保存される文字数が n 未満の場合、文字の後にスペースが追加され、クエリ時にスペースが削除されます。したがって、char 型で格納される文字列の末尾にスペースを含めることはできません。また、varchar はこれに限定されません。
2.char(n) 固定長、char(4) は格納される文字数に関係なく 4 バイトを占有します。varchar は実際に格納される文字数 (n< =255) の 1 バイトまたは 2 バイトです。 bytes (n>255),
したがって、varchar(4)、3 文字を格納すると、4 バイトが占有されます。
3.Char型の文字列取得速度はvarchar型に比べて高速です。 varchar と text:
1.varchar は n を指定できますが、text は指定できません。varchar の内部ストレージは、実際に格納される文字数、1 バイト (n<=255) または 2 バイト (n>) です。 255)、テキストは実際の文字数であり、2 バイト
です。
2. テキスト タイプにはデフォルト値を設定できません。
3.varchar はインデックスを直接作成できますが、text ではインデックスを作成するための最初の文字数を指定する必要があります。 varchar のクエリ速度は text のクエリ速度よりも速いため、インデックスを作成するときに text のインデックスは機能しないようです。
5. バイナリ データ (_Blob)
1. _BLOB と _text は異なる方法で保存されます。_TEXT はテキスト モードで保存されます。英語の保存では大文字と小文字が区別されます。 while _Blob 大文字と小文字は関係なく、バイナリ形式で格納されます。
2._BLOB に格納されたデータは全体としてのみ読み出すことができます。
3._TEXT は文字セットを指定できますが、_BLO は文字セットを指定する必要はありません。
#6. 日付と時刻の型
MySQL データ型
意味
date
日付'2008-12-2'
時刻
時刻'12:25:36'
datetime
日付時刻 '2008-12-2 22:06:44'
タイムスタンプ
自動storage レコード変更時刻
#フィールドをタイムスタンプとして定義すると、他のフィールドが変更されると、このフィールドの時刻データが自動的に更新されるため、このデータ型のフィールドはレコードが最後に変更された時刻を保存できます。
データ型属性
MySQL キーワード
意味
NULL
データ列には NULL 値を含めることができます
##NOT NULL ##データ列には NULL 値を含めることはできません
#DEFAULT デフォルト値
PRIMARY KEY 主キー
AUTO_INCREMENT 自動インクリメント、整数型に適しています。
UNSIGNED Unsigned
CHARACTER SET name 文字セットを指定します。
2. MYSQL データ型の長さと範囲
各データ型とバイト長のリスト:
データ型
バイト長
範囲または使用法
Bit
1
符号なし [0,255]、符号付き [-128,127] 、天元ブログ注: BIT および BOOL ブール型は両方とも 1 バイトを占有します。
#TinyInt 1 Integer [0,255]
SmallInt 2 符号なし [0,65535]、符号付き [-32768,32767]
MediumInt 3 符号なし[0,2^24-1]、符号付き[-2^23,2^23-1]]
#Int 4 符号なし [0,2^32-1]、符号付き [-2^31,2^31-1]
#BigInt
8
符号なし [0,2^64-1]、符号付き [-2^63 ,2^63 -1]
Float(M,D )
4
単精度浮動小数点数。 Tianyuan Blog は、ここでの D は精度であることを思い出させます。D<=24 の場合、それはデフォルトの FLOAT です。D>24 の場合、自動的に DOUBLE 型に変換されます。
Double(M,D)
8
倍精度浮動小数点。
Decimal(M,D)
M 1 または M 2
アンパック浮動小数点数。使用法は FLOAT および DOUBLE と同様です。Tianyuanこのブログでは、ASP で Decimal データ型が使用されている場合、データベースから直接読み取られた Decimal を操作前に Float または Double 型に変換する必要がある可能性があることを思い出させます。
#Date
3 は、YYYY-MM-DD の形式で表示されます (例: 2009-07-19#) ##Date Time
8
は、YYYY-MM-DD HH:MM:SS の形式で表示されます。例: 2009-07-19 11: 22:30
TimeStamp
4
は YYYY-MM-DD の形式で表示されます (例: 2009-07-19#)
##Time 3
は、HH:MM:SS の形式で表示されます。例: 11:22:30
##年
1
は YYYY の形式で表示されます。例: 2009
Char(M)
MM
固定長文字列。
#VarChar(M)MM
可変長文字列、M<=255 ## が必要ですBinary(M) MM Char のようなバイナリ ストレージ。固定長の不足部分を挿入し、0 VarBinary( M ) M VarChar に似た可変長バイナリ ストレージ。パディングなしの固定長が特徴です。0 Tiny Text 最大:255 大文字と小文字を区別しない テキスト 最大:64K 大文字と小文字を区別しない 中テキスト 最大: 16M 大文字と小文字を区別しない 長文 最大: 4G 大文字と小文字を区別しない ##TinyBlob 最大:255#大文字と小文字を区別する Blob最大:64K 大文字と小文字を区別します MediumBlob最大:16M 大文字と小文字を区別します ##LongBlob最大:4G 大文字と小文字が区別されます Enum 1 または 2 最大 65535 個の異なる列挙値 Set 最大 8 最大 64 個の異なる値 ジオメトリ ポイント ##LineString ##Polygon ##マルチポイント MultiLineString ##マルチポリゴン ジオメトリコレクション 3. 使用上のヒント 1. データ型を指定する場合、一般に小さいサイズの原則が採用されます。たとえば、TINY INT が使用できる場合は、INT を使用しないことが最善です。 FLOAT 型は使用できますが、DOUBLE 型は使用しないほうがよいため、特に大量のデータ量のテスト条件下で MYSQL の動作効率が大幅に向上します。
2. データ テーブルを複雑に設計する必要はありません。機能モジュールを区別したほうが、後のメンテナンスに便利です。ごちゃ混ぜのデータ テーブルを表示する場合は注意してください。
#3 . データ テーブルとフィールドの分類 ネーミングもスキルです
4. データ テーブルの構造を設計する前に、それがあなたの部屋であると想像してください。結果はより合理的で効率的になるかもしれません
5. データベースの最終設計結果は次のようにする必要があります。効率と拡張性のトレードオフです。どちらか一方を優先するのは不適切です。
データ型選択の基本原則 前提条件:適切なストレージ エンジンを使用してください。
選択原則: 選択したストレージ エンジンに基づいて、適切なデータ型を選択する方法を決定します。
次の選択方法はストレージ エンジンによって分類されています:
MyISAM データ ストレージ エンジンとデータ列: MyISAM データ テーブル。固定長 (CHAR) データ列を使用するのが最適です。長さの変数データ列 (VARCHAR) の代わりに。 MEMORY ストレージ エンジンとデータ列: MEMORY データ テーブルは現在、固定長データ行ストレージを使用しているため、CHAR 列と VARCHAR 列のどちらを使用するかは関係ありません。どちらもCHAR型として扱われます。 InnoDB ストレージ エンジンとデータ列: VARCHAR 型を使用することをお勧めします。
InnoDB データ テーブルの場合、内部行ストレージ形式は固定長列と可変長列を区別しません (すべてのデータ行はデータ列値を指すヘッド ポインターを使用します)。本質的には、固定長 CHAR 列を使用することが、可変長 VARCHAR 列を使用するよりも必ずしも簡単であるとは限りません。したがって、主なパフォーマンス要因は、データ行によって使用される合計ストレージです。 CHAR は VARCHAR よりも平均して多くのスペースを占有するため、処理する必要があるデータ行の合計ストレージとディスク I/O を最小限に抑えるには、VARCHAR を使用することをお勧めします。
固定長データ列と可変長データ列について話しましょう。
char は varchar に似ています CHAR 型と VARCHAR 型は似ていますが、保存方法と取得方法が異なります。また、最大長と末尾のスペースが保持されるかどうかという点でも異なります。保存または取得中に大文字と小文字の変換は実行されません。
次の表は、さまざまな文字列値を CHAR(4) 列と VARCHAR(4) 列に保存した結果を示し、CHAR と VARCHAR の違いを示しています。
Value CHAR(4) ストレージ要件 VARCHAR(4) ストレージ要件 '' ' ' 4 バイト '' 1 バイト ' ab' 'ab ' 4 バイト 'ab ' 3 バイト 'abcd ' 'abcd' 4 バイト 'abcd' 5 文字 セクション 'abcdefgh ' 'abcd' 4 バイト 'abcd' 5 バイト 上記の表の最後の行の値は、厳密モードが使用されていない場合にのみ適用されることに注意してください ; MySQL が厳密モードで実行されている場合、列の長さ を超える値は、 は保存されず、エラーが発生します。 CHAR(4) 列と VARCHAR(4) 列から取得される値は、取得時に CHAR 列から末尾のスペースが削除されるため、必ずしも同じではありません。次の例は、この違いを示しています。
ca79d80abc39e776c1eb0fabbecd1076text と blob
text フィールド タイプと blob フィールド タイプを使用する場合は、データベースのパフォーマンスをより有効に活用するために、次の点に注意してください。 ①BLOB 値と TEXT 値は、特に多数の削除または更新操作が実行される場合、それ自体の問題も引き起こす可能性があります。この種の値を削除すると、データ テーブルに大きな「穴」が残ります。将来これらの「穴」を埋めるレコードの長さは異なる可能性があります。パフォーマンスを向上させるために、定期的に OPTIMIZE TABLE 関数を使用してデフラグすることをお勧めします。
②合成(合成)インデックスを使用します。合成インデックス列は場合によっては便利です。 1 つの方法は、他の列の内容に基づいてハッシュ値を作成し、この値を別のデータ列に格納することです。その後、ハッシュ値を取得してデータ行を見つけることができます。ただし、この手法は完全一致クエリにのみ使用できることに注意してください (ハッシュ値は < または >= などの範囲検索演算子には役に立ちません)。 MD5() 関数を使用してハッシュ値を生成することも、SHA1() または CRC32() を使用することも、独自のアプリケーション ロジックを使用してハッシュ値を計算することもできます。数値ハッシュ値は非常に効率的に保存できることに注意してください。同様に、ハッシュ アルゴリズムによって末尾にスペースが含まれる文字列が生成される場合は、末尾のスペースの削除の影響を受けるため、その文字列を CHAR または VARCHAR 列に格納しないでください。 合成ハッシュ インデックスは、BLOB または TEXT データ列に特に役立ちます。ハッシュされた識別子の値を使用した検索は、BLOB 列自体を検索するよりもはるかに高速です。 ③不必要な場合は、大きな BLOB 値または TEXT 値を取得しないでください。たとえば、制約としての WHERE 句が必要なデータ行のみを検索することが確実でない限り、SELECT * クエリは良いアイデアではありません。そうしないと、目的もなくネットワーク経由で大量の値が送信される可能性があります。これは、BLOB または TEXT 識別子情報を合成インデックス列に格納するのに役立つ例でもあります。インデックス列を検索して必要なデータ行を特定し、条件を満たすデータ行から BLOB または TEXT 値を取得できます。 ④ BLOB 列または TEXT 列を別のテーブルに分割します。環境によっては、元のデータ テーブルのデータ列を固定長の行形式に変換できる場合、これらのデータ列を 2 番目のデータ テーブルに移動することが合理的である場合があります。これにより、メインテーブルの断片化が軽減され、固定長データ行のパフォーマンス上の利点が得られます。また、ネットワーク上で大量の BLOB または TEXT 値を送信せずに、メイン データ テーブルに対して SELECT * クエリを実行することもできます。 浮動小数点数と固定小数点数
全員の注意を引くために、浮動小数点数と固定小数点数を紹介する前に例を見てもらいましょう。上の例では、列 c1 の値が 131072.32 から 131072.31 に変更されたことがわかりますが、これは浮動小数点数の不正確さが原因です。
mysql では、float と double (または real) は浮動小数点数であり、Decimal (または Numberic) は固定小数点数です。
固定小数点数に対する浮動小数点数の利点は、長さが確実な場合、浮動小数点数はより大きなデータ範囲を表現できることですが、欠点は、精度の問題が発生する可能性があることです。浮動小数点数と固定小数点数を将来応用する場合、誰もが次の点を覚えておく必要があります:
浮動小数点数にはエラーの問題があります。
はエラーの影響を受けやすいです。データは固定小数点数で表現または保存する必要があります。
プログラミングで浮動小数点数を使用する場合は、エラーの問題に特別な注意を払い、浮動小数点数を避けるように努める必要があります。小数点比較;
浮動小数点数には注意してください いくつかの特殊な値の処理。
以上がmysqlのデータ型は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
2023-04-26 17:59:18
2023-04-26 17:47:48
2023-04-26 17:41:42
2023-04-26 17:37:05
2023-04-26 17:31:25
2023-04-26 17:27:32
2023-04-25 19:57:58
2023-04-25 19:53:11
2023-04-25 19:49:11
2023-04-25 19:41:54