Nvarchar trong SQL hay kiểu dữ liệu Nvarchar là một kiểu dữ liệu thường gặp, sử dụng thường xuyên và dùng trong nhiều trường hợp làm việc với cơ sở dữ liệu. Tuy nhiên lại có quá nhiều người nhầm lẫn Nvarchar và varchar về cách dùng, về trường hợp sử dụng. Vậy thì sql server nvarchar là gì? Sự khác nhau giữa varchar và nvarchar như thế nào? Cùng comdy.vn tìm hiểu rõ hơn qua bài viết này nhé.
Kiểu dữ liệu nvarchar là gì?
What is nvarchar in sql? Nvarchar trong sql là kiểu dữ liệu dạng chuỗi Unicode và có độ rộng biến thiên. Chúng có kích thước tối đa 536.870.912 ký tự.
Kiểu dữ liệu NVARCHAR
trong SQL Server được sử dụng để lưu trữ dữ liệu chuỗi Unicode có độ dài thay đổi. Sau đây là cú pháp của NVARCHAR
: Nvarchar(n).
Trong cú pháp này, n
xác định độ dài chuỗi nằm trong khoảng từ 1 đến 4.000. Nếu bạn không chỉ định độ dài chuỗi, giá trị mặc định của nó là 1.
Một cách khác để khai báo một cột NVARCHAR
là sử dụng cú pháp sau: Nvarchar(max).
Trong cú pháp này, max
là kích thước lưu trữ tối đa tính bằng byte là 2 ^ 31-1 byte (2 GB). Nói chung, kích thước lưu trữ thực tế tính bằng byte của một giá trị NVARCHAR
gấp hai lần số ký tự cộng với 2 byte.
Các ISO synonym của NVARCHAR
là NATIONAL CHAR VARYING
hoặc NATIONAL CHARACTER VARYING.
Vì vậy bạn có thể sử dụng chúng thay thế cho nhau trong khai báo biến hoặc định nghĩa dữ liệu cột.
NVARCHAR(50) là gì? Nvarchar(50) là kiểu dữ liệu nvarchar xác định độ dài tối đa của chuỗi ký tự có thể được lưu trữ trong cột là 50.
Nvarchar bytes bao nhiêu?
Ví dụ về kiểu dữ liệu NVARCHAR trong SQL Server
Ví dụ về sql server nvarchar sau đây sẽ giúp bạn có thể hiểu rõ hơn về nvarchar khác gì varchar:
Câu lệnh sau tạo một bảng mới chứa một cột kiểu NVARCHAR
:
CREATE TABLE test.sql_server_nvarchar (
val NVARCHAR NOT NULL
);
Trong ví dụ này, theo mặc định, độ dài chuỗi của cột NVARCHAR
là 1.
Để thay đổi độ dài chuỗi của cột val
, bạn sử dụng câu lệnh ALTER TABLE ALTER COLUMN
:
ALTER TABLE test.sql_server_Nvarchar
ALTER COLUMN val NVARCHAR (15) NOT NULL;
Câu lệnh sau đây INSERT một chuỗi mới vào cột val
của bảng test.sql_server_nvarchar
:
INSERT INTO test.sql_server_varchar (val)
VALUES (N'Trung Nguyễn');
Câu lệnh hoạt động như mong đợi vì giá trị chuỗi có độ dài nhỏ hơn độ dài chuỗi được xác định trong định nghĩa cột.
Câu lệnh sau cố gắng chèn một dữ liệu chuỗi mới có độ dài lớn hơn độ dài chuỗi của cột val
:
INSERT INTO test.sql_server_nvarchar (val)
VALUES (N'Trung Nguyễn - Comdy.vn');
SQL Server đã phát hành lỗi và chấm dứt câu lệnh:
String or binary data would be truncated.
The statement has been terminated.
Để tìm số ký tự và kích thước lưu trữ tính bằng byte của các giá trị được lưu trữ trong cột NVARCHAR
, bạn sử dụng hàm LEN
và DATALENGTH
như sau:
SELECT
val,
LEN(val) len,
DATALENGTH(val) data_length
FROM
test.sql_server_nvarchar;
Trong hướng dẫn này, bạn đã học cách sử dụng kiểu dữ liệu NVARCHAR
trong SQL Server để lưu trữ dữ liệu Unicode có độ dài thay đổi trong cơ sở dữ liệu.
Kiểu dữ liệu varchar là gì?
Varchar(n) trong sql là dữ liệu dạng chuỗi ký tự, có độ rộng biến thiên. Tương tự như char thi varchar có kích thước tối đa là 8.000 ký tự, lưu trữ 2 byte số ký tự.
Ví dụ varchar(255) là gì thi đây là kiểu dữ liệu định nghĩa một cột trong bảng có thể chứa một chuỗi ký tự có độ daif tối đa là 255 ký tự.
So sánh kiểu dữ liệu varchar và nvarchar
Hai kiểu dữ liệu nvarchar và varchar thường bị nhầm lẫn trong quá trình sử dụng. Bảng sau sẽ minh họa sự khác nhau giữa varchar và nvarchar:
VARCHAR IN SQL |
NVARCHAR IN SQL | |
---|---|---|
Kiểu dữ liệu ký tự | Các ký tự có độ dài thay đổi, không phải Unicode | Độ dài thay đổi, cả ký tự Unicode và không phải Unicode như tiếng Việt. |
Chiều dài tối đa | Lên đến 8.000 ký tự | Lên đến 4.000 ký tự |
Kích thước ký tự | Sql nvarchar chiếm 1 byte cho mỗi ký tự | Chiếm 2 byte cho mỗi ký tự Unicode / Không phải Unicode |
Kích thước lưu trữ | Độ dài Thực tế (tính bằng byte) | 2 lần Độ dài Thực tế (tính bằng byte) |
Sử dụng | Được sử dụng khi độ dài dữ liệu là cột có độ dài thay đổi hoặc có thể thay đổi và nếu dữ liệu thực tế luôn nhỏ hơn dung lượng. | Do chỉ để lưu trữ, chỉ được sử dụng nếu bạn cần hỗ trợ Unicode như các ký tự tiếng Việt. |