MySQL 데이터베이스에 시간을 저장하는 방법

WBOY
풀어 주다: 2023-06-03 16:00:21
앞으로
1820명이 탐색했습니다.


    1. 날짜를 저장하는 데 문자열을 사용하지 마세요.

    문자열은 더 많은 공간을 차지합니다!

    문자열 저장의 날짜 비교 효율성은 상대적으로 낮으며(문자별 비교), 날짜 관련 API를 사용하여 계산하고 비교할 수 없습니다.

    2. Datetime과 Timestamp 중 선택

    Datetime과 Timestamp는 MySQL에서 제공하는 시간 저장을 위한 두 가지 유사한 데이터 유형입니다.

    둘 중에서 어떻게 선택하나요?

    일반적으로 Timestamp를 선호합니다

    2.1 DateTime 유형에는 시간대 정보가 없습니다

    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;
    로그인 후 복사

    2. 현재 세션 시간대를 설정하세요

        SET time_zone = 'Europe/Helsinki';
        SET time_zone = "+00:00";
    로그인 후 복사

    3. 데이터베이스 전역 시간대 설정

        SELECT @@global.time_zone;
    로그인 후 복사

    4. 전역 시간대를 설정하세요

        SET GLOBAL time_zone = '+8:00';
        SET GLOBAL time_zone = 'Europe/Helsinki';
    로그인 후 복사

    2.2 DateTime 유형이 더 많은 공간을 차지합니다

    Timestamp 4Byte의 저장 공간만 사용하면 되지만 DateTime은 8Byte의 저장 공간이 필요합니다. 그러나 이 접근 방식은 Timestamp의 시간 범위가 더 제한된다는 문제도 제기합니다.

    • <코드>날짜 시간: 1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

      DateTime :1000-01-01 00:00:00 ~ 9999-12-31 23:59:59

    • Timestamp

    • <코드>타임스탬프: 1970-01 -01 00:00:01 ~ 2037-12-31 23:59:59

    Timestamp는 MySQL 버전마다 미묘한 차이가 있습니다.

    3. MySQL 날짜 유형의 저장 공간을 다시 살펴보겠습니다

    다음 그림은 MySQL 5.6 버전에서 날짜 유형이 차지하는 저장 공간을 보여줍니다. MySQL 데이터베이스에 시간을 저장하는 방법

    MySQL 5.6 이후부터 볼 수 있습니다. 4 하나 더 필요합니다. 0 ~ 3 바이트의 소수점 이하 자릿수입니다. DataTime과 Timestamp는 저장 시 서로 다른 저장 공간을 차지합니다.

    편의를 위해 이 문서에서는 Timestamp에는 4바이트의 저장 공간만 필요하지만 DateTime에는 8바이트의 저장 공간이 필요하다고 기본값으로 설정했습니다.

    4. 숫자 타임스탬프가 더 나은 선택인가요?

    시간을 나타내기 위해 int 또는 bigint 유형 값, 즉 타임스탬프를 사용하는 경우도 많습니다.

    이 저장 방법은 Timestamp 유형의 몇 가지 장점이 있으며 이를 사용하여 날짜 정렬 및 비교 작업을 수행하는 것이 더 효율적이며 시스템 전반에 걸쳐 매우 편리합니다. 결국 이는 저장된 값일 뿐입니다. 단점도 뚜렷하다. 즉, 데이터의 가독성이 너무 떨어지고, 특정 시간을 직관적으로 확인할 수 없다는 점이다.

    타임스탬프의 정의는 다음과 같습니다.

    타임스탬프의 정의는 기본 시간부터 시작됩니다. 이 기준 시간은 "1970-1-1 00:00:00 +0:00"입니다. time 처음에는 초 단위로 측정되는 정수로 표시되지만 시간이 지날수록 계속해서 증가하는 정수입니다. 이렇게 하면 시간을 완벽하게 표현하기 위해서는 하나의 값만 있으면 되는데, 이 값은 절대값, 즉 지구 어느 구석에 있든 시간을 나타내는 타임스탬프는 동일하게 생성되는 값입니다. 모두 동일하며, 시간대에 대한 개념이 없으므로 시스템에서 시간을 전송하는 동안 별도의 변환이 필요하지 않습니다. 사용자에게 표시될 때 문자열 형식으로 현지 시간으로만 변환됩니다.

    데이터베이스의 실제 작업:

    mysql> select UNIX_TIMESTAMP(&#39;2020-01-11 09:53:32&#39;);
    +---------------------------------------+
    | UNIX_TIMESTAMP(&#39;2020-01-11 09:53:32&#39;) |
    +---------------------------------------+
    |                            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. 요약

    타임스탬프를 권장합니다. 시간의 숫자 표현이 충분히 직관적이지 않기 때문입니다.

    각 방법에는 고유한 장점이 있으며 가장 좋은 방법은 실제 시나리오를 기반으로 합니다. 실제 개발 시 저장 시간에 맞는 올바른 데이터 유형을 선택하는 데 도움이 되도록 이 세 가지 방법을 간단하게 비교해 보겠습니다. MySQL 데이터베이스에 시간을 저장하는 방법

    🎜🎜

    6.设置mysql date类型字段默认值支持0000格式

    [mysqld]
    sql-mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
    로그인 후 복사

    위 내용은 MySQL 데이터베이스에 시간을 저장하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:yisu.com
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿