mysql 截断 清空_有关Mysql数据截断问题的处理方法

测试数据:

有一个表aritcle和另一个表article_comment,关联是article的id。

创建测试表及添加测试数据:

表1:

复制代码 代码示例:

CREATE TABLE `article` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(200) NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB;

表2:

复制代码 代码示例:

CREATE TABLE `article_comment` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`text` varchar(200) NOT NULL,

`article_id` int(10) unsigned NOT NULL,

PRIMARY KEY (`id`),

KEY `art_id` (`article_id`),

CONSTRAINT `art_id` FOREIGN KEY (`article_id`) REFERENCES `article` (`id`) ON DELETE CASCADE ON UPDATE CASCADE

) ENGINE=InnoDB;

添加测试数据:

复制代码 代码示例:

set sql_mode='';

insert into article values(12345678901,'name1');

insert into article_comment(text,article_id) values('text1',12345678901);

insert into article_comment(text,article_id) values('text2',12345678902);

查看数据:

1,article表

4294967295 name1

2,article_comment表

1 text1 4294967295

2 text2 4294967295可以看出,本来第二个插入的评论想关联另一个文章,但是却关联到了第一篇文章,这是因为Mysql的Data Truncation截断的原因。

show warnings显示

Warning | 1265 | Data truncated for column 'article_id' at row 1造成:

1,评论关联到错误的文章

2,同一篇文章关联到许多的评论(这会造成性能问题)

解决方法:

复制代码 代码示例:

set sql_mode='STRICT_ALL_TABLES';

insert into article_comment(text,article_id) values('text1',12345678903);

这会报错:

[SQL] insert into article_comment(text,article_id) values('text1',12345678903);

[Err] 1264 - Out of range value for column 'article_id' at row 1如此,便避免了上述问题的出现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值