三大关系数据库字段值超长的一个有趣对比
2017-10-02 09:23 潇湘隐者 阅读(1240) 评论(0) 编辑 收藏 举报三大关系数据库字段值超长的一个有趣对比
在开发中,我们可能会遇到插入字段值超长的情况,前阵子遇到这样一个案例,结果一对比后发现一个有趣的现象,如果插入字段值超长,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)
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)
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.
如上实验所示,ORACLE、MySQL都会提示具体字段超长的细节信息,而SQL Server就傻傻的提示“String or binary data would be truncated.” 如果你表结构字段有十几个,那么就一个个核对吧。 不吹不黑,其实SQL Server有蛮多不友好、甚至让人诟病的地方。举个例子,使用SqlBulkCopy插入数据时,遇到错误“数据源的 String 类型的给定值不能转换为指定目标列的类型xxx”, 有可能是目标表字段的长度比要导入的数据长度小或者其它原因,难道准确、友好的提示具体出错信息那么难?还有使用SqlbulkCopy有时候提示“给定的 ColumnMapping 与源或目标中的任意列均不匹配”, 你妹啊,这不是坑爹吗! 这些都是一些细节地方,有时候真的细节见高低!此文权当吐槽篇!

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战