数据库及数据类型(数据库即将被淘汰的几种数据类型)

朋友们,关系型数据库已经有几十年的发展历史了。我们所熟知的Oracle、SQL Server、PostgreSQL、MySQL等主流数据库,都支持非常丰富的数据类型。有些数据类型出现的比较早,后续发展中因存在缺陷,列入被逐步淘汰序列

即将淘汰的数据类型及替代类型

数据库及数据类型(数据库即将被淘汰的几种数据类型)(1)

比如在SQL Server 2000及之前,我们要处理大文本或二进制数据,要用到text、ntext和image字段。用过的朋友都知道,这些字段虽然可以存储大值数据,但用起来却非常麻烦。比如我们把字符串放在text字段中,处理时还需要使用专用函数,效率也比较低,给我们工作带来很多不便。

从SQL Server 2005开始,引入了max说明符,max扩展了三种数据类型,用来替换原来的text、ntext和image字段,它们分别是varchar(max)、nvarchar(max)和varbinary(max)字段。这些大值数据类型可以存储最大为 2^31-1 个字节的数据

原数据类型与新类型对应关系为:

text->varchar(max)

ntext->nvarchar(max)

image->varbinary(max)

数据库及数据类型(数据库即将被淘汰的几种数据类型)(2)

用过varchar类型的朋友,您一定会觉处理起来非常得心应手,varchar结构简单,而且有丰富的字符串函数支持,你想做的基本没有做不到的。而varchar(max)用法与varchar一样,您终于可以放心抛弃令人讨厌的text类型了。

旧类型到新类型的转换方式

如果您原来用的字段类型是text,要提换成varchar(max)非常简单,直接使用:

cast(text类型 as varchar(max))

即可,同理,如果您原来使用的字段类型是ntext,要替换成nvarchar(max)也非常简单,可使用:

cast(ntext类型 as nvarchar(max))

即可,image类型转varbinary(max)也是同理,使用:

cast(image类型 as varbinary(max))

即可。这种转换非常关键,特别是在您准备升级数据库、更改字段数据类型时。

数据库及数据类型(数据库即将被淘汰的几种数据类型)(3)

怎么样,是不是感觉很简单,而且还有更诱人的呢:varbinary(max)可以转换为varchar(max),您只需要使用:

cast(varbinary(max) as varchar(max))

即可。至此,三种旧类型和三种新类型之间所有的转换,我们都全部打通了!

了解了以上的转换关系,我们要做数据类型之间的转换,就非常简单了。

下面我们做一下实战。如果您准备以后升级数据库、更换字段类型,您一定要掌握各种类型之间的转换技巧!

数据类型转换实战

简单的转换我们就不说了,直接上一个难点儿的,比如从image转为varchar(max)应该如何处理呢?

当然,直接从image转varchar(max)肯定是行不通的,我们必须首先将image转为varbinary(max),再从varbinary(max)转为varchar(max)。

为了方便演示,我们创建一个简单的表变量,脚本如下:

declare @data table( FSerial int identity(1,1), FData image ); insert into @data(FData) values('向3月31日凉山木里火灾牺牲的英雄致敬!');

运行效果如下图所示:

数据库及数据类型(数据库即将被淘汰的几种数据类型)(4)

要将image类型转换为text,我们需要这样写:

select cast(cast(FData as varbinary(max)) as varchar(max)) from @data;

先将FData字段从image转为varbinary(max)、再一次转换为varchar(max)即可,运行效果如下图所示:

数据库及数据类型(数据库即将被淘汰的几种数据类型)(5)


如果您要升级数据库、更换字段类型,直接在管理器中设计修改就行了。但只能对照替换关系修改,即text->varchar(max)、ntext->nvarchar(max)、image->varbinary(max),管理器会自动把数据进行转换。

如果您不放心,可以使用新类型创建新表,把转换后的数据写SQL导进去,检测无误后删除旧表,再修改新表名称为旧表名称即可。

如果要转换的字段不多,您可以在原表上增加新类型的字段,写SQL将旧字段转换类型后更新到新字段,检测无误后删除旧字段,再将新表名称改回旧表名称即可

希望对您有所帮助!

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页