Es gibt 5 Typen: 1. JAHR, wird zur Darstellung des Jahres verwendet, das Format ist „JJJJ“; 2. ZEIT, wird für Werte verwendet, die nur Zeitangaben erfordern, das Format ist „HH:MM:SS“; 3. DATE, wird verwendet, wenn nur Datumswerte benötigt werden, das Format ist „JJJJ-MM-TT“ 4. DATETIME, wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitinformationen enthalten müssen, das Format ist „JJJJ- MM-DD HH:MM:SS"; 5. TIMESTAMP, ähnlich wie DATETIME, wird für Werte verwendet, die sowohl Datums- als auch Uhrzeitinformationen enthalten müssen.
Die Betriebsumgebung dieses Tutorials: Windows7-System, MySQL8-Version, Dell G3-Computer.
Es gibt mehrere Datentypen, die Datumsangaben in MySQL darstellen: YEAR, TIME, DATE, DTAETIME, TIMESTAMP.
Geben Sie den Namen ein | Datumsformat | Datumsbereich | Lagervoraussetzungen |
---|---|---|---|
JAHR | JJJJ | 1901 ~ 2155 | 1 Byte |
ZEIT | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3 Bytes |
DATUM | JJJJ-MM-TT | 1000-01-01 ~ 9999-12-3 | 3 Bytes |
DATUMZEIT | JJJJ-MM-TT HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8 Bytes |
ZEITSTEMPEL | JJJJ-MM-TT HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4 Bytes |
YEAR-Typ
YEAR-Typ ist ein Einzelbyte-Typ, der zur Darstellung des Jahres verwendet wird und nur 1 Byte zur Speicherung benötigt. JAHR kann in verschiedenen Formaten wie folgt angegeben werden:
JAHR ausgedrückt im 4-stelligen Zeichenfolgen- oder 4-stelligen Zahlenformat im Bereich von „1901“ bis „2155“. Das Eingabeformat ist „YYYY“ oder YYYY. Wenn Sie beispielsweise „2010“ oder 2010 eingeben, werden die Werte 2010 in die Datenbank eingefügt.
JAHR, ausgedrückt im zweistelligen Zeichenfolgenformat im Bereich von „00“ bis „99“. Werte im Bereich von „00“ bis „69“ und „70“ bis „99“ werden in YEAR-Werte im Bereich von 2000 bis 2069 bzw. 1970 bis 1999 umgewandelt. „0“ hat die gleiche Wirkung wie „00“. Außerhalb des Bereichs eingegebene Werte werden in 2000 umgewandelt.
JAHR ausgedrückt als zweistellige Zahl im Bereich von 1 bis 99. Werte im Bereich von 1 bis 99 und 70 bis 99 werden in JAHR-Werte im Bereich von 2001 bis 2069 und 1970 bis umgewandelt 1999 bzw. Beachten Sie, dass hier ein Wert von 0 in 0000 und nicht in 2000 umgewandelt wird.
Tipp: Der zweistellige Ganzzahlbereich unterscheidet sich geringfügig vom zweistelligen Zeichenfolgenbereich. Um beispielsweise das Jahr 3000 einzufügen, könnte ein Leser das numerische Format 0 zur Darstellung von JAHR verwenden, aber tatsächlich ist der in die Datenbank eingefügte Wert 0000 und nicht wie erwartet 3000. Nur „0“ oder „00“ im String-Format können korrekt als 3000 interpretiert werden, unzulässige YEAR-Werte werden in 0000 umgewandelt.
TIME-Typ
TIME-Typ wird für Werte verwendet, die nur Zeitinformationen erfordern und 3 Bytes zur Speicherung benötigen. Das Format ist HH:MM:SS
. HH steht für Stunden, MM für Minuten und SS für Sekunden.
Der Wertebereich des TIME-Typs beträgt -838:59:59~838:59:59. Der Grund, warum der Stundenteil so groß ist, liegt darin, dass der TIME-Typ nicht nur zur Darstellung der Tageszeit verwendet werden kann ( muss weniger als 24 Stunden betragen), kann aber auch eine bestimmte Zeit seit einem Ereignis oder die Zeit zwischen zwei Ereignissen sein (kann größer als 24 Stunden oder sogar negativ sein).
TIME-Werte können in verschiedenen Formaten angegeben werden, wie unten gezeigt.
'D HH:MM:SS' Formatzeichenfolge. Diese „nicht strikten“ Syntaxen können auch verwendet werden: „HH:MM:SS“, „HH:MM“, „D HH“ oder „SS“. D stellt hier den Tag dar, der einen Wert zwischen 0 und 34 annehmen kann. Beim Einfügen in die Datenbank wird D in Stunden umgewandelt und im Format „D*24+HH“ gespeichert.
'HHMMSS'-Format, eine Zeichenfolge ohne Trennzeichen oder ein numerischer Wert im HHMMSS-Format, vorausgesetzt eine aussagekräftige Zeit. Beispielsweise wird „101112“ als „10:11:12“ verstanden, aber „106112“ ist nicht zulässig (es hat einen bedeutungslosen Minutenteil) und wird beim Speichern zu 00:00:00.
Tipp: Bei der Zuweisung abgekürzter Werte zur TIME-Spalte beachten Sie bitte: Ohne Doppelpunkt geht MySQL bei der Interpretation des Werts davon aus, dass die beiden Ziffern ganz rechts Sekunden darstellen. (MySQL interpretiert TIME-Werte als vergangene Zeit und nicht als aktuelle Zeit). Ein Leser könnte beispielsweise denken, dass „1112“ und 1112 11:12:00 (also 12 Minuten nach 11 Uhr) bedeuten, MySQL interpretiert sie jedoch als 00:11:12 (also 11 Minuten und 12 Sekunden). ). Ebenso werden „12“ und 12 als 00:00:12 interpretiert. Wenn im TIME-Wert dagegen ein Doppelpunkt verwendet wird, wird dieser definitiv als Tageszeit betrachtet, d. h. „11:12“ bedeutet 11:12:00 und nicht 00:11:12.
Beispiel
Sehen wir uns ein Beispiel für die Verwendung des Datentyps in der TIME-Tabelle an.
Erstellen Sie zunächst eine neue Tabelle mit dem Namen „tests“ mit vier Spalten: id, name, start_at und end_at. Der Datentyp der Spalten start_at und end_at ist TIME.
CREATE TABLE tests ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, start_at TIME, end_at TIME );
Zweitens fügen Sie eine Zeile in die Testtabelle ein.
INSERT INTO tests(name,start_at,end_at) VALUES('Test 1', '08:00:00','10:00:00');
Drittens fragen Sie Daten aus der Testtabelle ab.
SELECT name, start_at, end_at FROM tests;
DATE-Typ
DATE-Typ wird verwendet, wenn nur ein Datumswert ohne den Zeitteil benötigt wird und 3 Bytes zur Speicherung benötigt. Das Datumsformat ist „JJJJ-MM-TT“, wobei JJJJ für das Jahr, MM für den Monat und TT für den Tag steht.
Beim Zuweisen von Werten zu Feldern vom Typ DATE können Sie zum Einfügen Zeichenfolgen- oder numerische Daten verwenden, sofern diese dem Datumsformat von DATE entsprechen. Wie unten gezeigt:
Das Datum wird im Format „JJJJ-MM-TT“ oder „JJJJMMTT“ ausgedrückt, der Wertebereich ist „1000-01-01“ ~ „9999-12-3“. Geben Sie beispielsweise „31.12.2015“ oder „20151231“ ein und das in die Datenbank eingefügte Datum ist der 31.12.2015.
以 'YY-MM-DD' 或者 'YYMMDD' 字符串格式表示日期,在这里YY表示两位的年值。MySQL 解释两位年值的规则:'00~69' 范围的年值转换为 '2000~2069','70~99' 范围的年值转换为 '1970~1999'。例如,输入 '15-12-31',插入数据库的日期为 2015-12-31;输入 '991231',插入数据库的日期为 1999-12-31。
以 YYMMDD 数字格式表示的日期,与前面相似,00~69 范围的年值转换为 2000~2069,80~99 范围的年值转换为 1980~1999。例如,输入 151231,插入数据库的日期为 2015-12-31,输入 991231,插入数据库的日期为 1999-12-31。
使用 CURRENT_DATE 或者 NOW(),插入当前系统日期。
示例
我们来看看下面的例子。
首先,创建一个新表名为people,其中出生日期列为DATE数据类型。
CREATE TABLE people ( id INT AUTO_INCREMENT PRIMARY KEY, first_name VARCHAR(50) NOT NULL, last_name VARCHAR(50) NOT NULL, birth_date DATE NOT NULL );
接下来,在people表中插入一行。
INSERT INTO people(first_name,last_name,birth_date) VALUES('John','Doe','1990-09-01');
然后,查询数据来自people表。
SELECT first_name, last_name, birth_date FROM people;
之后,使用两位数年份格式将数据插入people表中。
INSERT INTO people(first_name,last_name,birth_date) VALUES('Jack','Daniel','01-09-01'), ('Lily','Bush','80-09-01');
在第一行中,我们使用01(范围00-69)作为年份,因此MySQL将其转换为2001年。在第二行中,我们使用80(范围70-99)作为年份,MySQL将其转换为1980年。
最后,我们可以从people表中查询数据,以检查数据是否已根据转换规则进行转换。
SELECT first_name, last_name, birth_date FROM people;
DATETIME 类型
DATETIME 类型用于需要同时包含日期和时间信息的值,在存储时需要 8 个字节。日期格式为 'YYYY-MM-DD HH:MM:SS
',其中 YYYY 表示年,MM 表示月,DD 表示日,HH 表示小时,MM 表示分钟,SS 表示秒。
在给 DATETIME 类型的字段赋值时,可以使用字符串类型或者数字类型的数据插入,只要符合 DATETIME 的日期格式即可,如下所示。
以 'YYYY-MM-DD HH:MM:SS' 或者 'YYYYMMDDHHMMSS' 字符串格式表示的日期,取值范围为 '1000-01-01 00:00:00'~'9999-12-3 23:59:59'。例如,输入 '2014-12-31 05:05:05' 或者 '20141231050505’,插入数据库的 DATETIME 值都为 2014-12-31 05:05:05。
以 'YY-MM-DD HH:MM:SS' 或者 'YYMMDDHHMMSS' 字符串格式表示的日期,在这里 YY 表示两位的年值。与前面相同,'00~79' 范围的年值转换为 '2000~2079','80~99' 范围的年值转换为 '1980~1999'。例如,输入 '14-12-31 05:05:05',插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。
以 YYYYMMDDHHMMSS 或者 YYMMDDHHMMSS 数字格式表示的日期和时间。例如,输入 20141231050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05;输入 140505050505,插入数据库的 DATETIME 为 2014-12-31 05:05:05。
DATETIME值可以包括具有YYYY-MM-DD HH:MM:SS[.fraction]例如的格式的尾随小数秒到微秒 2015-12-20 10:01:00.999999。包含小数秒精度时,DATETIME值需要更多存储空间,如下表所示:
分数秒精度 | 存储 (字节) |
---|---|
0 | 0 |
1, 2 | 1 |
3, 4 | 2 |
5, 6 | 3 |
例如,2015-12-20 10:01:00.999999 需要8个字节,5个字节用于2015-12-20 10:01:00 ,3个字节用于.999999 而2015-12-20 10:01:00.9 只需要6个字节,1个字节用于小数秒精度。
TIMESTAMP 类型
TIMESTAMP 的显示格式与 DATETIME 相同,显示宽度固定在 19 个字符,日期格式为 YYYY-MM-DD HH:MM:SS,在存储时需要 4 个字节。但是 TIMESTAMP 列的取值范围小于 DATETIME 的取值范围,为 '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07'UTC。在插入数据时,要保证在合法的取值范围内。
提示:协调世界时(英:Coordinated Universal Time,法:Temps Universel Coordonné)又称为世界统一时间、世界标准时间、国际协调时间。英文(CUT)和法文(TUC)的缩写不同,作为妥协,简称 UTC。
TIMESTAMP 与 DATETIME 除了存储字节和支持的范围不同外,还有一个最大的区别是:
DATETIME 在存储日期数据时,按实际输入的格式存储,即输入什么就存储什么,与时区无关;
而 TIMESTAMP 值的存储是以 UTC(世界标准时间)格式保存的,存储时对当前时区进行转换,检索时再转换回当前时区。即查询时,根据当前时区的不同,显示的时间值是不同的。
提示:如果为一个 DATETIME 或 TIMESTAMP 对象分配一个 DATE 值,结果值的时间部分被设置为 '00:00:00',因此 DATE 值未包含时间信息。如果为一个 DATE 对象分配一个 DATETIME 或 TIMESTAMP 值,结果值的时间部分被删除,因此DATE 值未包含时间信息。
MySQL TIMESTAMP以UTC值存储。但是,MySQL将DATETIME值存储为没有时区的值。我们来看下面的例子。
首先,将当前连接的时区设置为+00:00。
SET time_zone = '+00:00';
接下来,创建一个表命名timestamp_n_datetime是由两列组成:ts与dt用TIMESTAMP和DATETIME使用下面的语句类型。
CREATE TABLE timestamp_n_datetime ( id INT AUTO_INCREMENT PRIMARY KEY, ts TIMESTAMP, dt DATETIME );
然后,将当前日期和时间插入 timestamp_n_datetime 表的两个ts和每dt列 ,
INSERT INTO timestamp_n_datetime(ts,dt) VALUES(NOW(),NOW());
之后,从timestamp_n_datetime表中查询数据。
SELECT ts, dt FROM timestamp_n_datetime;
DATETIME和TIMESTAMP列中的值都相同。
最后,将连接的时区设置为+03:00并再次从timestamp_n_datetime表中查询数据。
SET time_zone = '+03:00'; SELECT ts, dt FROM timestamp_n_datetime;
如您所见,TIMESTAMP列中的值不同。这是因为当我们更改时区时,TIMESTAMP列以UTC格式存储日期和时间值,根据新时区调整列的值。
这意味着如果您使用TIMESTAMP数据存储日期和时间值,则在将数据库移动到位于不同时区的服务器时应认真考虑。
【相关推荐:mysql视频教程】
Das obige ist der detaillierte Inhalt vonWelcher Typ wird für MySQL-Daten verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!