Heim  >  Artikel  >  Datenbank  >  MySQL-Grundlagen-Tutorial 2 – Datentypen: Datums- und Uhrzeittypen

MySQL-Grundlagen-Tutorial 2 – Datentypen: Datums- und Uhrzeittypen

黄舟
黄舟Original
2017-02-24 10:57:361235Durchsuche

DATE- und Zeittypen, die Zeitwerte darstellen, sind DATETIME, DATE, TIMESTAMP, TIME und YEAR. Jeder Zeittyp verfügt über einen Bereich gültiger Werte und einen „Null“-Wert, der verwendet wird, wenn ein unzulässiger Wert angegeben wird, den MySQL nicht darstellen kann. Der Typ TIMESTAMP verfügt über proprietäre automatische Aktualisierungsfunktionen, die später beschrieben werden.

MySQL gibt eine Warnung oder einen Fehler aus, wenn Sie versuchen, ein ungültiges Datum einzugeben. Sie können den SQL-Modus ALLOW_INVALID_DATES verwenden, um MySQL dazu zu bringen, bestimmte Datumsangaben zu akzeptieren, beispielsweise „1999-11-31“. Nützlich, wenn Sie einen „möglicherweise falschen“ Wert, den der Benutzer angegeben hat, in der Datenbank (z. B. in einem Webformular) für die zukünftige Verarbeitung speichern möchten. In diesem Modus überprüft MySQL nur, ob der Monatsbereich zwischen 0 und 12 und der Tagesbereich zwischen 0 und 31 liegt. Diese Bereiche können Null umfassen, da MySQL das Speichern von Tag/Monat und Datumsangaben ermöglicht, bei denen der Tag in einer DATE- oder DATETIME-Spalte Null ist. Dies ist nützlich, wenn eine Anwendung einen Geburtstag speichern muss, dessen genaues Datum Sie nicht kennen. Speichern Sie in diesem Fall einfach das Datum als „00.00.1999“ oder „00.01.1999“. Funktionen, die ein vollständiges Datum erfordern, wie DATE_SUB() oder DATE_ADD, liefern keine korrekten Ergebnisse, wenn Sie ein solches Datum speichern. (Wenn Sie nicht möchten, dass in Datumsangaben Nullen erscheinen, können Sie den SQL-Modus NO_ZERO_IN_DATE verwenden.)

MySQL ermöglicht auch das Speichern von „0000-00-00“ als „Pseudodatum“ (wenn der SQL-Modus NO_ZERO_DATE nicht verwendet wird). Dies ist in manchen Fällen praktischer als die Verwendung von NULL-Werten (und die Daten und Indizes beanspruchen weniger Platz).

Setzen Sie die Systemvariable sql_mode auf den entsprechenden Moduswert, um klarer zu wissen, welche Art von Datumsangaben MySQL unterstützen soll.

Die folgenden Punkte sollten bei der Arbeit mit Datums- und Uhrzeittypen beachtet werden:

· MySQL ruft Werte eines bestimmten Datums- oder Uhrzeittyps im Standardausgabeformat ab, tut es aber Am besten interpretieren Sie jeden von Ihnen angegebenen Wert als Eingabewertformat (z. B. wenn Sie einen Wert angeben, der einem Datums- oder Zeittyp zugewiesen oder mit diesem verglichen wird). Es werden nur die in den folgenden Abschnitten beschriebenen Formate unterstützt. Erwarten Sie, dass Sie gültige Werte angeben. Wenn Sie Werte in anderen Formaten verwenden, kann es zu unerwarteten Ergebnissen kommen.

· Daten mit zweistelligen Jahresangaben sind nicht eindeutig, da das Jahrhundert nicht bekannt ist. MySQL verwendet die folgenden Regeln, um zweistellige Jahreswerte zu interpretieren:

o Jahreswerte im Bereich 70-99 werden in 1970-1999 konvertiert.

o Der Jahreswert im Bereich von 00-69 wird in 2000-2069 umgerechnet.

· Obwohl MySQL versucht, Werte in verschiedenen Formaten zu interpretieren, sind Datumsangaben immer in der Reihenfolge Jahr-Monat-Tag (z. B. „98-09-04“) und nicht üblicherweise in der Reihenfolge Monat-Tag-Jahr Wird an anderer Stelle verwendet oder in der Reihenfolge Tag-Monat-Jahr (zum Beispiel „09-04-98“, „04-09-98“).

· MySQL wandelt einen Wert vom Typ Datum oder Uhrzeit automatisch in eine Zahl um, wenn der Wert in einem numerischen Kontext verwendet wird, und umgekehrt.

· Wenn MySQL auf einen Datums- oder Zeittypwert stößt, der außerhalb des gültigen Bereichs liegt oder für diesen Typ unzulässig ist (wie am Anfang dieses Abschnitts beschrieben), konvertiert es den Wert in den „Null“-Wert dieser Klasse . Eine Ausnahme besteht darin, dass TIME-Werte außerhalb des Bereichs auf den entsprechenden Endpunkt des TIME-Bereichs begrenzt werden.

Die folgende Tabelle zeigt das Format verschiedener „Null“-Werte. Bitte beachten Sie, dass die Verwendung dieser Werte Warnungen generiert, wenn der SQL-Modus NO_ZERO_DATE aktiviert ist.

列类型 ”值
DATETIME '0000-00-00 00:00:00'
DATE '0000-00-00'
TIMESTAMP 00000000000000
TIME '00:00:00'
YEAR 0000

· „Null“-Werte sind etwas Besonderes, Sie können sie jedoch mithilfe der in der Tabelle angezeigten Werte speichern oder explizit referenzieren. Sie können auch den Wert „0“ oder 0 zum Speichern oder Referenzieren verwenden, was das Schreiben erleichtert.

· „Null“-Datums- oder Zeitwerte, die in MyODBC verwendet werden, werden in MyODBC 2.50.12 und höher automatisch in NULL konvertiert, da ODBC solche Werte nicht verarbeiten kann.

1. DATETIME-, DATE- und TIMESTAMP-Typen

  • 1. TIMESTAMP-Attribut seit MySQL 4.1

DATETIME, DATE Bezogen auf der TIMESTAMP-Typ. In diesem Abschnitt werden ihre Eigenschaften, ihre Gemeinsamkeiten und Unterschiede beschrieben.

Verwenden Sie den Typ DATETIME, wenn Sie einen Wert benötigen, der sowohl Datums- als auch Uhrzeitinformationen enthält. MySQL ruft DATETIME-Werte im Format „JJJJ-MM-TT HH:MM:SS“ ab und zeigt sie an. Der unterstützte Bereich ist „1000-01-01 00:00:00“ bis „9999-12-31 23:59:59“. („Unterstützt“ bedeutet, dass der vorherige Wert zwar funktionieren kann, es jedoch keine Garantie gibt).

Der Typ DATE sollte verwendet werden, wenn Sie nur den Datumswert ohne den Zeitteil benötigen. MySQL verwendet das Format „JJJJ-MM-TT“, um DATE-Werte abzurufen und anzuzeigen. Der unterstützte Bereich ist „1000-01-01“ bis „9999-12-31“.

Die Eigenschaften des Spaltentyps TIMESTAMP sind nicht festgelegt und hängen von der MySQL-Version und dem SQL-Modus ab, in dem der Server ausgeführt wird. Diese Eigenschaften werden später in diesem Abschnitt beschrieben.

DATETIME-, DATE- und TIMESTAMP-Werte können in jedem gängigen Format angegeben werden:

· 'YYYY-MM-DD HH:MM:SS' oder 'YY-MM-DD HH: MM:SS 'Formatzeichenfolge. „Entspannte“ Syntax ist zulässig: Als Trennzeichen zwischen Datums- oder Uhrzeitteilen kann jedes Interpunktionszeichen verwendet werden. Zum Beispiel „98-12-31 11:30:45“, „98.12.31 11+30+45“, „98/12/31 11*30*45“ und „98@12@31 11^30^“. 45'' sind gleichwertig.

· Eine Zeichenfolge im Format „JJJJ-MM-TT“ oder „JJ-MM-TT“. Auch eine „entspannte“ Syntax ist hier zulässig. Beispielsweise sind „98-12-31“, „98.12.31“, „98/12/31“ und „98@12@31“ gleichwertig.

· Eine Zeichenfolge im Format „YYYYMMDDHHMMSS“ oder „YYMMDDHHMMSS“ ohne Trennzeichen, vorausgesetzt, die Zeichenfolge ist für Datumstypen sinnvoll. Beispielsweise werden „19970523091528“ und „970523091528“ als „1997-05-23 09:15:28“ interpretiert, aber „971122129015“ ist illegal (es hat einen bedeutungslosen Minutenteil) und wird zu „0000-00-00 00“. :00:00'.

· Eine Zeichenfolge im Format „JJJJMMTT“ oder „JJMMTT“ ohne Trennzeichen, vorausgesetzt, die Zeichenfolge ist für Datumstypen sinnvoll. Beispielsweise werden „19970523“ und „970523“ als „1997-05-23“ interpretiert, aber „971332“ ist illegal (es hat einen bedeutungslosen Monats- und Tagesteil) und wird zu „0000-00-00“.

· Eine Zahl im Format YYYYMMDDHHMMSS oder YYMMDDHHMMSS, sofern die Zahl für den Datumstyp sinnvoll ist. Beispielsweise werden 19830905132800 und 830905132800 als „1983-09-05 13:28:00“ interpretiert.

· Eine Zahl im Format JJJJMMTT oder JJMMTT, sofern die Zahl für den Datumstyp sinnvoll ist. Beispielsweise werden 19830905 und 830905 als „05.09.1983“ interpretiert.

· Das von der Funktion zurückgegebene Ergebnis ist für den DATETIME-, DATE- oder TIMESTAMP-Kontext geeignet, z. B. NOW() oder CURRENT_DATE.

Ungültige DATETIME-, DATE- oder TIMESTAMP-Werte werden in einen „Null“-Wert des entsprechenden Typs („0000-00-00 00:00:00“, „0000-00-00“ oder 00000000000000) umgewandelt ).

Für Zeichenfolgenwerte, die Datumsteiltrennzeichen enthalten, müssen keine zwei Ziffern angegeben werden, wenn die Tages- und Monatswerte kleiner als 10 sind. „1979-6-9“ ist dasselbe wie „1979-06-09“. Ebenso besteht bei Zeichenfolgenwerten, die Zeitteiltrennzeichen enthalten, keine Notwendigkeit, zwei Ziffern anzugeben, wenn die Stunden-, Minuten- und Sekundenwerte kleiner als 10 sind. „1979-10-30 1:2:3“ ist dasselbe wie „1979-10-30 01:02:03“.

Der numerische Wert sollte 6, 8, 12 oder 14 Ziffern lang sein. Wenn eine Zahl 8 oder 14 Ziffern lang ist, wird davon ausgegangen, dass sie im Format JJJJMMTT oder JJJJMMTDHHMMSS vorliegt, wobei die ersten 4 Ziffern das Jahr darstellen. Wenn die Zahl 6 oder 12 Ziffern lang ist, wird davon ausgegangen, dass sie im Format JJMMTT oder JJMMTDHHMMSS vorliegt, wobei die ersten beiden Ziffern das Jahr darstellen. Andere Zahlen werden so interpretiert, als ob sie auf die nächste Länge mit Nullen aufgefüllt würden.

Als unqualifizierte Zeichenfolgen angegebene Werte werden mit der angegebenen Länge interpretiert. Wenn die Zeichenfolge 8 oder 14 Zeichen lang ist, stellen die ersten 4 Ziffern das Jahr dar. Ansonsten geben die ersten beiden Ziffern das Jahr an. Interpretieren Sie jede in der Zeichenfolge vorkommende Komponente von links nach rechts, um die Werte für Jahr, Monat, Tag, Stunde, Minute und Sekunde zu ermitteln. Das bedeutet, dass Zeichenfolgen mit weniger als 6 Zeichen nicht verwendet werden sollten. Wenn Sie beispielsweise „9903“ angeben und denken, dass dies März 1999 bedeutet, fügt MySQL einen Datumswert „Null“ in Ihre Tabelle ein. Dies liegt daran, dass die Jahres- und Monatswerte 99 und 03 sind, der Tagesteil jedoch vollständig fehlt, sodass der Wert kein gültiges Datum ist. Sie können jedoch explizit einen Nullwert angeben, um den fehlenden Monats- oder Tagesteil darzustellen. Beispielsweise können Sie mit „990300“ den Wert „00.03.1999“ einfügen.

Bis zu einem gewissen Grad ist es möglich, einen Wert eines Datumstyps einem anderen Datumstyp zuzuweisen. Der Wert kann sich jedoch ändern oder einige Informationen verlieren:

· Wenn Sie einem DATETIME- oder TIMESTAMP-Objekt einen DATE-Wert zuweisen, wird der Zeitanteil des resultierenden Werts aus diesem Grund auf „00:00:00“ gesetzt der DATE-Wert. Keine Zeitinformationen enthalten.

· Wenn Sie einem DATE-Objekt einen DATETIME- oder TIMESTAMP-Wert zuweisen, wird der Zeitanteil des resultierenden Werts entfernt, da der DATE-Wert keine Zeitinformationen enthält.

· Denken Sie daran, dass DATETIME-, DATE- und TIMESTAMP-Werte zwar im gleichen Format angegeben werden können, die Bereiche für die verschiedenen Wertetypen jedoch unterschiedlich sind. Beispielsweise darf der TIMESTAMP-Wert nicht vor 1970 oder nach 2037 liegen. Dies weist darauf hin, dass ein Datum wie „01.01.1968“ zwar für DATETIME- oder DATE-Werte gültig ist, für TIMESTAMP-Werte jedoch nicht gültig ist und in 0 konvertiert wird, wenn es einem solchen Objekt zugewiesen wird.

Beachten Sie bestimmte Fallstricke bei der Angabe von Datumswerten:

· Das nicht strenge Format, das für als Zeichenfolgen angegebene Werte zulässig ist, kann irreführend sein. Beispielsweise kann der Wert „10:11:12“ aufgrund des Trennzeichens „:“ wie ein Zeitwert aussehen, aber wenn er in einem Datumskontext verwendet wird, wird der Wert als Jahr „2010-11-12“ interpretiert. Der Wert „10:45:15“ wird in „0000-00-00“ umgewandelt, da „45“ kein gesetzlicher Monat ist.

· Im nicht-strikten Modus führt der MySQL-Server nur grundlegende Prüfungen der Gültigkeit von Datumsangaben durch: Die Bereiche Jahr, Monat und Tag liegen jeweils zwischen 1000 und 9999, zwischen 00 und 12 und zwischen 00 und 31. Jedes Datum, das Teile außerhalb dieser Bereiche enthält, wird in „0000-00-00“ konvertiert. Beachten Sie, dass Sie weiterhin illegale Daten wie „31.04.2002“ speichern dürfen. Um sicherzustellen, dass die Daten gültig sind, wenn Sie den strikten Modus nicht verwenden, sollten Sie Ihre Bewerbung überprüfen.

Im strikten Modus werden illegale Daten nicht akzeptiert und nicht konvertiert.

· Daten mit zweistelligen Jahresangaben sind nicht eindeutig, da das Jahrhundert nicht bekannt ist. MySQL verwendet die folgenden Regeln, um zweistellige Jahreswerte zu interpretieren:

o Jahreswerte im Bereich von 00-69 werden in 2000-2069 umgewandelt.

o Jahreswerte im Bereich von 70-99 werden auf 1970-1999 umgerechnet.

1.1. TIMESTAMP-Attribute seit MySQL 4.1

Hinweis: In älteren Versionen von MySQL (vor 4.1) unterschieden sich die Attribute des TIMESTAMP-Spaltentyps in vielerlei Hinsicht von Dies unterscheidet sich stark von dem, was in diesem Abschnitt beschrieben wird. Wenn Sie alte TIMESTAMP-Daten konvertieren müssen, damit sie in MySQL 5.1 funktionieren, finden Sie weitere Einzelheiten im MySQL 4.1-Referenzhandbuch.

Das Anzeigeformat der TIMESTAMP-Spalte ist das gleiche wie das der DATETIME-Spalte. Mit anderen Worten: Die Anzeigebreite ist auf 19 Zeichen festgelegt und das Format ist JJJJ-MM-TT HH:MM:SS.

Der MySQL-Server kann auch im MAXDB-Modus ausgeführt werden. Wenn der Server in diesem Modus läuft, ist TIMESTAMP gleich DATETIME. Das heißt, wenn der Server beim Erstellen der Tabelle im MAXDB-Modus ausgeführt wird, wird die TIMESTAMP-Spalte als DATETIME-Spalte erstellt. Das Ergebnis ist, dass die Spalte das DATETIME-Anzeigeformat verwendet, denselben Wertebereich hat und nicht automatisch mit dem aktuellen Datum und der aktuellen Uhrzeit initialisiert oder aktualisiert wird.

Um den MAXDB-Modus zu aktivieren, verwenden Sie beim Starten des Servers die Serveroption --sql-mode=MAXDB oder stellen Sie den SQL-Servermodus zur Laufzeit auf MAXDB ein, indem Sie die globale Variable sql_mode festlegen:

mysql> SET GLOBAL sql_mode=MAXDB;

Der Client kann den Server für seine Verbindung wie folgt im MAXDB-Modus laufen lassen:

mysql> SET SESSION sql_mode=MAXDB;

MySQL akzeptiert keine Zeitstempelwerte, die eine Null in der Tages- oder Monatsspalte enthalten oder unzulässige Datumswerte enthalten . Die einzige Ausnahme von dieser Regel ist der Sonderwert „0000-00-00 00:00:00“.

Sie können sehr flexibel bestimmen, wann TIMESTAMP initialisiert und aktualisiert werden soll und welche Spalten initialisiert und aktualisiert werden sollen:

· Sie können den aktuellen Zeitstempel als Standardwert und den automatisch aktualisierten Wert angeben. Sie können jedoch nur eines oder keines von beiden auswählen. (Es ist nicht möglich, dass eine Spalte ein Verhalten und eine andere Spalte ein anderes Verhalten auswählt.)

· Sie können angeben, welche TIMESTAMP-Spalte automatisch initialisiert oder auf das aktuelle Datum und die aktuelle Uhrzeit aktualisiert wird. Die 1. TIMESTAMP-Spalte wird nicht mehr benötigt.

Bitte beachten Sie, dass die unten besprochenen Informationen nur für TIMESTAMP-Spalten in Tabellen gelten, die ohne aktivierten MAXDB-Modus erstellt wurden. (Wie oben erwähnt, führt der MAXDB-Modus dazu, dass Spalten als DATETIME-Spalten erstellt werden.) Die Regeln, die die Initialisierung und Aktualisierung von TIMESTAMP-Spalten steuern, lauten wie folgt:

· Wenn die erste TIMESTAMP-Spalte in einer Tabelle als DEFAULT-Wert angegeben ist, kann sie nicht ignoriert werden. Der Standardwert kann CURRENT_TIMESTAMP oder ein konstanter Datums- und Uhrzeitwert sein.

· DEFAULT NULL ist dasselbe wie DEFAULT CURRENT_TIMESTAMP der ersten Spalte TIMESTAMP. Für andere TIMESTAMP-Spalten wird DEFAULT NULL als DEFAULT 0 behandelt.

· Jede TIMESTAMP-Spalte in der Tabelle kann so eingestellt werden, dass sie automatisch mit dem aktuellen Zeitstempel initialisiert und/oder aktualisiert wird.

· In der CREATE TABLE-Anweisung können Sie die erste TIMESTAMP-Spalte auf eine der folgenden Arten deklarieren:

o Verwenden Sie die Klauseln DEFAULT CURRENT_TIMESTAMP und ON UPDATE CURRENT_TIMESTAMP, um den Standardwert zu verwenden aktuellen Zeitstempel und wird automatisch aktualisiert.

o Verwendet keine DEFAULT- oder ON UPDATE-Klausel, genau wie DEFAULT CURRENT_TIMESTAMP ON UPDATECURRENT_TIMESTAMP.

o Verwenden Sie die DEFAULT CURRENT_TIMESTAMP-Klausel anstelle der ON UPDATE-Klausel. Der Standardwert verwendet den aktuellen Zeitstempel, wird jedoch nicht automatisch aktualisiert.

o Ohne die DEFAULT-Klausel, aber mit der ON UPDATE CURRENT_TIMESTAMP-Klausel hat die Spalte einen Standardwert von 0 und wird automatisch aktualisiert.

o        用常量DEFAULT值,列有给出的 默认值。如果列有一个ON UPDATE CURRENT_TIMESTAMP子句,它自动更新,否则不。

换句话说,你可以为初始值和自动更新的值使用当前的时间戳,或者其中一个使用,或者两个皆不使用。(例如,你可以指定ON UPDATE来启用自动更新而不让列自动初始化)。

· 在DEFAULT和ON UPDATE子句中可以使用CURRENT_TIMESTAMP、CURRENT_TIMESTAMP()或者NOW()。它们均具有相同的效果。

两个属性的顺序并不重要。如果一个TIMESTAMP列同时指定了DEFAULT和ON UPDATE,任何一个可以在另一个的前面。

例子,下面这些语句是等效的:

CREATE TABLE t (ts TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                             ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (ts TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                             DEFAULT CURRENT_TIMESTAMP);

· 要为TIMESTAMP列而不是第1列指定自动默认或更新,必须通过将第1个TIMESTAMP列显式分配一个常量DEFAULT值来禁用自动初始化和更新。(例如,DEFAULT 0或DEFAULT'2003-01-01 00:00:00')。然后,对于其它TIMESTAMP列,规则与第1个TIMESTAMP列相同,例外情况是不能忽略DEFAULT和ON UPDATE子句。如果这样做,则不会自动进行初始化或更新。

例如:下面这些语句是等效的:

CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP DEFAULT CURRENT_TIMESTAMP
                  ON UPDATE CURRENT_TIMESTAMP);
CREATE TABLE t (
    ts1 TIMESTAMP DEFAULT 0,
    ts2 TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
                  DEFAULT CURRENT_TIMESTAMP);

可以对每个连接设置当前的时区。TIMESTAMP值以UTC格式保存,存储时对当前的时区进行转换,检索时再转换回当前的时区。只要时区设定值为常量,便可以得到保存时的值。如果保存一个TIMESTAMP值,应更改时区然后检索该值,它与你保存的值不同。这是因为在两个方向的转换中没有使用相同的时区。当前的时区可以用作time_zone系统变量的值。

可以在TIMESTAMP列的定义中包括NULL属性以允许列包含NULL值。例如:

CREATE TABLE t
(
  ts1 TIMESTAMP NULL DEFAULT NULL,
  ts2 TIMESTAMP NULL DEFAULT 0,
  ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
);

如果未指定NULL属性,将列设置为NULL设置则会将它设置为当前的时间戳。请注意允许NULL值的TIMESTAMP列不会采用当前的时间戳,除非要么其 默认值定义为CURRENT_TIMESTAMP,或者NOW()或CURRENT_TIMESTAMP被插入到该列内。换句话说,只有使用如下定义创建,定义为 NULL的TIMESTAMP列才会自动更新:

CREATE TABLE t (ts NULLDEFAULT CURRENT_TIMESTAMP);

否则-也就是说,如果使用NULL而不是DEFAULT TIMESTAMP来定义TIMESTAMP列,如下所示...

CREATE TABLE t1 (ts NULL DEFAULT NULL);
CREATE TABLE t2 (ts NULL DEFAULT '0000-00-00 00:00:00');

...则必须显式插入一个对应当前日期和时间的值。例如:

INSERT INTO t1 VALUES (NOW());
INSERT INTO t2 VALUES (CURRENT_TIMESTAMP);

2. TIME类型

MySQL以'HH:MM:SS'格式检索和显示TIME值(或对于大的小时值采用'HHH:MM:SS'格式)。TIME值的范围可以从'-838:59:59'到'838:59:59'。小时部分会因此大的原因是TIME类型不仅可以用于表示一天的时间(必须小于24小时),还可能为某个事件过去的时间或两个事件之间的时间间隔(可以大于24小时,或者甚至为负)。

你可以用各种格式指定TIME值:

· 'D HH:MM:SS.fraction'格式的字符串。还可以使用下面任何一种“非严格”语法:'HH:MM:SS.fraction'、'HH:MM:SS'、'HH:MM'、'D HH:MM:SS'、'D HH:MM'、'D HH'或'SS'。这里D表示日,可以取0到34之间的值。请注意MySQL还不保存分数。

· 'HHMMSS'格式的没有间割符的字符串,假定是有意义的时间。例如,'101112'被理解为'10:11:12',但'109712'是不合法的(它有一个没有意义的分钟部分),将变为'00:00:00'。

· HHMMSS格式的数值,假定是有意义的时间。例如,101112被理解为'10:11:12'。下面格式也可以理解:SS、MMSS、HHMMSS、HHMMSS.fraction。请注意MySQL还不保存分数。

· 函数返回的结果,其值适合TIME上下文,例如CURRENT_TIME。

对于指定为包括时间部分间割符的字符串的TIME值,如果时、分或者秒值小于10,则不需要指定两位数。'8:3:2'与'08:03:02'相同。

为TIME列分配简写值时应注意。没有冒号,MySQL解释值时假定最右边的两位表示秒。(MySQL解释TIME值为过去的时间而不是当天的时间)。例如,你可能认为'1112'和1112表示'11:12:00'(11点过12分),但MySQL将它们解释为'00:11:12'(11分,12 秒)。同样,'12'和12 被解释为 '00:00:12'。相反,TIME值中使用冒号则肯定被看作当天的时间。也就是说,'11:12'表示'11:12:00',而不是'00:11:12'。

超出TIME范围但合法的值被裁为范围最接近的端点。例如,'-850:00:00'和'850:00:00'被转换为'-838:59:59'和'838:59:59'。

无效TIME值被转换为'00:00:00'。请注意由于'00:00:00'本身是一个合法TIME值,只从表内保存的一个'00:00:00'值还不能说出原来的值是 '00:00:00'还是不合法的值。

3. YEAR-Typ

Der YEAR-Typ ist ein Einzelbyte-Typ, der zur Darstellung des Jahres verwendet wird.

MySQL ruft YEAR-Werte im YYYY-Format ab und zeigt sie an. Der Bereich liegt zwischen 1901 und 2155.

Sie können YEAR-Werte in verschiedenen Formaten angeben:

· Vierstellige Zeichenfolge im Bereich von „1901“ bis „2155“.

· Vier Ziffern im Bereich von 1901 bis 2155.

· Zweistellige Zeichenfolge im Bereich von „00“ bis „99“. Werte im Bereich „00“ bis „69“ und „70“ bis „99“ werden in YEAR-Werte im Bereich 2000 bis 2069 und 1970 bis 1999 umgewandelt.

· Zweistellige Ganzzahl im Bereich 1 bis 99. Werte im Bereich 1 bis 69 und 70 bis 99 werden in JAHR-Werte im Bereich 2001 bis 2069 und 1970 bis 1999 umgewandelt. Beachten Sie, dass sich zweistellige Ganzzahlbereiche geringfügig von zweistelligen Zeichenfolgenbereichen unterscheiden, da Sie Null nicht direkt als Zahl angeben und diese als 2000 interpretieren lassen können. Sie müssen es als Zeichenfolge „0“ oder „00“ angeben, sonst wird es als 0000 interpretiert.

· Das von der Funktion zurückgegebene Ergebnis, dessen Wert für den YEAR-Kontext geeignet ist, z. B. NOW().

Unzulässige YEAR-Werte werden in 0000 umgewandelt.

4. Y2K-Angelegenheiten und Datumstypen

MySQL selbst ist für das Jahr 2000 (Y2K) sicher, aber die in MySQL eingegebenen Werte sind möglicherweise nicht sicher. Jede Eingabe, die einen zweistelligen Jahreswert enthält, ist mehrdeutig, da das Jahrhundert nicht bekannt ist. Diese Werte müssen als vier Ziffern interpretiert werden, da MySQL intern vier Ziffern zum Speichern des Jahres verwendet.

Für die Typen DATETIME, DATE, TIMESTAMP und YEAR verwendet MySQL die folgenden Regeln, um Datumsangaben mit mehrdeutigen Jahreswerten zu interpretieren:

· Jahreswerte im Bereich von 00-69 werden konvertiert bis 2000-2069.

· Jahreswerte im Bereich 70-99 werden auf 1970-1999 umgerechnet.

Denken Sie daran, dass es sich bei diesen Regeln nur um vernünftige Schätzungen darüber handelt, was die Datenwerte darstellen. Wenn die von MySQL verwendete Heuristik nicht den richtigen Wert liefert, sollten Sie die genaue Eingabe mit dem vierstelligen Jahreswert bereitstellen.

ORDER BY kann TIMESTAMP- oder YEAR-Werte mit zwei Ziffern des Jahres korrekt sortieren.

Einige Funktionen wie MIN() und MAX() konvertieren TIMESTAMP oder YEAR in eine Zahl. Dies bedeutet, dass diese Funktionen bei Werten mit zweistelligen Jahresangaben nicht korrekt funktionieren. Die Lösung besteht in diesem Fall darin, TIMESTAMP oder YEAR in ein vierstelliges Jahresformat zu konvertieren oder MIN(DATE_ADD(TIMESTAMP,INTERVAL 0 DAYS)) zu verwenden.

Das Obige ist der Inhalt des MySQL-Basis-Tutorials 2 – Datums- und Uhrzeittypen von Datentypen. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn