MariaDB Timestamp Y2K38
Whatโs Y2K38 ???
Timestamps in MariaDB have a maximum value of 2147483647, equivalent to 2038-01-19 05:14:07. This is due to the underlying 32-bit limitation. Using the function on a date beyond this will result in NULL being returned. Use DATETIME as a storage type if you require dates beyond this.
2038๋ ๋ฌธ์ ๋ ์๊ฐ์ 32๋นํธ ์ ์ํ์ผ๋ก ํํํ๋ ์์คํ ์์ ๋ฐ์ํ๋ ๋ฌธ์ ์ด๋ค. MariaDB(MySQL)์ ์๊ฐ์ ํํํ๋ ๊ฒฝ์ฐ ๋ฌธ์์ด๋ก ์ ์ฅ๋๋ DATETIME๊ณผ UTC๋ก ์ ์ฅ๋๋ TIMESTAMP๋ฅผ ์ฌ์ฉํ ์ ์๋๋ฐ TIMESTAMP ํ์์ 4๋ฐ์ดํธ๋ก ์ ์ฅ๋๋ค. ๋ฐ๋ผ์, DATETIME์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ๊ณ ํ๋ ํธ์ด๋ฉฐ DATETIME์ ๋ฌธ์์ด๋ก ์ ์ฅ๋๋ฏ๋ก DATETIME์ ์ ์ฅํ๋ ์์ ์ UTC๋ก ์ ์ฅ๋ ์ ์๋๋ก ํ์์กด์ UTC๋ก ์ค์ ํ๋ ๊ฒ ์ข๋ค.
MariaDB ํ์์กด์ UTC๊ฐ ์๋ Aisa/Seoul๋ก ์ค์ ํ๋ ๊ฒฝ์ฐ์๋ SQL ์กฐํ ์ CONVERT_TZ ํจ์๋ฅผ ๋งค๋ฒ ์ฌ์ฉํด์ผํ ํ์๊ฐ ์๋ค.
Example
SHOW VARIABLES LIKE '%time_zone%';
-- timezone: Asia/Seoul
CREATE OR REPLACE TABLE test
(
id BIGINT AUTO_INCREMENT NOT NULL PRIMARY KEY COMMENT 'ID',
name VARCHAR(50) NULL COMMENT 'Name',
created_at DATETIME NOT NULL DEFAULT now()
);
INSERT INTO test (name) VALUES ('mambo');
SELECT convert_tz(created_at, '+09:00', '+00:00') AS created_at FROM test;
-- created_at,created_at_utc
-- 2023-09-24 16:36:30,2023-09-24 07:36:30