5가지 유형이 있습니다. 1. YEAR는 연도를 나타내는 데 사용되며 형식은 "YYYY"입니다. 2. TIME은 시간 정보만 필요한 값에 사용되며 형식은 "HH:MM:SS"입니다. 3. DATE, 날짜 값만 필요한 경우 형식은 "YYYY-MM-DD"입니다. 4. DATETIME, 날짜 및 시간 정보를 모두 포함해야 하는 값에 사용되며 형식은 "YYYY- MM-DD HH:MM:SS"; 5. TIMESTAMP , DATETIME과 유사하며 날짜 및 시간 정보를 모두 포함해야 하는 값에 사용됩니다.
이 튜토리얼의 운영 환경: windows7 시스템, mysql8 버전, Dell G3 컴퓨터.
MySQL에는 YEAR, TIME, DATE, DTAETIME, TIMESTAMP 등 날짜를 나타내는 여러 데이터 유형이 있습니다.
이름을 입력하세요 | 날짜 형식 | 기간 | 저장 공간 요구 사항 |
---|---|---|---|
YEAR | YYYY | 1901 ~ 2155 | 1바이트 |
시간 | HH:MM:SS | -838:59:59 ~ 838:59:59 | 3바이트 |
DATE | YYYY-MM-DD | 1000-01-01 ~ 9999-12-3 | 3바이트 |
DATETIME | YYYY-MM-DD HH:MM:SS | 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59 | 8바이트 |
타임스탬프 | YYYY-MM-DD HH:MM:SS | 1980-01-01 00:00:01 UTC ~ 2040-01-19 03:14:07 UTC | 4바이트 |
YEAR 유형
YEAR 유형은 연도를 나타내는 데 사용되는 싱글바이트 유형으로, 저장하는 데 1바이트만 필요합니다. YEAR는 다음과 같이 다양한 형식으로 지정할 수 있습니다.
YEAR는 '1901'부터 '2155'까지 4자리 문자열 또는 4자리 숫자 형식으로 표현됩니다. 입력 형식은 'YYYY' 또는 YYYY입니다. 예를 들어 '2010' 또는 2010을 입력하면 데이터베이스에 삽입되는 값은 2010이 됩니다.
YEAR는 '00'부터 '99'까지 2자리 문자열 형식으로 표현됩니다. '00'~'69', '70'~'99' 범위의 값은 각각 2000~2069, 1970~1999 범위의 YEAR 값으로 변환됩니다. '0'은 '00'과 같은 효과를 갖습니다. 범위를 벗어나서 입력된 값은 2000으로 변환됩니다.
YEAR는 1~99 범위의 2자리 숫자로 표현됩니다. 1~99, 70~99 범위의 값은 2001~2069, 1970~1970 범위의 YEAR 값으로 변환됩니다. 각각 1999. 여기서 값 0은 2000이 아닌 0000으로 변환됩니다.
팁: 두 자리 정수 범위는 두 자리 문자열 범위와 약간 다릅니다. 예를 들어, 3000년을 삽입하기 위해 독자는 숫자 형식 0을 사용하여 YEAR를 나타낼 수 있지만 실제로 데이터베이스에 삽입된 값은 예상한 대로 3000이 아닌 0000입니다. 문자열 형식의 '0' 또는 '00'만 3000으로 올바르게 해석될 수 있으며, 잘못된 YEAR 값은 0000으로 변환됩니다.
TIME 유형
TIME 유형은 시간 정보만 필요한 값에 사용되며 저장에는 3바이트가 필요합니다. 형식은 HH:MM:SS
입니다. HH는 시간, MM은 분, SS는 초를 나타냅니다.
TIME 유형의 값 범위는 -838:59:59~838:59:59입니다. 시간 부분이 이렇게 큰 이유는 TIME 유형이 하루 중 시간만 나타내는 데 사용할 수 없기 때문입니다( 24시간 미만이어야 함), 이벤트 이후의 특정 시간일 수도 있고 두 이벤트 사이의 시간일 수도 있습니다(24시간보다 길거나 음수일 수도 있음).
TIME 값은 아래와 같이 다양한 형식을 사용하여 지정할 수 있습니다.
'D HH:MM:SS' 형식 문자열입니다. 'HH:MM:SS', 'HH:MM', 'D HH' 또는 'SS'와 같은 "엄격하지 않은" 구문도 사용할 수 있습니다. 여기서 D는 일을 나타내며 0에서 34 사이의 값을 가질 수 있습니다. 데이터베이스에 삽입할 때 D는 시간으로 변환되어 "D*24+HH" 형식으로 저장됩니다.
'HHMMSS' 형식, 구분 기호가 없는 문자열 또는 의미 있는 시간을 가정한 HHMMSS 형식의 숫자 값입니다. 예를 들어 '101112'는 '10:11:12'로 이해되지만 '106112'는 불법이며(의미 없는 분 부분이 있음) 저장하면 00:00:00이 됩니다.
팁: 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'는 00:11:12가 아닌 11:12:00을 의미한다.
Example
TIME 테이블에서 데이터 유형을 사용하는 예를 살펴보겠습니다.
먼저 id, name, start_at, end_at의 4개 열이 있는 테스트라는 새 테이블을 만듭니다. start_at 및 end_at 열의 데이터 유형은 TIME입니다.
CREATE TABLE tests ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255) NOT NULL, start_at TIME, end_at TIME );
두 번째로 테스트 테이블에 행을 삽입합니다.
INSERT INTO tests(name,start_at,end_at) VALUES('Test 1', '08:00:00','10:00:00');
셋째, 테스트 테이블에서 데이터를 쿼리합니다.
SELECT name, start_at, end_at FROM tests;
DATE 유형
DATE 유형은 시간 부분 없이 날짜 값만 필요한 경우에 사용되며 저장에 3바이트가 필요합니다. 날짜 형식은 'YYYY-MM-DD'이며, 여기서 YYYY는 연도, MM은 월, DD는 일을 나타냅니다.
DATE 유형 필드에 값을 할당할 때 DATE의 날짜 형식을 준수하는 한 문자열 유형 또는 숫자 유형 데이터를 사용하여 삽입할 수 있습니다. 아래와 같이
'YYYY-MM-DD' 또는 'YYYYMMDD' 문자 형식으로 표현되는 날짜이며, 값 범위는 '1000-01-01' ~ '9999-12-3'입니다. 예를 들어 '2015-12-31' 또는 '20151231'을 입력하면 데이터베이스에 삽입되는 날짜는 2015-12-31이 됩니다.
以 '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视频教程】
위 내용은 mysql 날짜에는 어떤 유형이 사용됩니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!