source

mysql 8.0은 이 SQL 스크립트를 실행할 수 있지만 mariaDB 5.5는 실행할 수 없고 오류: 1064(42000)

manycodes 2023. 8. 14. 22:59
반응형

mysql 8.0은 이 SQL 스크립트를 실행할 수 있지만 mariaDB 5.5는 실행할 수 없고 오류: 1064(42000)

CREATE TABLE `t_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`runningTime` bigint(20) DEFAULT '0' COMMENT 'device running time',
  `firstLoginTime` varchar(255) NOT NULL DEFAULT (`date_format`(now(), '%Y-%m-%d %T')) comment 'device first login server time',
  `lastLoginTime` varchar(255) NOT NULL DEFAULT (`date_format`(now(), '%Y-%m-%d %T')) comment 'device last login server time',
  `lastOfflineTime` varchar(255) NOT NULL DEFAULT (`date_format`(now(), '%Y-%m-%d %T')) comment 'device last offline from server time',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

이 스크립트는 mycreate TABLE sql이며 mysql 8.0에서는 실행할 수 있지만 mariaDB 5.5에서는 실행할 수 없으며 오류:

ERROR 1064 (42000) at line 27 in file: 'initEmgrTable_rel.sql': You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '(`date_format`(now(), '%Y-%m-%d %T')),
  `lastLoginTime` varchar(255) NOT NULL D' at line 34

10.0 이전 mysql에서는 함수 또는 상수 이외의 다른 것을 사용할 수 없습니다.

해당 열의 값을 지정하지 않고 행을 삽입하거나 해당 열의 DEFAULT를 지정한 경우 기본값이 사용됩니다.

MariaDB 10.2.1 이전에는 삽입 시 평가할 식을 제공하거나 함수를 제공할 수 없었습니다.대신 일정한 기본값을 제공해야 했습니다.한 가지 예외는 삽입 시 현재 타임스탬프를 사용하기 위해 TIMESTAMP 열의 기본값으로 CURRENT_TIMESTAMP를 사용할 수 있다는 것입니다.설명서의 상태로 표시

날짜 시간을 저장하고 쿼리할 때 변환

다음은 10.2 이후 mariadb에만 유효합니다.

date_format 주변의 백스틱을 제거해야 합니다.

https://dbfiddle.uk/ ?rdbms=httpadb_10.3&httpdle=d0c43ed5b5fc8e7a2332a61a31bd127d를 참조하십시오.

CREATE TABLE `t_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`runningTime` bigint(20) DEFAULT '0' COMMENT 'device running time',
  `firstLoginTime` varchar(255) NOT NULL DEFAULT (date_format(now(), '%Y-%m-%d %T')) comment 'device first login server time',
  `lastLoginTime` varchar(255) NOT NULL DEFAULT (date_format(now(), '%Y-%m-%d %T')) comment 'device last login server time',
  `lastOfflineTime` varchar(255) NOT NULL DEFAULT (date_format(now(), '%Y-%m-%d %T')) comment 'device last offline from server time',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;

이 쿼리는 작동합니다.

CREATE TABLE `t_test` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `runningTime` bigint(20) DEFAULT '0' COMMENT 'device running time',
  `firstLoginTime` varchar(250) NOT NULL DEFAULT 'date_format(now(), ''%Y-%m-%d %T'')' COMMENT 'device first login server time',
  `lastLoginTime` varchar(250) NOT NULL DEFAULT 'date_format(now(), ''%Y-%m-%d %T'')' COMMENT 'device last login server time',
  `lastOfflineTime` varchar(250) NOT NULL DEFAULT 'date_format(now(), ''%Y-%m-%d %T'')' COMMENT 'device last offline from server time',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

언급URL : https://stackoverflow.com/questions/61271591/mysql-8-0-can-run-this-sql-script-but-in-mariadb-5-5-cant-run-and-error1064-4

반응형