一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

SQL Server中的VARCHAR和NVARCHAR數(shù)據(jù)類型

哲想軟件 ? 來源:哲想軟件 ? 2023-04-10 09:57 ? 次閱讀

關(guān)系數(shù)據(jù)庫在表中表示組織的數(shù)據(jù),這些表使用具有不同數(shù)據(jù)類型的列,允許它們存儲有效值。開發(fā)人員和DBA需要知道并理解每一列的適當(dāng)數(shù)據(jù)類型,以獲得更好的查詢性能。

本文將討論流行的數(shù)據(jù)類型VARCHAR()和NVARCHAR()、它們的比較以及SQLServer 中的性能評估。

SQL中的VARCHAR[ ( n | max ) ]

該VARCHAR數(shù)據(jù)類型表示非Unicode可變長度的字符串的數(shù)據(jù)類型。您可以在其中存儲字母、數(shù)字和特殊字符。

N表示以字節(jié)為單位的字符串大小。

VARCHAR數(shù)據(jù)類型列最多可存儲8000個非Unicode字符。

VARCHAR數(shù)據(jù)類型每個字符占用1個字節(jié)。如果您沒有明確指定N的值,則它需要1個字節(jié)的存儲空間。

注意:不要將N與表示字符串中字符數(shù)的值混淆。

以下查詢使用100個字節(jié)的數(shù)據(jù)定義VARCHAR數(shù)據(jù)類型。

58c648ce-d73a-11ed-bfe3-dac502259ad0.png

它返回長度為17,因為每個字符1個字節(jié),包括一個空格字符。

58dda06e-d73a-11ed-bfe3-dac502259ad0.png

以下查詢定義了沒有任何N值的VARCHAR數(shù)據(jù)類型。因此,SQLServer 將默認(rèn)值視為1個字節(jié),如下所示。

59083acc-d73a-11ed-bfe3-dac502259ad0.png

我們還可以通過CAST或CONVERT函數(shù)使用VARCHAR。例如,在下面的兩個示例中,我們聲明了一個長度為100字節(jié)的變量,然后使用了CAST運算符。

第一個查詢返回長度為30,因為我們沒有在CAST運算符VARCHAR數(shù)據(jù)類型中指定N。默認(rèn)長度為30。

5928caee-d73a-11ed-bfe3-dac502259ad0.png

但是,如果字符串長度小于30,則取字符串的實際大小。

594d2704-d73a-11ed-bfe3-dac502259ad0.png

SQL中的NVARCHAR[ ( n | max ) ]

所述NVARCHAR數(shù)據(jù)類型是用于Unicode的可變長度的字符數(shù)據(jù)類型。這里,N指的是國家語言字符集,用于定義Unicode字符串。您可以存儲非Unicode和Unicode字符(日語漢字、韓文等)。

N表示以字節(jié)為單位的字符串大小。

它最多可以存儲4000個Unicode和非Unicode字符。

VARCHAR數(shù)據(jù)類型每個字符占用2個字節(jié)。如果不為N指定任何值,則需要2個字節(jié)的存儲空間。

以下查詢使用100個字節(jié)的數(shù)據(jù)定義VARCHAR數(shù)據(jù)類型。

596eeb64-d73a-11ed-bfe3-dac502259ad0.png

它返回36的字符串長度,因為NVARCHAR每個字符存儲占用2個字節(jié)。

59874df8-d73a-11ed-bfe3-dac502259ad0.png

與VARCHAR數(shù)據(jù)類型類似,NVARCHAR也有1個字符(2個字節(jié))的默認(rèn)值,而沒有為N指定顯式值。

59b0ed20-d73a-11ed-bfe3-dac502259ad0.png

如果我們使用CAST或CONVERT函數(shù)應(yīng)用NVARCHAR轉(zhuǎn)換而沒有任何顯式N值,則默認(rèn)值為30個字符,即60個字節(jié)。

59d50142-d73a-11ed-bfe3-dac502259ad0.png

以VARCHAR數(shù)據(jù)類型存儲Unicode和非Unicode值

假設(shè)我們有一個表,記錄來自電子購物門戶的客戶反饋。為此,我們有一個包含以下查詢的SQL表。

59fbf180-d73a-11ed-bfe3-dac502259ad0.png

我們在這個表中插入幾個英語、日語和印地語的示例記錄。[Comment]的數(shù)據(jù)類型是VARCHAR,[NewComment]是NVARCHAR()。

5a158a1e-d73a-11ed-bfe3-dac502259ad0.png

查詢成功執(zhí)行,并在從中選擇一個值時給出以下行。對于第二和第三行,如果數(shù)據(jù)不是英語的,它就不能識別數(shù)據(jù)。

5a3443f0-d73a-11ed-bfe3-dac502259ad0.png

VARCHAR和NVARCHAR數(shù)據(jù)類型:性能比較

我們不應(yīng)在JOIN或WHERE謂詞中混合使用VARCHAR和NVARCHAR數(shù)據(jù)類型。它使現(xiàn)有索引無效,因為SQLServer 要求JOIN兩側(cè)的數(shù)據(jù)類型相同。如果不匹配,SQLServer 會嘗試使用CONVERT_IMPLICIT()函數(shù)進行隱式轉(zhuǎn)換。

SQLServer 使用數(shù)據(jù)類型優(yōu)先級來確定目標(biāo)數(shù)據(jù)類型。NVARCHAR的優(yōu)先級高于VARCHAR數(shù)據(jù)類型。因此,在數(shù)據(jù)類型轉(zhuǎn)換期間,SQLServer 會將現(xiàn)有的VARCHAR值轉(zhuǎn)換為NVARCHAR。

5a5a8498-d73a-11ed-bfe3-dac502259ad0.png

現(xiàn)在,讓我們執(zhí)行兩個SELECT語句,根據(jù)它們的數(shù)據(jù)類型檢索記錄。

5a74aae4-d73a-11ed-bfe3-dac502259ad0.png

這兩個查詢都使用索引查找運算符和我們之前定義的索引。

5a8d0472-d73a-11ed-bfe3-dac502259ad0.png

現(xiàn)在,我們切換數(shù)據(jù)類型值以與WHERE謂詞進行比較。第1列具有VARCHAR數(shù)據(jù)類型,但我們指定N'A'將其作為NVARCHAR數(shù)據(jù)類型。

類似地,col2是NVARCHAR數(shù)據(jù)類型,我們指定了引用VARCHAR數(shù)據(jù)類型的值“C”。

5aba63fe-d73a-11ed-bfe3-dac502259ad0.png

在查詢實際執(zhí)行計劃中,您得到一個索引掃描,SELECT語句有一個警告符號。

5acedb86-d73a-11ed-bfe3-dac502259ad0.png

此查詢工作正常,因為NVARCHAR()數(shù)據(jù)類型可以同時具有Unicode和非Unicode值。

現(xiàn)在,第二個查詢使用索引掃描并在SELECT運算符上發(fā)出警告符號。

5af21b82-d73a-11ed-bfe3-dac502259ad0.png

將鼠標(biāo)懸停在發(fā)出有關(guān)隱式轉(zhuǎn)換的警告的SELECT語句上。SQLServer 無法正確使用現(xiàn)有索引。這是由于VARCHAR和NVARCHAR數(shù)據(jù)類型的數(shù)據(jù)排序算法不同。

如果表有數(shù)百萬行,SQLServer必須做額外的工作并使用隱式數(shù)據(jù)轉(zhuǎn)換來轉(zhuǎn)換數(shù)據(jù)。它可能會對您的查詢性能產(chǎn)生負(fù)面影響。因此,在優(yōu)化查詢時應(yīng)避免混合和匹配這些數(shù)據(jù)類型。

5b125dca-d73a-11ed-bfe3-dac502259ad0.png

結(jié)論

您應(yīng)該在適當(dāng)?shù)卦O(shè)計數(shù)據(jù)庫表及其列數(shù)據(jù)類型時查看您的數(shù)據(jù)要求。通常,VARCHAR數(shù)據(jù)類型可以滿足您的大部分?jǐn)?shù)據(jù)需求。但是,如果需要在列中同時存儲Unicode和非Unicode數(shù)據(jù)類型,則可以考慮使用NVARCHAR。但是,在做出最終決定之前,您應(yīng)該查看其性能影響、存儲大小。

審核編輯 :李倩

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)庫
    +關(guān)注

    關(guān)注

    7

    文章

    3884

    瀏覽量

    65574
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4365

    瀏覽量

    63851
  • 數(shù)據(jù)類型
    +關(guān)注

    關(guān)注

    0

    文章

    236

    瀏覽量

    13758

原文標(biāo)題:SQL Server 中的VARCHAR和NVARCHAR數(shù)據(jù)類型

文章出處:【微信號:哲想軟件,微信公眾號:哲想軟件】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—SQL Server附加數(shù)據(jù)庫提示“錯誤 823”的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫附加數(shù)據(jù)庫過程中比較常見的報錯是“錯誤 823”,附加數(shù)據(jù)庫失敗。 如果數(shù)據(jù)
    的頭像 發(fā)表于 02-28 11:38 ?334次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b>附加<b class='flag-5'>數(shù)據(jù)</b>庫提示“錯誤 823”的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    Devart: dbForge Compare Bundle for SQL Server—比較SQL數(shù)據(jù)庫最簡單、最準(zhǔn)確的方法

    ? dbForge Compare Bundle For SQL Server:包含兩個工具,可幫助您節(jié)省用于手動數(shù)據(jù)庫比較的 70% 的時間 dbForge數(shù)據(jù)比較 幫助檢測和分析實
    的頭像 發(fā)表于 01-17 11:35 ?364次閱讀

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境

    dbForge Studio For SQL Server:用于有效開發(fā)的最佳SQL Server集成開發(fā)環(huán)境 SQL編碼助手
    的頭像 發(fā)表于 01-16 10:36 ?518次閱讀

    字符串在數(shù)據(jù)的存儲方式

    數(shù)據(jù)庫是現(xiàn)代信息技術(shù)存儲和管理數(shù)據(jù)的核心組件。字符串作為最常見的數(shù)據(jù)類型之一,在數(shù)據(jù)的存儲
    的頭像 發(fā)表于 01-07 15:41 ?559次閱讀

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收?int還是unsigned int?

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收,int還是unsigned int? 這個采集到的數(shù)字是什么含義呢?代表的是聲音信號的幅值? while(!MCBSP_rrdy(hMcbsp
    發(fā)表于 10-18 06:56

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫出現(xiàn)823錯誤的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)庫故障: SQL Server附加數(shù)據(jù)庫出現(xiàn)錯誤823,附加
    的頭像 發(fā)表于 09-20 11:46 ?554次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>數(shù)據(jù)</b>庫出現(xiàn)823錯誤的<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    labview數(shù)據(jù)類型的取值范圍是多少

    LabVIEW的數(shù)據(jù)類型豐富多樣,涵蓋了整數(shù)、小數(shù)(浮點數(shù))、復(fù)數(shù)等多種類型,每種類型都有其特定的取值范圍。以下是對LabVIEW中常見數(shù)據(jù)類型取值范圍的說明: 整數(shù)
    的頭像 發(fā)表于 09-04 17:33 ?2107次閱讀

    常見的遙感數(shù)據(jù)類型有哪些

    遙感技術(shù)是一種通過遙感器在遠(yuǎn)離目標(biāo)的位置獲取目標(biāo)地物的電磁波信息,并進行分析的技術(shù)。遙感數(shù)據(jù)類型繁多,涵蓋了從可見光到紅外、微波等多個波段,以及不同的數(shù)據(jù)格式和分辨率。 光學(xué)遙感數(shù)據(jù) : 全色影像
    的頭像 發(fā)表于 09-04 14:30 ?3057次閱讀

    干貨分享 如何采集OPC DA數(shù)據(jù)并存儲到SQL Server數(shù)據(jù)庫?

    在工業(yè)自動化系統(tǒng),將OPC DA數(shù)據(jù)采集并存儲到SQL Server數(shù)據(jù)庫具有顯著的應(yīng)用價值。本文手把手教您完成這一操作,實現(xiàn)
    的頭像 發(fā)表于 08-09 10:46 ?964次閱讀
    干貨分享  如何采集OPC DA<b class='flag-5'>數(shù)據(jù)</b>并存儲到<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>數(shù)據(jù)</b>庫?

    技術(shù)干貨驛站 ▏深入理解C語言:基本數(shù)據(jù)類型和變量

    在C語言中,數(shù)據(jù)類型和變量是編程的基礎(chǔ),也是理解更復(fù)雜概念的關(guān)鍵。數(shù)據(jù)類型決定了變量的內(nèi)存分配、存儲范圍和操作方式,而變量則是存儲數(shù)據(jù)的容器。本篇文章將從基本數(shù)據(jù)類型和變量兩個方面,帶
    的頭像 發(fā)表于 07-26 17:53 ?2496次閱讀
    技術(shù)干貨驛站 ▏深入理解C語言:基本<b class='flag-5'>數(shù)據(jù)類型</b>和變量

    如何在SQL創(chuàng)建觸發(fā)器

    SQL,觸發(fā)器(Trigger)是一種特殊類型的存儲過程,它自動執(zhí)行或激活響應(yīng)表上的數(shù)據(jù)修改事件(如INSERT、UPDATE、DELETE等)。觸發(fā)器可以用于維護
    的頭像 發(fā)表于 07-18 16:01 ?2774次閱讀

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—SQL Server數(shù)據(jù)庫所在分區(qū)空間不足報錯的數(shù)據(jù)恢復(fù)案例

    SQL Server數(shù)據(jù)數(shù)據(jù)恢復(fù)環(huán)境: 某品牌服務(wù)器存儲中有兩組raid5磁盤陣列。操作系統(tǒng)層面跑著SQL
    的頭像 發(fā)表于 07-10 13:54 ?746次閱讀

    ESP32-S3是否支持修改控制端點數(shù)據(jù)類型?

    ESP32-S3是否支持修改控制端點數(shù)據(jù)類型(如標(biāo)準(zhǔn)類型,自定義類型); 我需要在控制傳輸數(shù)據(jù)階段的DATA0包改為我的USB設(shè)備規(guī)定的8個字節(jié)的數(shù)
    發(fā)表于 06-07 06:00

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—raid5陣列上層Sql Server數(shù)據(jù)數(shù)據(jù)恢復(fù)案例

    數(shù)據(jù)數(shù)據(jù)恢復(fù)環(huán)境: 5塊硬盤組建一組RAID5陣列,劃分LUN供windows系統(tǒng)服務(wù)器使用。windows系統(tǒng)服務(wù)器內(nèi)運行了Sql Server
    的頭像 發(fā)表于 05-08 11:43 ?696次閱讀
    <b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)—raid5陣列上層<b class='flag-5'>Sql</b> <b class='flag-5'>Server</b><b class='flag-5'>數(shù)據(jù)</b>庫<b class='flag-5'>數(shù)據(jù)</b>恢復(fù)案例

    數(shù)據(jù)數(shù)據(jù)恢復(fù)—ndf文件大小變?yōu)?KB的數(shù)據(jù)恢復(fù)案例

    存儲設(shè)備損壞導(dǎo)致存儲SQL Server數(shù)據(jù)庫崩潰。對數(shù)據(jù)庫文件進行恢復(fù)后,用戶發(fā)現(xiàn)有4個ndf文件的大小變?yōu)?KB。該
    的頭像 發(fā)表于 05-07 11:19 ?601次閱讀