MySQL Workbench错误代码:1074。列长度对于列而言太大

时间:2019-02-20 15:47:43

标签: mysql sql mysql-workbench union

我正在尝试从MySQL Workbench(版本8.0.13)中的表创建报告,并在此过程中通过选择创建多个表:

CREATE TABLE new_table 
AS 
(SELECT 
process, 
owner, 
... 
COUNT(*) AS number_of_s,
AVG(pay) AS avg_pay, 
SUM(labor_cost) AS sum_of_labor_costs
FROM
old_table
GROUP BY
process,
owner);

CREATE TABLE AS SELECT工作正常。

  

错误代码:1074。列长度对于列而言太大

当mysql工作台遇到类型为UNION的列时,当我尝试double(0,2)新建两个表时,抛出

所以当我跑步

CREATE TABLE new_table_by_month
SELECT 
* 
FROM 
new_table_by_month_1 
UNION 
SELECT 
* 
FROM new_table_by_month_2;

并且new_table_by_month_1和new_table_by_month_2具有相同的列,该过程将运行直到遇到sum_of_labor_costs(类型double(0,2)),然后返回错误: 错误代码:1074。列长度对于列sum_of_labor_costs(max = 65535)太大。改用BLOB或TEXT

我知道列类型可能是导致此错误的原因,但是为什么?这里是什么问题?

我如何优化UNION使其正常工作?

更新如果我不创建,请选择:

SELECT 
    * 
FROM 
    new_table_by_month_1 
UNION 
SELECT 
    * 
FROM new_table_by_month_2;

有效。当我想从select * from a union select * from b;创建一个new_table时发生

1 个答案:

答案 0 :(得分:1)

尝试使用子查询来构建主选择

    CREATE TABLE new_table_by_month
    SELECT *
    from (
      select  * 
      FROM  new_table_by_month_1 
      UNION 
      SELECT *  
      FROM new_table_by_month_2
    )  t 
    ;

这样,用于创建的数据类型应该更加清晰。 无论如何,请确保两个查询选择一致的和核心响应的数据类型。似乎您在选择与sum_of_labor_costs对应的错误列。.检查列数据类型的顺序是否相同 尝试反转

   CREATE TABLE new_table_by_month
    SELECT *
    from (
      select  * 
      FROM  new_table_by_month_2
      UNION 
      SELECT *  
      FROM new_table_by_month_1
    )  t 
    ;