雄辩的不会运行查询来建立系统版本控制

时间:2019-02-06 19:27:39

标签: laravel-5 eloquent mariadb


编辑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命令行客户端中运行时,查询可以正常工作。

0 个答案:

没有答案