【问题标题】:MySQL Error Code: 1265. Data truncated for column 'prod_code' at row 7MySQL 错误代码:1265。第 7 行的列“prod_code”的数据被截断
【发布时间】:2016-06-11 15:34:13
【问题描述】:

我正在使用 MySQL Workbench 5.7

我创建了下表并存储了过程:

DROP TABLE MV_SALESBYMONTH;
CREATE TABLE MV_SALESBYMONTH
(
`time_year` int, `time_month` int, `prod_code` int,`sale_units` int, `sale_price` int);

DELIMITER $$
CREATE procedure `REFRESH_MV_SALESBYMONTH` () BEGIN 

    TRUNCATE TABLE `MV_SALESBYMONTH`;

    INSERT INTO MV_SALESBYMONTH 
    (SELECT TIME_YEAR AS 'YEAR', TIME_MONTH AS 'MONTH', PROD_CODE AS 'PRODUCT',
    SUM(SALE_UNITS) AS 'UNITS SOLD', SUM(SALE_UNITS*SALE_PRICE) AS 'SALES TOTAL'
    FROM TIME T, SALES S
    WHERE S.TIME_ID = T.TIME_ID
    GROUP BY TIME_YEAR, TIME_MONTH, PROD_CODE);
END $$
DELIMITER ;

第 5 步:使用实体化视图

CALL REFRESH_MV_SALESBYMONTH();

SELECT * FROM MV_SALESBYMONTH;

当我尝试运行语句时:

CALL REFRESH_MV_SALESBYMONTH();

我收到错误 1265:第 7 行的列“prod_code”的数据被截断

【问题讨论】:

  • sales.prod_code 列的数据类型是什么?
  • 看表:MV_SALESBYMONTH:prod_code是一个整数。创建表 MV_SALESBYMONTH (time_year int, time_month int, prod_code int,sale_units int, sale_price int);
  • PROD_CODETIME T, SALES S 是什么类型? (使用表别名使查询更具可读性。)
  • 我收到了这个 SELECT 语句,我必须从中创建我在上面发布的程序:SELECT TIME_YEAR AS "YEAR", TIME_MONTH AS "MONTH", PROD_CODE AS "PRODUCT", SUM(SALE_UNITS) AS “UNITS SOLD”,SUM(SALE_UNITS*SALE_PRICE) 作为“SALES TOTAL”从时间 T,SALES S WHERE S.TIME_ID = T.TIME_ID GROUP BY TIME_YEAR、TIME_MONTH、PROD_CODE;
  • 该 select 语句正在查看一个名为 sales 的表。这就是数据的来源,它来自哪里。检查该表以检查数据类型。当我们要求提供不存在的缺失信息时,为什么要重复您已在原始问题中发布的信息?

标签: mysql stored-procedures


【解决方案1】:

在 create table 语句中将 prod_code 定义为 varchar(100)。这样它就可以在源数据中保存尽可能多的字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多