無料PHPプログラム

MySQL 5.1 リファレンスマニュアル :: 10 データタイプ :: 10.2 数値タイプ
« 10.1.4 データタイプデフォルト値

10.3 日付と時刻タイプ »
Section Navigation      [Toggle]
  • 10 データタイプ
  • 10.1 データタイプ概要
  • 10.2 数値タイプ
  • 10.3 日付と時刻タイプ
  • 10.4 文字列タイプ
  • 10.5 データタイプが必要とする記憶容量
  • 10.6 カラムに適したタイプの選択
  • 10.7 その他のデータベースエンジンのデータタイプの利用

10.2. 数値タイプ

MySQLは標準SQLの全ての数値データタイプをサポートします。これらのタイプは、概数値データタイプ(FLOAT、REAL、DOUBLE PRECISION)だけでなく、真数値データタイプ(INTEGER、SMALLINT、DECIMAL、 NUMERIC)を含みます。キーワード INT は INTEGER のシノニムで、キーワード DEC は DECIMAL のシノニムです。数値タイプが必要とする記憶容量に関しては、項10.5. 「データタイプが必要とする記憶容量」を参照してください。

BIT データタイプはビットフィールド値を格納します。これは、MyISAM、MEMORY、 InnoDB テーブルに対してサポートされています。

SQL標準への拡張として、MySQLは TINYINT、MEDIUMINT、 BIGINT などの整数タイプもサポートします。次のテーブルには、各整数タイプが必要とする容量と値の範囲が示されています。

タイプ バイト 最小値 最大値
? ? (Signed/Unsigned) (Signed/Unsigned)
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))。この表示幅オプションは、カラムに指定された幅よりも小さい幅の整数値を表示する際に左側をスペースで埋めるために使用されます。

この表示幅は、カラムに格納する事ができる値の範囲も、カラムに指定された幅を超える値の表示される桁数も制限しません。例えば、SMALLINT(3) として指定されたカラムは、通常の -32768 から 32767 の SMALLINT 範囲を持ち、そして、3文字で許容された範囲外の値は3文字以上の文字を使って表示されます。

オプションの拡張属性 ZEROFILL が続いて指定された時は、デフォルトはスペースである埋め込み文字はゼロで置き換えられます。例えば、INT(5) ZEROFILL として宣言されたカラムには、4 の値は 00004 として表示されます。もし整数カラムの中に表示幅よりも大きい値を格納すると、MySQLが複雑なJOINに対してテンポラリテーブルを生成した時に問題が発生するという事に注意してください。これはMySQLは、データは元のカラム幅に収まると仮定するからです。

注:ZEROFILL 属性はカラムが式や UNION クエリに含まれている時は無効になります。

全ての整数タイプは、任意の(標準ではない) 拡張子である UNSIGNED を持つ事ができます。正数だけをコラムの中で許可し、大きい上位数値範囲が必要な時には符号無しの値を利用できます。例えば、INT カラムが UNSIGNED の時、カラム範囲のサイズは同じですが、その終点は -2147483648 と 2147483647 から、0 と 4294967295 までシフトします。

浮動小数点と固定小数点も UNSIGNED になり得ます。整数タイプと同じように、この拡張子は負の値がカラムの中に格納されるのを防ぎます。しかし整数タイプとは違い、カラム値の上限は同じままです。

数値コラムに対して ZEROFILL を指定すると、MySQLは自動的にそのカラムに UNSIGNED 属性を追加します。

浮動小数点タイプでは、MySQLは単精度値には4バイトを使用し、倍精度値には8バイト使用します。

FLOAT と DOUBLE データタイプは、近似数値データ値を表す為に利用されます。FLOAT には、SQL基準は、括弧に囲まれたキーワード FLOAT に続くビットの中で精度の任意仕様 (指数の範囲ではない) を許容します。MySQLはまた、この任意精度仕様もサポートしますが、その精度値は格納サイズを決定する為だけに使用されます。0から23の精度は、4バイトの単精度 FLOAT カラムをもたらします。24から53の精度は、8バイトの倍精度 DOUBLE カラムをもたらします。

MySQLは標準ではない構文を許容します。FLOAT(M,D)、REAL(M,D) またば DOUBLE PRECISION(M,D)。ここで、「(M、D)」 が意味するのは、値は合計で M 桁まで格納でき、そのうちの D 桁は小数点以下である という事です。例えば、FLOAT(7,4) として定義されたカラムは、表示された時には -999.9999 の様に見えます。MySQLは、値を格納する時に丸めを行いますので、FLOAT(7,4) カラムに 999.00009 を挿入すると、おおよその結果は 999.0001 になります。

MySQLは DOUBLE を DOUBLE PRECISION (標準ではない拡張子)の同義語として扱います。MySQLはまた、REAL_AS_FLOAT SQLモードが有効でない限り REAL を DOUBLE PRECISION (標準ではない変動)の同義語として扱います。

最大ポータビリティの為に、おおよその数値データ値のコードを必要とする格納は、精度仕様や桁数の無いFLOAT か DOUBLE PRECISION を利用する必要があります。

DECIMAL と NUMERIC データタイプは、真数値データ値を格納するために利用されます。MySQLでは、NUMERIC は DECIMAL として実行されます。これらのタイプは、金銭データ等の正確な精度を必要とする物を格納するために利用されます。

MySQL 5.1 は、DECIMAL と NUMERIC 値をバイナリフォーマットに格納します。MySQL 5.0.3バージョン以前では、それらは文字列として格納されていました。章?22. 精密計算を参照してください。

DECIMAL や NUMERIC カラムを宣言する時は、精度とスケールを指定する事ができます。(そして実際に通常は指定しています。) 次がその例です。

salary DECIMAL(5,2)

この例の中では、5 は精度で、2 がスケールです。精度は、その値に格納された有効な桁数を表し、スケールは小数点以下に格納できる桁数を表しています。もしスケールが0なら、DECIMAL と NUMERIC 値は小数点と、小数点以下の数字を持ちません。

標準SQLでは、salary カラムは5桁で、かつ小数点以下2桁の値を格納する必要があります。それ故この場合、salary カラムに格納できる値の範囲は、-999.99 から 999.99 です。

標準SQLでは、構文 DECIMAL(M) は、DECIMAL(M,0) に相当します。同じように、構文 DECIMALは、DECIMAL(M,0) に相当し、その M の値はインプリメンテーションが決定する事ができます。MySQLは、この両方の DECIMAL と NUMERIC 構文の改良形をサポートします。M のデフォルト値は10です。

DECIMAL や NUMERIC の最大桁数は65ですが、DECIMAL や NUMERIC カラムの実際の範囲はカラムの精度やスケールに制約される事があります。そのようなカラムが、指定スケールで許容されている小数点以下の桁数よりも多い桁数の値を指定した場合、その値はそのスケールに変換されます。(厳密には、OS特有の機能をするのですが、通常その結果は許容桁数の切捨てになります。)

BIT データタイプは、ビットフィールド値を格納するのに利用されます。BIT(M) のタイプは、M ビット値の格納を許容します。M の範囲は1から64までが可能です。

ビット値を指定するには、b'value' 表記を利用する事ができます。value はゼロと1で書かれたバイナリ値です。例えば、b'111' と b'10000000' は、それぞれ7と128を表しています。項8.1.5. 「ビットフィールド値」を参照してください。

M ビットよりも短い BIT(M) カラムに値を指定すると、その値の左側にゼロが埋め込まれます。例えば、BIT(6) カラムに b'101' の値を指定すると、実際には b'000101' を指定した事と同じ意味になるのです。

そのデータタイプの許容範囲外の値を数値カラムに格納しようとすると、MySQLの反応はその時有効なSQLモードによって決まります。例えば、もし制限モードが有効でない場合、MySQLは値をその範囲の適切な長さに短縮し、その結果出た値を代わりに格納します。しかし、もしモードが TRADITIONAL に設定されていると、SQLスタンダードに従いエラーが発生し、MySQLは範囲外の値を受け付けず、挿入は失敗します。

非ストリクトモードで整数カラムに範囲外の値が指定された時、MySQLはそのカラムデータタイプの範囲に相当する終点の値を格納します。TINYINT か TINYINT UNSIGNED カラムに256を格納すると、MySQLはそれぞれに127か255を格納します。浮動小数点や固定小数点カラムが、指定された(またはデフォルトの)精度とスケールの暗黙範囲を超えた値を割り当てると、MySQLはその範囲に対応する終点を表す値を格納します。

MySQLがストリクトモードで機能していない時の短縮によって行われた変換は、ALTER TABLE、LOAD DATA INFILE、UPDATE、そして複数行 INSERT ステートメントに対しては警告としてレポートされます。MySQLがストリクトモードで機能している時は、そのテーブルがトランザクションテーブルかそれ以外の物なのかによって、これらのステートメントは失敗となり、いくつかの、または全ての値の挿入も変更も行われません。詳細に関しては 項4.2.6. 「SQL モード」 を参照して下さい。

Copyright c 1997, 2010, Oracle and/or its affiliates. All rights reserved. Legal Notices
Top / Previous / Next / Up / Table of Contents
© 2010, Oracle Corporation and/or its affiliates

無料CGI PHPスクリプト | 新着情報スクリプト | 営業日カレンダー | PHPマニュアル | MySQLマニュアル | PEARマニュアル

Copyright (c) 2010 jmcodex.com All rights reserved.