亚洲综合原千岁中文字幕_国产精品99久久久久久久vr_无码人妻aⅴ一区二区三区浪潮_成人h动漫精品一区二区三

主頁 > 知識庫 > 詳解SQL Server中的數據類型

詳解SQL Server中的數據類型

熱門標簽:安卡拉地圖標注app 我要地圖標注數量有限制嗎 電話機器人怎么代理商 家庭農場地圖標注名稱怎樣起名 電銷需要外呼系統嗎 零成本地圖標注賺錢 千呼電話機器人可以試用嗎 400電話辦理泰安 互聯網電話外呼系統

前言

前面幾篇文章我們講解了索引有關知識,這一節我們再繼續我們下面內容講解,簡短的內容,深入的理解。

數據類型

SQL Server支持兩種字符數據類型,一種是常規,另外一種則是Unicode。常規數據類型包括CHAR和VARCHAR,Unicode數據類型包括NCAHR和NVARCHAR。常規字符的每個字符使用1個字節存儲,而Unicode數據的每個字符要求2個字節。常規字符列限制為僅僅只針對于英語,而Unicode則是針對于多種語言。兩種字符數據類型的文本表示方式也不相同,在表示常規字符文本時,只需要使用單引號,比如'Hello,my name is JeffckyWang,I'm from cnblogs',而對于Unicode字符文本時,需要指定字符N作為前綴,即N‘Hello,my name is JeffckyWang,I'm from cnblogs'。

名稱中沒有VAR元素的任何數據類型(CHAR、NCHAR)具有固定長度,即SQL Server按照列定義大小保留行空間,而不是按照字符中的實際字符保留空間。比如某列定義大小為CHAR(25),則SQL Server在該行保留25個字符的空間,而不管存儲字符串的長度。

名稱中含有VAR元素的數據類型(VARCHAR、NVARCHAR)具有可變長度,即SQL Server根據存儲需要,在行中使用盡可能多的存儲空間存儲字符串,同時外加兩個額外的字節偏移數據。例如,如果將某列定義為VARCHAR(25),此時支持的最大字符數為25,但實際上按照字符串中實際字符確定存儲量。-摘抄自SQL Server 2012 T-SQL基礎教程。

這里關于Unicode字符數據類型我們需要重點理解下。我們先創建一個表,如下:

CREATE TABLE UnicodeType
(
 firstname VARCHAR(5) NOT NULL,
 lastname NVARCHAR(5) NOT NULL
);

此時我們手動插入數據,正常插入,如下:

INSERT dbo.UnicodeType
  ( firstname, lastname )
VALUES ( '11111', -- firstname - varchar(5)
   N'啊的發個好' -- lastname - nvarchar(5)
   )

字符都完全插入表中,如下:

此時我們將firstname,插入五個中文試試如下:

INSERT dbo.UnicodeType
  ( firstname, lastname )
VALUES ( '達得到讓人', -- firstname - varchar(5)
   N'達得到讓人' -- lastname - nvarchar(5)
   )

此時出現如下結果:

也就是說在常規字符類型如上述VARVHAR中定義為五個字符,此時我們插入五個中文字符則會被截取,當然也插入不進去。因為上述已經明確講了1個非英語字符串相當于兩個字節,此時中文所占用的是十個字節,而此時VARCHAR才五個字符,所以出現警告。我們再來將firstname插入兩個中文兩個英文或者數字看看

INSERT dbo.UnicodeType
  ( firstname, lastname )
VALUES ( '達得1', -- firstname - varchar(5)
   N'達得到讓人' -- lastname - nvarchar(5)
   )

此時插入進去為出現警告,因為此時兩個中文字符即四個字節加上一個數字字節剛好五個字節,所以能正常插入,我們再來看看lastname,由上知,既然英文或者數字被當做一個字節,那么我們對lastname插入四個中文字符和兩個英文字節剛好十個字節應該是好使的。我們看看:

INSERT dbo.UnicodeType
  ( firstname, lastname )
VALUES ( '達得1', -- firstname - varchar(5)
   N'達得到讓ab' -- lastname - nvarchar(5)
   )

oh,shit,此時居然出錯了,如下:

我們上述分析的不是有理有據么,難道這里英文不是占用一個字節么,我們插入一個英文試試。

INSERT dbo.UnicodeType
  ( firstname, lastname )
VALUES ( '達得1', -- firstname - varchar(5)
   N'達得到讓b' -- lastname - nvarchar(5)
   )

結果正確了,實踐是檢驗真理的唯一標準,從這里我們可以看出:在常規字符中,一個中文會當做是兩個字節來使用,一個英文會當做是一個字節使用,但是在Unicode中,一個中文也是會當做兩個字節來使用,但是一個英文也會當做是兩個字節來使用。至此我們可以得出結論,個人一直以為在Unicode中,將英文是作為一個字節存儲,見識短啊。

常規字符和Unicode中一個中文字符用兩個字節存儲,而對英文,常規字符用一個字節存儲,而Unicode依然是用兩個字節存儲。

字符串函數

對字符串操作的函數有SUBSTRING、LEFT、RIGHT、CHARINDEX、PATINDEX、REPLACE、REPICATE、STUFF、UPPER、LOWER、RTRIM、LTRIM、FORMAT。對于簡單的函數我們略過,下面我們來講講幾個需要注意的地方。

LEN與DATALENGTH比較

我們首先創建如下測試表

CREATE TABLE StringFun
(
 firststr VARCHAR(max) NOT NULL,
 secondstr TEXT NOT NULL
);

我們插入測試數據

INSERT dbo.StringFun
  ( firststr, secondstr )
VALUES ( '我是JeffckyWang,我來自于博客園,專注于.NET技術', -- firststr - varchar(max)
   '我是JeffckyWang,我來自于博客園,專注于.NET技術' -- secondstr - text
   )

我們首先利用LEN函數來返回firststr和secondstr的字符串長度大小

SELECT LEN(firststr) AS VARCAHRFieldSize 
FROM dbo.StringFun
SELECT LEN(secondstr) AS TEXTFieldSize 
FROM dbo.StringFun

好極了,出錯了。LEN函數無法對TEXT進行操作。我們接著往下看。

SELECT DATALENGTH(firststr) AS VARCAHRFieldSize 
FROM dbo.StringFun
SELECT DATALENGTH(secondstr) AS TEXTFieldSize 
FROM dbo.StringFun

此時未報錯誤,結果顯示為47個字節大小。 既然LEN對文本無效,我們不對文本操作就是。

SELECT LEN(firststr) AS VARCAHRFieldSize 
FROM dbo.StringFun
SELECT DATALENGTH(secondstr) AS TEXTFieldSize 
FROM dbo.StringFun

此時類型為VARCAHR的firststr字節大小卻為31,為何,看到這里我們想必恍然大悟,在上述我們講到常規字符會對中文以一個字符兩個字節大小存儲,但是這里實際上返回的是實際字符大小,當然一個是存儲,一個是檢索,還是有點不同,同時我們也不會將中文存儲到VARCHAR中。到這里我們可以得出結論。

結論:DATALENGTH函數是針對于TEXT,而LEN是針對于VARCHAR,對TEXT無效會報錯。

到這里我們還有一個特殊值未進行處理,那就是NULL。那么問題來了,LEN和DATALENGTH對NULL,它的長度大小是多少呢,是0還是不是0尼?

是我們來測試下:

DECLARE @MyVar VARCHAR(10)
SET @MyVar = NULL
IF (LEN(@MyVar) = 0)
PRINT 'LEN of NULL is 0'
ELSE
PRINT 'LEN of NULL is NULL'

我們上述得到的結果是LEN of NULL is NULL,DATALENGTH就不再演示了。

結論:LEN和DATALENGTH對于NULL計算的結果就是NULL。

我們再來看看二者差異的一個小地方:

SELECT LEN('JeffckyWang ') AS 'LEN'
SELECT DATALENGTH('JeffckyWang ') AS 'DATALENGTH'

結論:LEN會刪除尾隨空格,而DATALENGTH不會

CHARINDEX與PATINDEX比較

CHARINDEX和PATINDEX字符串函數都是查詢返回指定匹配字符串的開始位置。

我們先查詢一個字符串,此字符串在表中存在,如下:

USE AdventureWorks2012;
GO
SELECT CHARINDEX('Worn', DocumentSummary) AS 'CHARINDEX'
FROM Production.Document
WHERE ChangeNumber = 55;
GO
SELECT PATINDEX('Worn', DocumentSummary) AS 'PATINDEX'
FROM Production.Document
WHERE ChangeNumber = 55;

為何CHARINDEX函數查找到了,而PATINDEX沒有查詢到呢?此時就說說二者的區別,二者都有兩個參數,第二個參數都是要匹配的字符串,但是PATINDEX函數必須在需要匹配的字符串之前或者之后添加百分號即通配符,而CHARINDEX函數則不需要。如下即可:

USE AdventureWorks2012;
GO
SELECT CHARINDEX('Worn', DocumentSummary) AS 'CHARINDEX'
FROM Production.Document
WHERE ChangeNumber = 55;
GO
SELECT PATINDEX('%Worn%', DocumentSummary) AS 'PATINDEX'
FROM Production.Document
WHERE ChangeNumber = 55;

結論:PATINDEX匹配字符串必須在字符串前面或者后面或者前后添加通配符,而CHARINDEX無需添加。

總結

本節我們主要講解了SQL中的數據類型以及幾個需要注意的地方,簡短的內容,深入的理解,我們下節再會。

以上就是本文的全部內容,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,同時也希望多多支持腳本之家!

您可能感興趣的文章:
  • 詳解MySQL數據類型int(M)中M的含義
  • mysql存儲引擎和數據類型(二)
  • Java數據類型與MySql數據類型對照表
  • SQL Server數據類型轉換方法
  • SQL Server比較常見數據類型詳解
  • SQLite教程(七):數據類型詳解
  • SQL Server數據類型char、nchar、varchar、nvarchar的區別淺析
  • sql使用cast進行數據類型轉換示例
  • SQL2005中char nchar varchar nvarchar數據類型的區別和使用環境講解
  • SQL的常用數據類型列表詳解

標簽:東營 濱州 來賓 大同 黃山 池州 新鄉 文山

巨人網絡通訊聲明:本文標題《詳解SQL Server中的數據類型》,本文關鍵詞  詳解,SQL,Server,中的,數據,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《詳解SQL Server中的數據類型》相關的同類信息!
  • 本頁收集關于詳解SQL Server中的數據類型的相關信息資訊供網民參考!
  • 推薦文章
    天天色成人| 国产视频网站在线观看| 国产不卡精品一区二区三区| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日本特黄特色aa大片免费| 国产成人精品在线| 欧美电影免费看大全| 精品国产一区二区三区精东影业 | 国产一区精品| 台湾毛片| 欧美电影免费| 亚欧视频在线| 国产麻豆精品免费密入口| 亚久久伊人精品青青草原2020| 青草国产在线| 韩国三级一区| 成人av在线播放| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 韩国三级香港三级日本三级la| 精品国产亚一区二区三区| 你懂的国产精品| 中文字幕97| 亚洲天堂免费| a级精品九九九大片免费看| 精品美女| 亚洲 男人 天堂| 国产伦理精品| 欧美另类videosbestsex视频| 日韩专区在线播放| 欧美另类videosbestsex高清| 国产不卡在线观看视频| 99久久网站| 美女免费精品视频在线观看| 成人av在线播放| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 国产福利免费视频| 国产视频一区二区三区四区| 夜夜操天天爽| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 韩国妈妈的朋友在线播放| 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 国产一区国产二区国产三区| 久久久久久久久综合影视网| 国产视频久久久| 久久国产精品自线拍免费| 国产亚洲精品aaa大片| 精品国产亚洲人成在线| 一本伊大人香蕉高清在线观看| 免费一级片在线观看| 999久久狠狠免费精品| 四虎影视久久| 一级女性全黄久久生活片| 免费国产在线观看| 免费国产在线视频| 日本伦理片网站| 国产伦久视频免费观看视频| 成人在免费观看视频国产| 国产不卡在线观看视频| 成人免费观看视频| 香蕉视频三级| 日韩免费在线视频| 中文字幕一区二区三区 精品| 久久精品免视看国产明星| 日韩av成人| 四虎久久影院| 亚洲天堂免费观看| 国产成人精品综合久久久| 黄视频网站免费| 韩国毛片 免费| 精品毛片视频| 亚欧乱色一区二区三区| 可以免费在线看黄的网站| 国产成人啪精品视频免费软件| 久久精品大片| 午夜精品国产自在现线拍| 国产高清在线精品一区二区| 国产亚洲男人的天堂在线观看| 日韩免费片| 国产韩国精品一区二区三区| 黄色免费网站在线| 香蕉视频久久| 一级女性全黄生活片免费| 中文字幕一区二区三区精彩视频 | 天堂网中文字幕| 国产一区二区精品| 国产一级强片在线观看| 久久成人综合网| 精品国产亚洲人成在线| 精品在线观看国产| 国产美女在线一区二区三区| 国产福利免费视频| 麻豆网站在线看| 精品国产香蕉伊思人在线又爽又黄| 台湾毛片| 久久国产精品自由自在| 色综合久久天天综合| 亚飞与亚基在线观看| 麻豆网站在线看| 可以免费在线看黄的网站| 高清一级片| 日韩专区一区| a级黄色毛片免费播放视频| 四虎影视精品永久免费网站| 亚洲www美色| 亚洲www美色| 成人免费观看的视频黄页| 久草免费在线观看| 精品国产亚一区二区三区| 欧美激情伊人| 精品国产亚洲人成在线| 国产一级生活片| 精品久久久久久综合网| 国产不卡福利| 久久国产一久久高清| 欧美激情一区二区三区视频| 精品久久久久久中文字幕一区 | 一a一级片| 久久精品人人做人人爽97| 青青久久网| 日本免费乱理伦片在线观看2018| 久草免费在线视频| 精品在线免费播放| 国产成+人+综合+亚洲不卡| 超级乱淫伦动漫| 亚洲精品久久玖玖玖玖| 亚洲精品中文字幕久久久久久| 国产91丝袜在线播放0| 91麻豆爱豆果冻天美星空| 一级毛片看真人在线视频| 久久99中文字幕| 一级毛片看真人在线视频| 欧美国产日韩久久久| 欧美激情一区二区三区视频 | 麻豆污视频| 黄色福利片| 日本免费乱理伦片在线观看2018| 天堂网中文字幕| 精品视频免费看| 精品国产一区二区三区免费| 国产欧美精品| 欧美激情一区二区三区在线| 高清一级片| 四虎论坛| 毛片电影网| 国产福利免费观看| 一本伊大人香蕉高清在线观看| 青青久久精品| 国产美女在线观看| 99久久精品国产高清一区二区| 麻豆网站在线看| 欧美爱色| 高清一级做a爱过程不卡视频| 午夜激情视频在线播放| 91麻豆高清国产在线播放| 成人影院一区二区三区| 精品视频在线观看免费| 欧美一级视频免费观看| 欧美18性精品| 二级特黄绝大片免费视频大片| 欧美激情中文字幕一区二区| 国产麻豆精品高清在线播放| 青青青草视频在线观看| 免费的黄视频| 可以免费看毛片的网站| 毛片高清| 久久国产一区二区| 国产a视频| 一级片片| 99久久精品国产国产毛片| 国产精品免费精品自在线观看| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 日本久久久久久久 97久久精品一区二区三区 狠狠色噜噜狠狠狠狠97 日日干综合 五月天婷婷在线观看高清 九色福利视频 | 日韩免费片| 亚洲 激情| 日韩一级精品视频在线观看| 九九热国产视频| 九九久久99| 久久国产精品自线拍免费| 国产一区免费观看| 国产综合成人观看在线| 99久久精品国产高清一区二区| 天天做日日爱| 亚洲精品久久玖玖玖玖| 四虎影视精品永久免费网站| 成人高清免费| 在线观看成人网 | 精品国产香蕉在线播出| 欧美另类videosbestsex| 国产一区精品| 亚洲天堂在线播放| 欧美另类videosbestsex久久| 国产一级生活片| 日韩专区在线播放| 久久成人综合网| 成人高清视频免费观看| 欧美日本二区| 色综合久久天天综合观看| 欧美α片无限看在线观看免费| 韩国三级视频在线观看| 国产一区免费观看|