>데이터 베이스 >MySQL 튜토리얼 >2038년 문제의 원인과 결과, 해결책은 무엇인가?

2038년 문제의 원인과 결과, 해결책은 무엇인가?

Linda Hamilton
Linda Hamilton원래의
2024-12-10 02:42:09564검색

What are the causes, consequences, and solutions for the Year 2038 problem?

2038년 버그: 문제 및 사용 가능한 해결 방법 이해

2038년 문제는 부호 있는 32비트 정수를 널리 사용하는 데서 발생합니다. 1970년 1월 1일을 원점으로 설정하여 시스템 시간을 나타냅니다. 이 에포크 이후의 초 수가 초과되면 32비트 정수의 최대값을 사용하면 이러한 시스템은 심각한 문제에 직면하게 됩니다.

발생 및 영향

2038년 1월 19일 화요일 03:14: 07 UTC, 시간을 나타내는 32비트 정수가 오버플로되어 시스템이 이를 음수로 해석하게 됩니다. 그러면 날짜와 시간이 1901년 12월 13일에 해당하는 값으로 저장됩니다.

완화 전략

이 문제를 해결하기 위해 다음과 같은 몇 가지 접근 방식을 사용할 수 있습니다.

  • 64비트 데이터 사용 유형: 날짜와 시간을 저장하기 위해 긴 데이터 유형을 구현하면 향후 확장을 위한 충분한 공간이 보장됩니다.
  • MySQL/MariaDB 대안: 시간에 중요하지 않은 애플리케이션의 경우 DATE 열을 사용하세요. 유형. 정확도를 높이려면 TIMESTAMP 대신 DATETIME을 사용하세요.
  • MySQL 업그레이드: 2038년 이후의 날짜를 처리하기 위한 수정 사항이 포함되어 있으므로 MySQL 8.0.28 이상으로 업그레이드하세요.

2038년의 대안-프론 유형

가능한 한 데이터베이스 저장에 대용량 데이터 유형을 사용하는 것을 고려하세요. 예는 다음과 같습니다.

  • GNU C 및 POSIX/SUS에서는 long long 유형을 사용합니다.
  • PHP에서는 sprintf('%u'...) 또는 BCmath 확장을 사용합니다. .

레거시 애플리케이션

TIMESTAMP를 활용하는 레거시 애플리케이션을 수정하려면 신중한 고려가 필요합니다. 대신 DATETIME을 사용하는 것이 더 넓은 범위의 날짜를 처리하므로 고려해 보세요.

기존 TIMESTAMP 필드를 DATETIME으로 변환하려면 다음 단계를 따르세요.

  1. 기존 TIMESTAMP 필드를 저장할 임시 열을 만듭니다. TIMESTAMP 데이터.
  2. 원래 TIMESTAMP와 이름이 같은 새 DATETIME 열을 추가합니다. 열.
  3. 임시 열의 데이터를 사용하여 새 DATETIME 열을 업데이트합니다.
  4. 임시 열을 제거합니다.

추가 정보 리소스

  • 2038년 문제(Wikipedia): https://en.wikipedia.org/wiki/Year_2038_problem
  • 인터넷은 30년 안에 끝날 것입니다: https://spectrum.ieee.org/tech-talk/telecom/internet/the-internet-will -30년 만에 종료

위 내용은 2038년 문제의 원인과 결과, 해결책은 무엇인가?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.