亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

SQL Server中char、varchar、text和nchar、nvar

系統 1953 0

轉: http://blog.csdn.net/jackychu/article/details/4183118

http://www.cnblogs.com/jhxk/articles/1633578.html

很多開發者進行數據庫設計的時候往往并沒有太多的考慮char, varchar類型,有的是根本就沒注意,因為存儲價格變得越來越便宜了,忘記了最開始的一些基本設計理論和原則,這點讓我想到了現在的年輕人,大手一揮 一把人民幣就從他手里溜走了,其實我想不管是做人也好,做開發也好,細節的把握直接決定很多東西。當然還有一部分人是根本就沒弄清楚他們的區別,也就隨便 選一個。在這里我想對他們做個簡單的分析,當然如果有不對的地方希望大家指教。

1、 CHAR 。CHAR存儲定長數據很方便,CHAR字段上的索引效率級高,比如定義char(10),那么不論你存儲的數據是否達到了10個字節,都要占去10個字節的空間,不足的自動用空格填充,所以 在讀取的時候可能要多次用到trim()。

2、 VARCHAR 。存儲變長數據,但存儲效率沒有CHAR高。如果一個字段可能的值是不固定長度的,我們只知道它不可能超過10個字符,把它定義為 VARCHAR(10)是最合算的。VARCHAR類型的實際長度是它的值的實際長度+1。為什么“+1”呢?這一個字節用于保存實際使用了多大的長度。 從空間上考慮,用varchar合適;從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

3、 TEXT 。text存儲可變長度的非Unicode數據,最大長度為2^31-1(2,147,483,647)個字符。

4、 NCHAR、NVARCHAR、NTEXT 。這三種從名字上看比前面三種多了個“N”。它 表示存儲的是Unicode數據類型的字符 。我們知道字符中,英 文字符只需要一個字節存儲就足夠了,但漢字眾多,需要兩個字節存儲,英文與漢字同時存在時容易造成混亂,Unicode字符集就是為了解決字符集這種不兼 容的問題而產生的,它所有的字符都用兩個字節表示,即英文字符也是用兩個字節表示。nchar、nvarchar的長度是在1到4000之間。和 char、varchar比較起來,nchar、nvarchar則最多存儲4000個字符,不論是英文還是漢字;而char、varchar最多能存儲 8000個英文,4000個漢字。可以看出 使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數量 上有些損失。

所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數字,用char/varcha r

我把他們的區別概括成:

CHAR,NCHAR 定長,速度快,占空間大,需處理
VARCHAR,NVARCHAR,TEXT 不定長,空間小,速度慢,無需處理
NCHAR、NVARCHAR、NTEXT處理Unicode碼

第二篇:

以前只知道text和image是可能被SQL Server淘汰的數據類型,但具體原因不太清楚,今天讀書的時候發現了text與varchar(max)和nvarchar(max)的區別,主要是對操作符的限制,text只能被下列函數作用:

?

函數 語句

DATALENGTH

READTEXT

PATINDEX

SET TEXTSIZE

SUBSTRING

UPDATETEXT

TEXTPTR

WRITETEXT

TEXTVALID

?

?

舉個列子,如果“文本”這一列的數據類型為text,那么它將不能用于“=”“left()”等操作,比如下面的例子:

建立表,填充數據:

if exists ( select * from sysobjects where id = OBJECT_ID ( '[asdf]' ) and OBJECTPROPERTY (id, 'IsUserTable' ) = 1)

DROP TABLE [asdf]

CREATE TABLE [asdf] (

[inttest] [int] IDENTITY (1, 1) NOT NULL ,

[text] [text] NULL ,

[varcharmax]?varchar(max) NULL )

ALTER TABLE [asdf] WITH NOCHECK ADD CONSTRAINT [PK_asdf] PRIMARY KEY NONCLUSTERED ( [inttest] )

SET IDENTITY_INSERT [asdf] ON

INSERT [asdf] ( [inttest] , [text] , [varcharmax] ) VALUES ( 1 , '1111111' , '1111111' )

SET IDENTITY_INSERT [asdf] OFF

運行查詢:

查詢一:
SELECT [text]

????? ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[text] = '11111' AND

[varcharmax] = '1111111'


會出現以下錯誤提示:

消息402,級別16,狀態1,第1 行

數據類型text 和varchar 在equal to 運算符中不兼容。

查詢二
SELECT [text]

????? ,[varcharmax]

FROM [testDB].[dbo].[asdf]

where

[varcharmax] = '1111111'


可以成功運行

在MS SQL2005及以上的版本中,加入大值數據類型(varchar(max)、nvarchar(max)、varbinary(max) )。大值數據類型最多可以存儲2^30-1個字節的數據。

這幾個數據類型在行為上和較小的數據類型 varchar nvarchar varbinary 相同。

微軟的說法是用這個數據類型來代替之前的 text ntext image 數據類型,它們之間的對應關系為:

varchar(max)-------text;

nvarchar(max)-----ntext;

varbinary(max)----image.

?

有了大值數據類型之后,在對大值數據操作的時候要比以前靈活的多了。比如:之前text是不能用‘like’的,有了varchar(max)之后 就沒有這些問題了,因為varchar(max)在行為上和varchar(n)上相同,所以,可以用在varcahr的都可以用在 varchar(max)上。

另外,這個還支持對 插入的 刪除的 表中的大值數據類型列引用上使用 AFTER 觸發器。text就不行,總之,用了大值數據類型之后,我是“腰也不疼了,腿也不酸了,一口氣也能上六樓了”。還等什么呢,快用大值類型吧。


2014年10月16日11:34:19

對SQL Server數據庫的數據類型存儲的學習掌握的確實不太好,我覺得我以前就是作者說的現在的年輕人,看了一點資料,對作者說的進行一下總結:

1.數據類型的對應關系:

varchar(max)-------text;

nvarchar(max)-----ntext;

varbinary(max)----image.

2.現在盡量不用text,ntext,image類型來存儲數據了

3.從空間上考慮,用varchar合適(其實還是盡量使用varchar,畢竟現在是大數據時代);從效率上考慮,用char合適,關鍵是根據實際情況找到權衡點。

4.使用nchar、nvarchar數據類型時不用擔心輸入的字符是英文還是漢字,較為方便,但在存儲英文時數量上有些損失。所以一般來說,如果含有中文字符,用nchar/nvarchar,如果純英文和數字,用char/varchar

5.

支持多語言的站點應考慮使用 Unicode nchar 或 nvarchar 數據類型以盡量減少字符轉換問題。

如果希望列中的數據值大小接近一致,請使用 char。

如果希望列中的數據值大小顯著不同,請使用 varchar。

如果希望列中所有數據項的大小接近一致,則使用 nchar。

如果希望列中數據項的大小差異很大,則使用 nvarchar。

如果執行 CREATE TABLE 或 ALTER TABLE 時 SET ANSI_PADDING 為 OFF,則一個定義為 NULL 的 char 列將被作為 varchar 處理。

6.

1)如果數據量非常大,又能100%確定長度且保存只是ansi字符,那么char
2)能確定長度又不一定是ansi字符或者,那么用nchar;
3)不確定長度,要查詢且希望利用索引的話,用nvarchar類型吧,將它們設到400;
4)不查詢的話沒什么好說的,用nvarchar(4000)

7.

CHAR,NCHAR 定長,速度快,占空間大,需處理
VARCHAR,NVARCHAR,TEXT 不定長,空間小,速度慢,無需處理
NCHAR、NVARCHAR、NTEXT處理Unicode碼

?

SQL Server中char、varchar、text和nchar、nvarchar、ntext的區別


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 久久精品国产欧美日韩亚洲 | 日本在线亚州精品视频在线 | 国产精品久久久久久影视 | 天天干天天拍天天射 | 六月色| 一本大道香蕉高清久久 | 久久精品亚洲精品国产欧美 | 成人亚洲性情网站www在线观看 | 国产精品久久久一区二区三区 | 国产成人精品一区二三区2022 | 久久77| 天天操天天擦 | 色婷婷亚洲| www.四虎影院在线观看 | 久久草在线视频免费 | 国产成人久久 | 色香欲综合成人免费视频 | 欧美永久免费 | 一区二区三区精品视频 | 欧美午夜视频一区二区三区 | 男人的天堂视频 | 888午夜不卡理论久久 | 九九热最新网址 | 久久不射视频 | 精品伊人久久久久7777人 | 激情一区二区三区成人 | 青青久操视频 | 狠狠色官网在线 | 99免费在线播放99久久免费 | 免费一级毛片视频 | 欧美日韩中文在线视频 | 国产精品久久久久毛片真精品 | 奇米影视亚洲春色 | 亚洲欧美综合一区二区三区四区 | www.毛片com| 久青草视频97国内免费影视 | 青青青爽视频在线观看入口 | 男女啪视频大全1000 | 久青草国产在视频在线观看 | 国产精品久久久久久久9999 | 亚洲成人精品久久 |