Data truncation: Truncated incorrect INTEGER value: ‘2001d2s4‘;

在写SQL语句做测试时报了题目这样的错误,说是Truncated incorrect INTEGER value: '2001d2s4';即截断不正确的INTEGER值:'2001d2s4';

语句的目的是把select出来的结果insert到一个表中。


出此问题的语句是以下三句:

1. 
INSERT INTO nyftest.sc ( sno, cno ) SELECT
sno,
cno 
FROM
	nyftest.sct 
WHERE
	tno IN ( SELECT tno FROM nyftest.teacher WHERE tname IS NOT NULL );

译为:
INSERT INTO nyftest.sc ( sno, cno ) SELECT
( CASE WHEN sno = '' THEN NULL ELSE sno END ) sno,
( CASE WHEN cno = '' THEN NULL ELSE cno END ) cno 
FROM
	nyftest.sct 
WHERE
	( CASE WHEN tno = '' THEN NULL ELSE tno END ) IN (
SELECT
	( CASE WHEN tno = '' THEN NULL ELSE tno END ) tno 
FROM
	nyftest.teacher 
WHERE
	( CASE WHEN tname = '' THEN NULL ELSE tname END ) IS NOT NULL 
	);

2. 
INSERT INTO nyftest.sc ( sno, cno ) SELECT
sno,
cno 
FROM
	nyftest.sct 
WHERE
	tno IN ( SELECT tno FROM nyftest.teacher );

译为:
INSERT INTO nyftest.sc ( sno, cno ) SELECT
( CASE WHEN sno = '' THEN NULL ELSE sno END ) sno,
( CASE WHEN cno = '' THEN NULL ELSE cno END ) cno 
FROM
	nyftest.sct 
WHERE
	( CASE WHEN tno = '' THEN NULL ELSE tno END ) IN ( SELECT ( CASE WHEN tno = '' THEN NULL ELSE tno END ) tno FROM nyftest.teacher );


3. 
INSERT INTO nyftest.sc ( sno, cno ) SELECT
sno,
cno 
FROM
	nyftest.sct 
WHERE
	sno IS NOT NULL;

译为:
INSERT INTO nyftest.sc ( sno, cno ) SELECT
( CASE WHEN sno = '' THEN NULL ELSE sno END ) sno,
( CASE WHEN cno = '' THEN NULL ELSE cno END ) cno 
FROM
	nyftest.sct 
WHERE
	( CASE WHEN sno = '' THEN NULL ELSE sno END ) IS NOT NULL;

其中select语句的执行并没有问题,但是在想要把select的结果插入到另外一个表中的时候,就会出现截断INTEGER的这种错误,尽管的我SQL语句中并没有INTEGER类型的值,出错的语句一般都是select语句中的where部分后面跟了is not null。

查了很多帖发现应该是mysql的bug,详情参见此链接https://bugs.mysql.com/bug.php?id=76353

该链接中说,可以为数据库更改一个名为“sql_mode”的变量值,当为其赋值为空时,insert操作不会再报错误而是报警告,暂时不知道更改了sql_mode之后会不会影响到其他的一般SQL操作。问过别人说这个改了之后就影响了提示级别,所以不建议改。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值