Tôi muốn biết kích thước tối đa là varchar
trong SQL Server 2000. Trong khi tôi đang googling một nơi nào đó nó được viết 8000 ký tự và một nơi nào đó nó được viết 8060 byte. Cái nào đúng?Kích thước tối đa của varchar (tối đa) trong SQL Server 2000
Trả lời
Theo tôi nhớ là 8000 ký tự.
Đối nvarchar nó là 4000
Varchar là 8000 và nvarchar là 4000
Dưới đây là tài liệu tham khảo varchar MSDN:
http://msdn.microsoft.com/en-us/library/aa258242(SQL.80).aspx
Là 8000 char = 8000 bytes trong sqL ???? – Kumar
@Kumar: vâng, đối với VARCHAR, 1 ký tự = 1 byte; cho NVARCHAR, 1 ký tự = 2 byte –
Nó phức tạp hơn một chút. Phiên bản ngắn là varchar và nvarchar không sử dụng không gian cho đến khi bạn thực sự đặt dữ liệu ở đó. –
Kích thước tối đa của varchar (max) là lớn (2GB hoặc 2Gchars, tôi nghĩ). Giá trị tối đa bạn có thể chỉ định cho n trong varchar (n) là 8000 và cho nvarchar là 4000.
Không có varchar (max) trong SQL 2000 – MartW
Bạn nói đúng, nhưng sau đó câu hỏi là vô hiệu. Phần thứ hai của câu trả lời của tôi vẫn giữ – erikkallen
Trang dữ liệu SQL Server có 8k: 8192 byte. Từ phần này được dành riêng cho tiêu đề trang, để lại 8060 byte số lnegth tối đa mà một hàng có thể có. Trong một hàng, các loại varbinary (n), varchar (n) và nvarchar (n) không thể vượt quá 8000 byte, có nghĩa là varchar (8000) là chiều dài Ascii tối đa và nvarchar (4000) là chiều dài Unicode tối đa (kể từ Unicode lưu trữ mỗi ký tự trên 2 byte).
Giải thích tốt nhất về tất cả các chi tiết này xuất phát từ Inside the Storage Engine: Anatomy of a page.
+1 Tidbit nhỏ: Unicode không lưu trữ từng ký tự trong 2 byte. Điều đó phụ thuộc vào mã hóa. UTF-8 và UTF-16 là mã hóa độ dài thay đổi, UTF-32 là mã duy nhất có kích thước cố định mà tôi biết. Các mã hóa khác tồn tại (UCS-2, UTF-7). Bên trong, Microsoft thường sử dụng UTF-16, trong đó kích thước mặc định của một ký tự là 2 byte. Điều này đúng với ít nhất tất cả các sản phẩm dựa trên .NET và cho SQL Server. – Abel
@abel: SQL Server [sử dụng mã hóa UCS-2LE] (http://msdn.microsoft.com/en-us/library/ms189617 (v = sql.105) .aspx), chính xác là 2 byte cho mỗi ký tự. Tôi đồng ý rằng mặc dù 'Unicode', như được diễn đạt trong bài viết, không có đúng 2 byte cho mỗi ký tự. –
Vâng, bạn đang đúng trên UCS-2, tôi quên rằng, đó là một trong những va li lớn của tôi, vì nó chỉ cho phép các ký tự BMP. Tx cho chỉ ra rằng :) – Abel
Có 8000 char = 8000 byte trong sqL ???? – Kumar
@Kumar: ** yes! ** Đối với 'varchar' nó là 1 char = 1 byte, cho' nvarchar' là 1 char = 2 byte –