문자열은 더 많은 공간을 차지합니다!
문자열 저장의 날짜 비교 효율성은 상대적으로 낮으며(문자별 비교), 날짜 관련 API를 사용하여 계산하고 비교할 수 없습니다.
Datetime과 Timestamp는 MySQL에서 제공하는 시간 저장을 위한 두 가지 유사한 데이터 유형입니다.
둘 중에서 어떻게 선택하나요?
일반적으로 Timestamp를 선호합니다
DateTime 유형에는 시간대 정보가 없습니다(시간대는 무관합니다)
서버 주소가 변경되거나 클라이언트 연결 시간이 변경되는 등 시간대가 변경되는 경우 zone 설정하면 데이터베이스에서 읽는 시간이 잘못됩니다.
타임스탬프는 시간대와 관련이 있습니다.
타임스탬프 유형 필드의 값은 서버 시간대 변경에 따라 변경되며 해당 시간으로 자동 변환됩니다. 쉽게 말하면 시간대에 따라 이 필드의 값이 달라집니다. 질문할 때 기록합니다.
아래에서 실제 시연을 보여드리겠습니다!
테이블 생성 SQL 문:
CREATE TABLE `time_zone_test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `date_time` datetime DEFAULT NULL, `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
데이터 삽입:
INSERT INTO time_zone_test(date_time,time_stamp) VALUES(NOW(),NOW());
데이터 보기:
select dsqlate_time,time_stamp from time_zone_test;
결과:
현재 시간 수정 세션 영역:+--------- +---------+
| 날짜_시간 |
+---- - -+---------+
| 2020-01-11 09:53:32 | ------+---------+
set time_zone='+8:00';
+---------+--------------- --------+| 날짜_시간 | 시간_스탬프 |
+---------+------------ --------+
| 2020-01-11 09:53:32 | 2020-01-11 17:53:32 |
+------------ ------+---------+
확장: MySQL 시간대 설정에 대한 몇 가지 일반적인 sql 명령
1 . 현재 세션 시간대를 확인하세요SELECT @@session.time_zone;
SET time_zone = 'Europe/Helsinki'; SET time_zone = "+00:00";
SELECT @@global.time_zone;
SET GLOBAL time_zone = '+8:00'; SET GLOBAL time_zone = 'Europe/Helsinki';
DateTime
:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
Timestamp
3. MySQL 날짜 유형의 저장 공간을 다시 살펴보겠습니다
다음 그림은 MySQL 5.6 버전에서 날짜 유형이 차지하는 저장 공간을 보여줍니다.
MySQL 5.6 이후부터 볼 수 있습니다. 4 하나 더 필요합니다. 0 ~ 3 바이트의 소수점 이하 자릿수입니다. DataTime과 Timestamp는 저장 시 서로 다른 저장 공간을 차지합니다.
4. 숫자 타임스탬프가 더 나은 선택인가요?
시간을 나타내기 위해 int 또는 bigint 유형 값, 즉 타임스탬프를 사용하는 경우도 많습니다.
이 저장 방법은 Timestamp 유형의 몇 가지 장점이 있으며 이를 사용하여 날짜 정렬 및 비교 작업을 수행하는 것이 더 효율적이며 시스템 전반에 걸쳐 매우 편리합니다. 결국 이는 저장된 값일 뿐입니다. 단점도 뚜렷하다. 즉, 데이터의 가독성이 너무 떨어지고, 특정 시간을 직관적으로 확인할 수 없다는 점이다.
타임스탬프의 정의는 다음과 같습니다.타임스탬프의 정의는 기본 시간부터 시작됩니다. 이 기준 시간은 "1970-1-1 00:00:00 +0:00"입니다. time 처음에는 초 단위로 측정되는 정수로 표시되지만 시간이 지날수록 계속해서 증가하는 정수입니다. 이렇게 하면 시간을 완벽하게 표현하기 위해서는 하나의 값만 있으면 되는데, 이 값은 절대값, 즉 지구 어느 구석에 있든 시간을 나타내는 타임스탬프는 동일하게 생성되는 값입니다. 모두 동일하며, 시간대에 대한 개념이 없으므로 시스템에서 시간을 전송하는 동안 별도의 변환이 필요하지 않습니다. 사용자에게 표시될 때 문자열 형식으로 현지 시간으로만 변환됩니다.
mysql> select UNIX_TIMESTAMP('2020-01-11 09:53:32'); +---------------------------------------+ | UNIX_TIMESTAMP('2020-01-11 09:53:32') | +---------------------------------------+ | 1578707612 | +---------------------------------------+ 1 row in set (0.00 sec) mysql> select FROM_UNIXTIME(1578707612); +---------------------------+ | FROM_UNIXTIME(1578707612) | +---------------------------+ | 2020-01-11 09:53:32 | +---------------------------+ 1 row in set (0.01 sec)
5. 요약
타임스탬프를 권장합니다. 시간의 숫자 표현이 충분히 직관적이지 않기 때문입니다.
각 방법에는 고유한 장점이 있으며 가장 좋은 방법은 실제 시나리오를 기반으로 합니다. 실제 개발 시 저장 시간에 맞는 올바른 데이터 유형을 선택하는 데 도움이 되도록 이 세 가지 방법을 간단하게 비교해 보겠습니다.
🎜🎜[mysqld] sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
위 내용은 MySQL 데이터베이스에 시간을 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!