朋友們,關系型數據庫已經有幾十年的發展曆史了。我們所熟知的Oracle、SQL Server、PostgreSQL、MySQL等主流數據庫,都支持非常豐富的數據類型。有些數據類型出現的比較早,後續發展中因存在缺陷,列入被逐步淘汰序列。
即将淘汰的數據類型及替代類型
比如在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)
用過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))
即可。這種轉換非常關鍵,特别是在您準備升級數據庫、更改字段數據類型時。
怎麼樣,是不是感覺很簡單,而且還有更誘人的呢: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日涼山木裡火災犧牲的英雄緻敬!');
運行效果如下圖所示:
要将image類型轉換為text,我們需要這樣寫:
select cast(cast(FData as varbinary(max)) as varchar(max)) from @data;
先将FData字段從image轉為varbinary(max)、再一次轉換為varchar(max)即可,運行效果如下圖所示:
如果您要升級數據庫、更換字段類型,直接在管理器中設計修改就行了。但隻能對照替換關系修改,即text->varchar(max)、ntext->nvarchar(max)、image->varbinary(max),管理器會自動把數據進行轉換。
如果您不放心,可以使用新類型創建新表,把轉換後的數據寫SQL導進去,檢測無誤後删除舊表,再修改新表名稱為舊表名稱即可。
如果要轉換的字段不多,您可以在原表上增加新類型的字段,寫SQL将舊字段轉換類型後更新到新字段,檢測無誤後删除舊字段,再将新表名稱改回舊表名稱即可。
希望對您有所幫助!
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!