web-dev-qa-db-ja.com

MySqlワークベンチでタイムスタンプとして列を設定していますか?

これは本当に初歩的な質問かもしれませんが、以前にTIMESTAMP()でテーブルを作成したことはなく、パラメーターとして何を置くかについて混乱しています。たとえば、ここに:

enter image description here

ランダムにTIMESTAMP(20)を配置しましたが、20パラメータとしてここを意味しますか?ここに何を入れるべきですか?

私は質問をグーグルで検索しましたが、実際には何も思いつきませんでした。

15
ocean800

[〜#〜] 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を実行しており、それが受け入れられている場合、無視されます。)

9
spencer7593

私の友人の精度です。たとえば、パラメータとして(2)を入力すると、2015-12-29 00:00:00 .のような精度の日付が取得されます。方法の最大値は6です。

8
Diego Nieto

この構文は、4.1より前の古いバージョンのMySQLのものであるようです。 5.5から完全に削除されました https://dev.mysql.com/doc/refman/5.0/en/upgrading-from-previous-series.html

したがって、ここで幅を指定しても意味がありません。無視してもかまいません。どのバージョンを実行していますか?

2
Kim Ryan

MySQL 5.7はこの構文をサポートしているようです。渡される引数は精度です。 TIMESTAMP(3)はミリ秒の精度を許可します。 6は許容される最高の精度です。

参照: http://dev.mysql.com/doc/refman/5.7/en/datetime.html

1
Limabean