编辑2019-02-12 T 17:26 Z:
请勿使用此代码,这很愚蠢。
出于疯狂,我决定尝试一下,主要是为了满足自己的好奇心:
exec(
'mysql -uuser -ppassword -e "USE database; CALL sys_vers(\'table_a\')"'
);
猜怎么着...
ERROR 1067 (42000) at line 1: Invalid default value for 'valid_from'
但是,将ALTER
查询本身放到exec
调用中似乎可行。即便如此,插入到现在版本化的表中也会引发更多错误。
Invalid datetime format: 1978
Incorrect default value
'0000-00-00 00:00:00.000000' column 'valid_from'
编辑2019-02-12 T 16:46 Z:
我已通过使用
调用查询将问题缩小到PDO DB::getFacadeRoot()->getPDO()->exec(...)
在执行ALTER
语句的服务器上设置存储过程后,我将运行
CALL sys_vers('table_a')
来自迁移。
这也失败,并显示相同的错误消息
SQLSTATE[42000]: Syntax error or access violation: 1067 Invalid default value for 'valid_from'
编辑2019-02-12 T 16:04 Z:
此后,我也尝试通过DB::unprepared
运行查询。
没有骰子。
我正在尝试通过迁移向某些表添加系统版本控制。为此,我在原始文件中运行以下查询:
DB::statement('SET @system_versioning_alter_history="keep";');
DB::statement(
<<<SQL
ALTER TABLE c_$tableName
ADD COLUMN valid_from TIMESTAMP(6) GENERATED ALWAYS AS ROW START,
ADD COLUMN valid_till TIMESTAMP(6) GENERATED ALWAYS AS ROW END,
ADD PERIOD FOR SYSTEM_TIME(valid_from, valid_till),
ADD SYSTEM VERSIONING;
SQL
);
DB::statement('SET @system_versioning_alter_history="error";');
但是,通过artisan
运行迁移只会引发此错误:
SQLSTATE[42000]: Syntax error or access violation:
1067 Invalid default value for 'valid_from'
(SQL: ALTER TABLE c_test_versions
ADD COLUMN valid_from TIMESTAMP(6) GENERATED ALWAYS AS ROW START,
ADD COLUMN valid_till TIMESTAMP(6) GENERATED ALWAYS AS ROW END,
ADD PERIOD FOR SYSTEM_TIME(valid_from, valid_till),
ADD SYSTEM VERSIONING;)
我希望查询能够正常工作,因为从错误消息中复制出来并在mysql
命令行客户端中运行时,查询可以正常工作。