mysqlの数値タイプ

4959 ワード

MySQLはすべての標準SQL数値データ型をサポートします.これらのタイプには、厳密な数値データ型(INTEGER、SMALLINT、DECIMAL、NUMERIC)、および近似数値データ型(FLOAT、REAL、およびDOUBLE PRECISION)が含まれる.キーワードINTはINTEGERの同義語であり、キーワードDECはDECIMALの同義語である.BITデータ型はビットフィールド値を保存し、MyISAM、MEMORY、InnoDB、BBBテーブルをサポートする.SQL標準の拡張として、MySQLは整数タイプTINYINT、MEDIUMINT、BIGINTもサポートしています.次の表は、必要な各整数タイプの格納と範囲を示しています.
を選択します.
バイト
最小値
最大値
 
 
(符号付き/符号なし)
(符号付き/符号なし)
TINYINT
1
-128
127
 
 
0
255
SMALLINT
2
-32768
32767
 
 
0
65535
MEDIUMINT
3
-8388608
8388607
 
 
0
16777215
INT
4
-2147483648
2147483647
 
 
0
4294967295
BIGINT
8
-9223372036854775808
9223372036854775807
 
 
0
18446744073709551615
MySQLはまた、このタイプのキーワードの後ろの括弧内で整数値を指定する表示幅(例えば、INT(4))を選択することをサポートします.このオプションの表示幅は、指定された列幅よりも幅が小さい値を表示するときに左側から幅を満たすように規定されています.表示幅は、カラムに保存できる値の範囲を制限するものではなく、カラムの指定幅を超える値の表示を制限するものではありません.オプションの拡張属性ZEROFALと組み合わせて使用する場合、デフォルトで追加されたスペースはゼロに置き換えられます.例えば、INT(5)ZEROFALと宣言された列については、値4が00004と検索される.整数列に表示幅を超える値を保存すると、MySQLが複雑な結合のテンポラリ・テーブルを生成するときに問題が発生することに注意してください.これらの場合、MySQLはデータが元の列幅に適していると信じているためです.すべての整数タイプには、オプション(非標準)属性UNSIGNEDがあります.カラム内で負以外の数だけを許可し、そのカラムに大きな上限値範囲を必要とする場合は、符号なし値を使用します.浮動小数点および定点タイプはUNSIGNEDであってもよい.負の値がカラムに保存されないようにする同数のタイプ.ただし、整数タイプとは異なり、カラム値の上限は変更されません.数値列にZEROFALを指定すると、MySQLはその列にUNSIGNED属性を自動的に追加します.浮動小数点列タイプの場合、MySQLでは単一の精度値が4バイト、2つの精度値が8バイト使用されます.FLOATタイプは、近似数値データ型を表すために使用される.SQL規格では、キーワードFLOATの後ろの括弧内でビット指定精度を選択できます(ただし、指数範囲ではありません).MySQLでは、ストレージサイズの決定にのみ使用できるオプションの精度規定もサポートされています.0〜23の精度は、FLOAT列の4バイトの単一精度に対応する.24~53の精度は、DOUBLE列の8バイトのデュアル精度に対応します.MySQLでは、FLOAT(M,D)またはREAL(M,D)またはDOUBLE PRECISION(M,D)の非標準構文を使用できます.ここで、「(M,D)」は、この値が合計Mビット整数であることを示し、ここで、Dビットは小数点以下に位置する.例えば、FLOAT(7,4)として定義された列は、−99.99999として表示され得る.MySQLは値保存時に四捨五入するため、FLOAT(7,4)列に999.00009を挿入すると、999.0001と近似します.MySQLはDOUBLEをDOUBLE PRECISION(非標準拡張)の同義語と見なしている.MySQLはまたREALをDOUBLE PRECISION(非標準拡張)の同義語と見なし、SQLサーバモードがREAL_を含まない限りAS_FLOATオプション.最大の移植性を保証するために、近似数値データ値を使用して格納する必要があるコード#コード#は、精度やビット数を規定せずにFLOATまたはDOUBLE PRECISIONを使用する必要があります.DECIMALとNUMERICタイプはMySQLで同じタイプとみなされます.通貨データなど、正確な精度でなければならない値を保存するために使用されます.このタイプのカラムを宣言すると、精度とスケールを指定できます(通常は).例えば、
salary DECIMAL(5,2)
この例では、5は精度、2はスケールである.精度は保存値の主な桁数、スケールは小数点以下で保存できる桁数を表します.MySQL 5.1にDECIMALとNUMERICの値をバイナリ形式で保存します.標準SQLでは、salary列に5桁の整数ビットと2桁の小数で値を保存する必要があります.従って、この場合salary列に保存できる値の範囲は−99.99から99.999までである.標準SQLでは、構文DECIMAL(M)はDECIMAL(M,0)と等価です.同様に,構文DECIMALはDECIMAL(M,0)に等価であり,計算によりMの値を決定することができる.MySQL 5.1では、DECIMALとNUMERICデータ型の変数形式がサポートされています.Mのデフォルト値は10です.DECIMALまたはNUMERICの最大桁数は65ですが、特定のDECIMALまたはNUMERIC列の実際の範囲は、特定の列の精度またはスケールによって制約されます.このような列に割り当てられた値の小数点以下の桁数が指定したスケールの許容範囲を超えた場合、値はそのスケールに変換されます.(具体的な動作はオペレーティングシステムに関係するが、一般的な結果は許容ビット数に切り取られる).BITデータ型は、ビットフィールド値を保存するために使用することができる.BIT(M)タイプは、Mビット値を記憶することを可能にする.Mレンジは1~64です.ビット値を指定するには、b'value'記号を使用します.valueは0と1で記述されたバイナリ値です.例えば、b'111'およびb'10000000'は、それぞれ7および128を表す.9.1.5節、「ビットフィールド値」を参照.BIT(M)カラムに割り当てられた値の長さがMビットより小さい場合は、値の左側に0で埋めます.例えば、BIT(6)列に値b'101'が割り当てられ、その効果は割り当てb'000101'と同じである.1つの数値列に列の許容範囲を超えた値を保存する場合、MySQLのアクションは、この時点で有効なSQLモードに依存します.モードが設定されていない場合、MySQLは範囲の対応するエンドポイントに値を切り取り、削減された値を保存します.ただし、モードがtraditional(「厳格モード」)に設定されている場合、範囲外の値は拒否され、エラーが表示され、SQL規格に従って挿入できません.5.3.2節、「SQLサーバーモード」を参照.INT列がUNSIGNEDの場合、列の範囲のサイズは同じですが、端点は0と4294967295になります.-9999999999と9999999999を保存しようとすると、カラムに非厳密モードで保存される値は0と4294967296です.浮動小数点または定点列に割り当てられた値が、指定された(またはデフォルトの)精度およびスケールで指定された範囲を超えた場合、MySQLは、範囲の対応する端点を表す値を非厳格モードで保存します.MySQLがさぎょう厳格モードでない場合、ALTER TABLE、LOAD DATA INFILE、UPDATE、および複数行INSERT文については、切り抜きによる変換が警告として報告されます.MySQLが厳格なモードで動作している場合、これらの文は失敗し、一部またはすべての値はトランザクション・テーブルまたはその他の要因によって挿入または変更されません.詳細については、5.3.2節、「SQLサーバーモード」を参照してください.