shell提取json字段值和字段_三大关系数据库字段值超长的一个有趣对比

在SQL开发中,我们可能会遇到插入字段值超长的情况,前阵子遇到这样一个案例,结果一对比后发现一个有趣的现象,如果插入字段值超长,ORACLE、SQL Server、MySQL它们会提示那个字段值超长吗?下面看看实验吧:

ORACLE数据库

SQL> create table test(id number(10), name varchar2(12));
 
Table created.
 
SQL> insert into test
  2  select 10, 'kkkkkkkkkkkkkkkkkk' from dual;
select 10, 'kkkkkkkkkkkkkkkkkk' from dual
           *
ERROR at line 2:
ORA-12899: value too large for column "SYS"."TEST"."NAME" (actual: 18, maximum:
12)

如上所示,Oracle在错误信息中会提示、告诉你哪个具体字段超长。

MySQL数据库

SQL> create table test(id number(10), name varchar2(12));
 
Table created.
 
SQL> insert into test
  2  select 10, 'kkkkkkkkkkkkkkkkkk' from dual;
select 10, 'kkkkkkkkkkkkkkkkkk' from dual
           *
ERROR at line 2:
ORA-12899: value too large for column "SYS"."TEST"."NAME" (actual: 18, maximum:
12)

如上所示,MySQL在错误信息中也会提示、告诉你哪个具体字段超长。

SQL Server数据库

USE  AdventureWorks2014;
GO
 
CREATE TABLE TEST(ID int, NAME varchar(12));
 
INSERT INTO dbo.TEST 
SELECT 100,'kkkkkkkkkkkkkkkkkkkkkkkkk'
 
Msg 8152, Level 16, State 14, Line 6
String or binary data would be truncated.
The statement has been terminated.

3ff2be2b22dbe7c55bcd0cac926113c3.png

如上实验所示,ORACLE、MySQL都会提示具体字段超长的细节信息,而SQL Server就傻傻的提示“String or binary data would be truncated.” 如果你表结构字段有十几个或几十个字段,那么就一个个核对吧。是不是有点抓狂!不吹不黑,其实SQL Server有蛮多不友好、甚至让人诟病的地方。举个例子,使用SqlBulkCopy插入数据时,遇到错误“数据源的 String 类型的给定值不能转换为指定目标列的类型xxx”, 有可能是目标表字段的长度比要导入的数据长度小或者其它原因,难道准确、友好的提示具体出错信息那么难?还有使用SqlbulkCopy有时候提示“给定的 ColumnMapping 与源或目标中的任意列均不匹配”, 你妹啊,这不是坑爹吗!这些都是一些细节地方,有时候真的细节见高低!此文权当吐槽篇!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值