MYSQL插入数据时原始数据的null无法识别

文章讲述了在MySQL中遇到的错误,因尝试将字符串null插入int类型的字段,解决方法是使用IF函数判断并转换。原由是数据库中的JSON数据导致null被识别为字符串。

1.问题描述

我有一个status的字段,建表时候数据类型为int(4),在插入数据的时候报了如下错误, 原因: SQL 错误 [1366] [HY000]: Incorrect integer value: 'null' for column 'status' at row 13’

2.问题分析

这个错误提示表明在插入数据时,尝试将字符串值 'null' 插入到一个数据类型为int的字段 'status' 中,这是不允许的,因为 'null' 不是一个有效的整数值。

all in all,在mysql里NULL才是关键字空值,null是字符串,所以问题的关键是应该在status里数据位null时候转换为NULL

3.问题背景:

1.原始库是json格式

2.结构化的数据

 可以看到问题出在null被识别成了字符串

3.错误的语句是:

INSERT INTO an_feb_ods_hetong.ht_attachment (
    status
)
SELECT
    
   JSON_UNQUOTE(JSON_EXTRACT(json, '$.status'))) AS status
   
FROM an_hetong.ht_attachment;

4.问题解决方法

用一个if语句即可解决这个问题,在SQL语句中,使用了IF函数来判断是否将字符串 'null' 转换为NULL值,并在插入时将 'status' 列的值直接放入列中。

INSERT INTO an_feb_ods_hetong.ht_attachment (
  
    status
)
SELECT
    
    IF(JSON_UNQUOTE(JSON_EXTRACT(json, '$.status')) = 'null', NULL, JSON_UNQUOTE(JSON_EXTRACT(json, '$.status'))) AS status
   
FROM an_hetong.ht_attachment;

使用以上sql后结构化数据:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值