これは本当に初歩的な質問かもしれませんが、以前にTIMESTAMP()
でテーブルを作成したことはなく、パラメーターとして何を置くかについて混乱しています。たとえば、ここに:
ランダムにTIMESTAMP(20)
を配置しましたが、20
パラメータとしてここを意味しますか?ここに何を入れるべきですか?
私は質問をグーグルで検索しましたが、実際には何も思いつきませんでした。
[〜#〜] edit [〜#〜]
MySQL 5.6.4の時点では、データ型TIMESTAMP(n)
は、秒の小数部にn
(0〜6)の精度の10進数を指定します。
MySQL 5.6より前では、MySQLはTIMESTAMP
データ型の一部として格納された小数秒をサポートしていませんでした。
リファレンス: https://dev.mysql.com/doc/refman/5.6/en/fractional-seconds.html
TIMESTAMP
に長さ修飾子を指定する必要はありません。 TIMESTAMP
のみを指定できます。
ただし、テーブルで定義されている最初のTIMESTAMP
列は、自動初期化と更新の対象となることに注意してください。例えば:
_create table foo (id int, ts timestamp, val varchar(2));
show create table foo;
CREATE TABLE `foo` (
`id` INT(11) DEFAULT NULL,
`ts` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`val` VARCHAR(2) DEFAULT NULL
)
_
データ型に続く括弧内の内容は、データ型が何であるかによって異なりますが、一部のデータ型では、長さ修飾子です。
一部のデータ型では、長さ修飾子は格納可能な値の最大長に影響します。たとえば、VARCHAR(20)
では、最大20文字を保存できます。 DECIMAL(10,6)
は、小数点の前が4桁で後が6桁の数値と、-9999.999999〜9999.999999の有効範囲を許可します。
他のタイプの場合、長さ修飾子は、格納できる値の範囲には影響しません。たとえば、INT(4)
とINT(10)
は両方とも整数であり、両方とも整数データ型に許可される値の全範囲を格納できます。
その場合にその長さ修飾子が行うことは、単なる情報です。基本的に、推奨される表示幅を指定します。クライアントはそれを利用して、列の値を表示するために行に確保するスペースを決定できます。クライアントはそれをする必要はありませんが、その情報は利用可能です。
[〜#〜] edit [〜#〜]
TIMESTAMP
データ型の長さ修飾子は受け入れられなくなりました。 (本当に古いバージョンのMySQLを実行しており、それが受け入れられている場合、無視されます。)
私の友人の精度です。たとえば、パラメータとして(2)を入力すると、2015-12-29 00:00:00 .のような精度の日付が取得されます。方法の最大値は6です。
この構文は、4.1より前の古いバージョンのMySQLのものであるようです。 5.5から完全に削除されました https://dev.mysql.com/doc/refman/5.0/en/upgrading-from-previous-series.html
したがって、ここで幅を指定しても意味がありません。無視してもかまいません。どのバージョンを実行していますか?
MySQL 5.7はこの構文をサポートしているようです。渡される引数は精度です。 TIMESTAMP(3)はミリ秒の精度を許可します。 6は許容される最高の精度です。