ตัวอักษรสูงสุดสำหรับ NVARCHAR (MAX) คืออะไร?


212

ฉันได้ประกาศคอลัมน์ประเภทหนึ่งNVARCHAR(MAX)ใน SQL Server 2008 แล้วอักขระสูงสุดที่แน่นอนที่มี MAX จะมีความยาวเท่าใด


คำตอบ:


413

ขนาดสูงสุดสำหรับคอลัมน์ประเภทNVARCHAR(MAX)คือพื้นที่เก็บข้อมูล 2 GB

เนื่องจากNVARCHARใช้ 2 ไบต์ต่อตัวอักษรนั่นคือประมาณ 1 พันล้านตัวอักษร

สงครามและสันติภาพของ Leo Tolstoj เป็นหนังสือหน้า 1'440 ที่มีความยาวประมาณ 600,000 คำซึ่งอาจมีตัวอักษรถึง 6 ล้านตัวอักษร ดังนั้นคุณสามารถติดหนังสือสงครามและสันติภาพทั้งหมด 166 เล่มลงในแต่ละNVARCHAR(MAX)คอลัมน์

มีพื้นที่เพียงพอสำหรับความต้องการของคุณหรือไม่? :-)


17
เพียงแค่รับจู้จี้ NVARCHAR ใช้ 2 ไบต์สำหรับตัวละครส่วนใหญ่ สำหรับยูนิโค้ด caracters มากกว่า U + 00FFFF มันจะใช้สี่ไบต์
Eli Algranti

7
นี่คือความบ้าคลั่งเกินกว่าสปาร์ตา
MisterGeeky

1
PostgreSQL เทียบเท่ากับ NVCHAR (MAX) คืออะไร
Pratik

63

โดยค่าเริ่มต้นค่า nvarchar (MAX) จะถูกจัดเก็บเหมือนกับค่า nvarchar (4000) ยกเว้นในกรณีที่ความยาวจริงเกิน 4,000 อักขระ ในกรณีนั้นข้อมูลในแถวจะถูกแทนที่ด้วยตัวชี้ไปยังหน้าแยกอย่างน้อยหนึ่งหน้าที่จัดเก็บข้อมูล

หากคุณคาดว่าจะมีข้อมูลเกิน 4,000 ตัวอักษร nvarchar (MAX) เป็นตัวเลือกที่แนะนำอย่างแน่นอน

ที่มา: https://social.msdn.microsoft.com/Forums/en-US/databasedesign/thread/d5e0c6e5-8e44-4ad5-9591-20dc0ac7a870/


12
นอกจากนี้ยังไม่แนะนำหากข้อมูลของคุณจะไม่เกิน 4,000 ตัวอักษรเนื่องจากมีปัญหาในการจัดทำดัชนี
HLGEM

ฉันเชื่อว่าสิ่งนี้จะล้าสมัย ดูคำตอบจาก @marc_s
ฟาบิโอ

9

จากเอกสาร MSDN

nvarchar [(n | สูงสุด )]

ข้อมูลสตริง Unicode ที่มีความยาวผันแปรได้ nกำหนดความยาวสตริงและสามารถเป็นค่าตั้งแต่ 1 ถึง 4,000 maxบ่งชี้ว่าขนาดหน่วยเก็บข้อมูลสูงสุดคือ 2 ^ 31-1 ไบต์ (2 GB) ขนาดหน่วยเก็บข้อมูลเป็นไบต์คือสองเท่าของความยาวจริงของข้อมูลที่ป้อน + 2 ไบต์


6

ฉันคิดว่าจริงnvarchar(MAX)สามารถเก็บประมาณ 1070000000 ตัวอักษร


คุณช่วยอธิบายได้ไหมว่าคุณได้รับหมายเลขนั้นจากที่ใดและคุณหมายถึงอะไรโดย "ถูกต้อง" (เช่นคุณกำลังบอกว่ามันไม่ได้เป็นขีด จำกัด แต่มีตัวละครมากขึ้นอาจมีปัญหาได้ปัญหาแบบไหนทำไม?)
Adi Inbar

3
ฉันไม่แน่ใจ แต่ฉันคิดว่าถ้า nvarchar ใช้ช่องว่างสองครั้งกว่า varchar เพื่อจัดเก็บถ่านและจำนวนหน่วยความจำสูงสุดที่ nvarchar (MAX) สามารถใช้ในการจัดเก็บตัวอักษรเป็น 2 ^ 31-1 => 2147483647 ดังนั้น 2147483647/2 คือ 1073741824 โดยถูกต้องฉันหมายความว่านั่นไม่ใช่ตัวเลขที่แน่นอน
Francisco Javier Larios Soto
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.