it-source

MariaDB/MySql의 가상(계산) 컬럼에서 UNIX_TIMESTamp 사용

criticalcode 2022. 10. 20. 21:17
반응형

MariaDB/MySql의 가상(계산) 컬럼에서 UNIX_TIMESTamp 사용

타임스탬프 컬럼과 같은 시간의 타임스탬프를 사용하여 행을 그룹화하기 위한 도우미 키를 유지하는 가상(계산된) 컬럼을 사용하여 테이블을 작성하려고 합니다.이를 위해 MariaDB/MySql에서 다음 명령을 사용합니다.

CREATE TABLE mytable(t TIMESTAMP, u INT AS (UNIX_TIMESTAMP(t) DIV 3600);

그러면 다음 오류가 반환됩니다.

ERROR 1901 (HY000): Function or expression is not allowed for column 'u'

설명서에 따르면 이 방법이 작동하지 않는 이유를 알 수 없습니다.좋은 생각 있어요?

대체...

(UNIX_TIMESTAMP(t) DIV 3600)

...이걸로...

(TIMESTAMPDIFF(HOUR,'1970-01-01 00:00:00',t))

MariaDB 10.1.14에서 확인되었습니다.이후 버전에서는 동작합니다.

부터1970-01-01 00:00:000UNIX_TIMESTAMP(),그리고.DIV 3600정수 나눗셈의 경우, 당신의 표현은 다음과 같습니다.FLOOR()1970-01-01 00:00:00 이후 시간 및TIMESTAMPDIFF()는 같은 값을 제공하는 것 같습니다.

MariaDB에서UNIX_TIMESTAMP()비논리적이기 때문에 인수가 제공되면 올바르지 않습니다.MySQL 코어에는 내장 함수를 "결정론적인" 것으로 간주하는 기능이 없거나 버그일 수 있습니다.

하지만 난 네가 이 문제를 해결할 수 있을 것 같습니다TIMESTAMPDIFF().

주의: 또, 다음과 같은 것이 필요한 것 같습니다.PERSISTENT키워드. 그렇지 않으면 값이 저장되지 않기 때문에 가상 열을 인덱싱할 수 없습니다.

ERROR 1901: Key/Index cannot be defined on a non-stored computed column

언급URL : https://stackoverflow.com/questions/43167009/using-unix-timestamp-in-a-virtual-calculate-column-in-mariadb-mysql

반응형