chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

SQL Server中的VARCHAR和NVARCHAR數據類型

哲想軟件 ? 來源:哲想軟件 ? 2023-04-10 09:57 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

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

SQL中的VARCHAR[ ( n | max ) ]

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

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

VARCHAR數據類型列最多可存儲8000個非Unicode字符。

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

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

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

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

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

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

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

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

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

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

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

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

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

SQL中的NVARCHAR[ ( n | max ) ]

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

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

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

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

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

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

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

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

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

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

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

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

以VARCHAR數據類型存儲Unicode和非Unicode值

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

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

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

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

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

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

VARCHAR和NVARCHAR數據類型:性能比較

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

SQLServer 使用數據類型優(yōu)先級來確定目標數據類型。NVARCHAR的優(yōu)先級高于VARCHAR數據類型。因此,在數據類型轉換期間,SQLServer 會將現有的VARCHAR值轉換為NVARCHAR。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

結論

您應該在適當地設計數據庫表及其列數據類型時查看您的數據要求。通常,VARCHAR數據類型可以滿足您的大部分數據需求。但是,如果需要在列中同時存儲Unicode和非Unicode數據類型,則可以考慮使用NVARCHAR。但是,在做出最終決定之前,您應該查看其性能影響、存儲大小。

審核編輯 :李倩

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

    關注

    7

    文章

    3992

    瀏覽量

    67699
  • 函數
    +關注

    關注

    3

    文章

    4405

    瀏覽量

    66784
  • 數據類型
    +關注

    關注

    0

    文章

    237

    瀏覽量

    14104

原文標題:SQL Server 中的VARCHAR和NVARCHAR數據類型

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    C語言自動類型轉換

    一、自動類型轉換 數據類型存在自動轉換的情況. 自動轉換發(fā)生在不同數據類型運算時,在編譯的時候自動完成。 char類型數據轉換為int
    發(fā)表于 11-25 08:04

    C語言強制類型轉換

    強制類型轉換是通過定義類型轉換運算來實現的。其一般形式為: (數據類型) (表達式) 其作用是把表達式的運算結果強制轉換成類型說明符所表示的類型
    發(fā)表于 11-24 06:32

    SQL 通用數據類型

    如何與存儲的數據進行交互。 下面的表格列出了 SQL 通用的數據類型數據類型 描述 CHARACTER(n) 字符/字符串。固定長度
    的頭像 發(fā)表于 08-18 09:46 ?560次閱讀

    數據數據恢復—SQL Server數據庫被加密如何恢復數據?

    SQL Server數據庫故障: SQL Server數據庫被加密,無法使用。
    的頭像 發(fā)表于 06-25 13:54 ?485次閱讀
    <b class='flag-5'>數據</b>庫<b class='flag-5'>數據</b>恢復—<b class='flag-5'>SQL</b> <b class='flag-5'>Server</b><b class='flag-5'>數據</b>庫被加密如何恢復<b class='flag-5'>數據</b>?

    達夢數據庫常用管理SQL命令詳解

    達夢數據庫常用管理SQL命令詳解
    的頭像 發(fā)表于 06-17 15:12 ?6497次閱讀
    達夢<b class='flag-5'>數據</b>庫常用管理<b class='flag-5'>SQL</b>命令詳解

    IEC101協議可以傳輸什么類型數據

    IEC101協議作為電力系統(tǒng)遠動通信的核心標準,其核心能力在于支持多種類型數據的傳輸,滿足調度端與場站端(如變電站、發(fā)電廠)的實時監(jiān)控、控制及狀態(tài)感知需求。以下從數據類型、傳輸模式及典型應用場景三個
    的頭像 發(fā)表于 05-21 11:37 ?676次閱讀

    #### KEPServerEX 數據存儲插件\\-2

    ,同類型的/同設備的參數可以設置成一樣的,這樣存儲到數據庫之后,能夠更方便的在數據庫中進行檢索。 默認“數據項ID”是整形數據,如需填寫字符
    發(fā)表于 04-09 16:09

    數據數據恢復—SQL Server附加數據庫提示“錯誤 823”的數據恢復案例

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

    labview數據類型與PLC 數據類型之間的轉換(來自于寫入浮點數到匯川 PLC數據轉換關鍵的修改)

    為32位無符號整型U32 2、將U32拆分為兩個U16,分高低位寫入PLC 3、在PLC,將低位寄存器設置為浮點數數據類型 4、結果:PLC中一直無法正確轉換。 原因及解決方法: 1、labview
    發(fā)表于 02-24 19:01

    Devart: dbForge Compare Bundle for SQL Server—比較SQL數據庫最簡單、最準確的方法

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

    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 ?1063次閱讀

    分布式云化數據庫有哪些類型

    分布式云化數據庫有哪些類型?分布式云化數據庫主要類型包括:關系型分布式數據庫、非關系型分布式數據
    的頭像 發(fā)表于 01-15 09:43 ?846次閱讀

    字符串在數據的存儲方式

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

    請問ADS1299使用Test Signals ,獲取到的數據類型是什么?

    請問ADS1299使用Test Signals ,獲取到的數據類型是什么?使用什么公式可以還原?據了解,外部信號轉換完成后是浮點型的,但是沒有看到這塊的說明。
    發(fā)表于 01-06 07:14

    通過Skyvia Connect SQL終端節(jié)點訪問任何數據

    通過 Skyvia Connect SQL 終端節(jié)點訪問任何數據 ? 通過 Skyvia Connect SQL 終端節(jié)點訪問任何數據ADO.NET
    的頭像 發(fā)表于 01-02 09:31 ?586次閱讀
    通過Skyvia Connect <b class='flag-5'>SQL</b>終端節(jié)點訪問任何<b class='flag-5'>數據</b>