Cannot add or update a child row: a foreign key constraint fails 一个让我想象不到的原因

关于这个问题出现的原因如下图所示
在这里插入图片描述
一般来讲,主要的就是因为第三点,简单的说就是子表的字段中有一些值,在父表中找不到,所以就会导致这种错误

说一下我遇到的情况:
sql语句在idea Database工具 和Navicat 查询窗口都能正常执行,但是在代码中使用prepareStatement执行就会出错

一开始我是直接排除了两表值不匹配的原因,因为我在mysql工具中是完全可以执行的,然后我就完全把方向搞反了,换驱动,删表建表,乱七八糟的方法都试,没用!冷静下来一想,是不是编码问题,这是我最开始测试的sql

insert into tb_student(student_id, student_name,student_sex, grade, classe, major_id, major_name, department_id, department_name) values('20180011','张三','男',2018,1,13,'软件开发','01','计算机学院')

我把这里面的中文全部换成字母和数字,在对应的主表里添加上数据,果不其然,使用ps插入成功了,为了进一步验证我的想法,我在使用ps插入之前,使用SET FOREIGN_KEY_CHECKS=0;把外键约束关闭了,将中文插入进去以后,表中显示的是
在这里插入图片描述
中文全部都成了 ?,这波石锤,必是编码问题!
所以,大家在遇到和我相同的问题时,如果尝试了一些方法没有用,可以把外键约束关了,强制插入中文试试,看看是不是出现了乱码

在解决乱码问题时,出现了一个新的问题,我把idea 和 mysql全局设置为utf8编码后,这时插入中文不再显示问号(关闭外键约束),但依然乱码
在这里插入图片描述
由于我这个项目是从github拉下来的,一开始是gbk编码,我把编码改回gbk,它插入反而正常了,我不知道为什么,希望好心人能留言告诉我Thanks♪(・ω・)ノ
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鑫宇_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值