应用错误1677:表`sales_orders`的第59列无法从类型`datetime`转换为类型`varchar(10)`

时间:2018-05-04 04:43:45

标签: mysql amazon-rds

当我在 Amazon RDS只读副本上执行以下查询时,它会给我一个错误

Apply Error 1677: Column 59 of table sales_orders cannot be converted from type datetime to type varchar(10)

查询我在只读副本上执行

ALTER TABLE `sales_orders` 
ADD COLUMN `dw_base_currency` VARCHAR(10) NULL AFTER `source`,
ADD COLUMN `dw_base_total` DECIMAL(12,4) NULL AFTER `dw_base_currency`;

我已经检查了mysql replication (TokuDB replica): Column X of table 'database.table' cannot be converted from type 'varchar(Y)' to type 'varchar(Y)'中回答中描述的表格的字符集,但在我的情况下,表格的字符集是相同的。

1 个答案:

答案 0 :(得分:0)

当复制查询引起的更改时,如果主服务器选择以ROW格式记录事件,则列名不会写入日志 - 只会按顺序排列的值按顺序排列。表定义中的每一列。

这意味着副本可以包含比主服务器更多或更少的列,但如果是,则必须将差异限制在表中最右边的列。

您对副本的更改显然在中间某处引入了新列,但这无效。

  

您可以将表从主服务器复制到从服务器,以使表的主副本副本具有不同数量的列,具体取决于以下条件:

     
      
  • 必须在主服务器和从服务器上以相同的顺序定义表的两个版本共有的列。
  •   
     

(即使两个表的列数相同,也是如此。)

     
      
  • 必须在任何其他列之前定义表的两个版本共有的列。
  •   
     

这意味着在从属服务器上执行ALTER TABLE语句,其中在两个表共有的列范围内将新列插入表中会导致复制失败[...]

     

https://dev.mysql.com/doc/mysql-replication-excerpt/5.7/en/replication-features-more-columns.html