Cả hai đều là kiểu dữ liệu trong nhiều ngôn ngữ lập trình và hệ thống cơ sở dữ liệu trong đó 'char' dùng để chỉ ký tự và 'varchar' dùng để chỉ ký tự biến. Char in C đại diện cho loại ký tự được sử dụng để lưu trữ các giá trị chuỗi, chủ yếu là các ký tự và số nguyên được mã hóa UTF-8. Varchar, mặt khác, là một loại dữ liệu có thể chứa dữ liệu của bất kỳ loại độ dài không xác định. Varchar dùng để chỉ một kiểu dữ liệu của một trường trong hệ thống quản lý cơ sở dữ liệu. Mặc dù cả hai đều có thể lưu trữ các giá trị chuỗi lên đến độ dài tối đa 8.000 ký tự, char yêu cầu lưu trữ nhiều hơn varchar. Về mặt kỹ thuật, cả hai đều được sử dụng để lưu trữ cùng loại dữ liệu nhưng chúng khác nhau về cách chúng được lưu trữ và truy xuất. Hãy xem sự khác biệt của chúng một cách chi tiết.
Char là kiểu dữ liệu có độ dài cố định được sử dụng để lưu trữ các ký tự không phải là Unicode, do đó có tên (viết tắt của ký tự). Nó chiếm một byte không gian cho mỗi ký tự được mã hóa dưới dạng số - những ký tự từ mã hóa ASCII. Loại char cũng có thể được sử dụng để khai báo các số nguyên nhỏ. Để khai báo một biến ký tự, từ khóa 'char' được sử dụng, có nghĩa là một ký tự đơn được lưu trữ trong một byte.
Giống như các kiểu số nguyên, char có thể được ký hoặc không dấu. Nó có thể giữ các giá trị char đã ký từ -128 đến 127 và tùy thuộc vào kích thước kiến trúc, nó cũng có thể không dấu, giữ các giá trị nằm trong khoảng từ 0 đến 255. Khi các giá trị char được lưu trữ, chúng được đệm đúng với khoảng trắng theo chiều dài được chỉ định . Các dấu cách được loại bỏ khi chúng được lấy.
Ví dụ: nếu bạn khai báo một biến có kiểu dữ liệu char (7), thì nó sẽ luôn lấy 7 byte dữ liệu bất kể bạn đang lưu trữ 1 ký tự hay 7 ký tự, có nghĩa là bạn có thể lưu trữ tối đa 7 ký tự trong cột.
Varchar, như tên cho thấy, là một kiểu dữ liệu có độ dài thay đổi, có thể chứa bất kỳ loại dữ liệu nào có độ dài thay đổi từ 0 đến 65,535. Trường Varchar có thể lưu trữ các giá trị có kích thước bất kỳ đến một giới hạn nhất định, tùy thuộc vào cơ sở dữ liệu. Nó có thể được định nghĩa bằng ngôn ngữ lập trình hoặc ở cấp độ cơ sở dữ liệu. Kích thước của trường varchar có thể là bất cứ thứ gì từ 0 đến độ dài trường khai báo tối đa.
Để khai báo một ký tự biến, từ khóa 'varchar' được sử dụng. Varchar có một không gian biến, có nghĩa là nó sẽ chỉ sử dụng số byte bằng với số lượng ký tự. Nó giúp tránh lãng phí không gian vì nó chỉ sử dụng không gian cần thiết cho kích thước của chuỗi. Trong một số ngôn ngữ lập trình và hệ thống cơ sở dữ liệu, mọi không gian thừa sẽ tự động bị xóa khỏi cơ sở dữ liệu.
Ví dụ: nếu bạn khai báo một biến varchar (10), nó sẽ sử dụng số byte bằng số lượng ký tự. Vì vậy, nếu bạn chỉ lưu trữ một ký tự, thì nó sẽ chỉ mất một byte và nếu bạn lưu trữ 10 ký tự, nó sẽ mất 10 byte, do đó tránh lãng phí không gian cơ sở dữ liệu.
'Char' là loại dữ liệu có độ dài cố định, được sử dụng để lưu trữ giá trị chuỗi ký tự có độ dài cố định, trong khi 'Varchar' là loại dữ liệu có độ dài thay đổi được sử dụng để lưu trữ dữ liệu chữ và số có độ dài thay đổi.
Kích thước lưu trữ của giá trị ký tự bằng với kích thước tối đa của cột này mà bạn khai báo trong khi tạo bảng. Mặt khác, kích thước lưu trữ của giá trị varchar là chiều dài thực tế của dữ liệu được nhập, không phải kích thước tối đa cho cột này.
Bạn có thể sử dụng char khi các mục nhập dữ liệu trong một cột được dự kiến có cùng kích thước, trong khi ngược lại, varchar có thể được sử dụng khi các mục nhập dữ liệu trong một cột được dự kiến sẽ thay đổi kích thước.
Char sử dụng cấp phát bộ nhớ tĩnh trong khi varchar sử dụng cấp phát bộ nhớ động
Độ dài của biến char có thể có giá trị bất kỳ từ 0 đến 255, trong khi độ dài của biến varchar nằm trong khoảng từ 0 đến 65,535.
Các mục nhập dữ liệu phù hợp trong char được sử dụng để lưu trữ dữ liệu như số điện thoại, trong khi varchar được sử dụng để lưu trữ dữ liệu khác nhau như địa chỉ.
Char | Varar |
Được sử dụng để lưu trữ giá trị chuỗi ký tự có độ dài cố định. | Được sử dụng để lưu trữ dữ liệu chữ và số có độ dài thay đổi. |
Độ dài thay đổi từ 0 đến 255. | Độ dài thay đổi từ 0 đến 65,535. |
Mất 1 byte cho mỗi ký tự để lưu trữ. | Mất 1 byte cho mỗi ký tự cộng thêm 1 hoặc 2 byte để lưu trữ thông tin độ dài. |
Kích thước lưu trữ của char giống như khai báo. | Kích thước lưu trữ của varchar phụ thuộc vào chuỗi cụ thể được lưu trữ. |
Sử dụng cấp phát bộ nhớ tĩnh. | Sử dụng cấp phát bộ nhớ động. |
Char nên được sử dụng khi biết chiều dài của biến. | Varar chỉ nên được sử dụng khi không biết chiều dài của biến. |
Nó chỉ chấp nhận nhân vật. | Nó chấp nhận cả ký tự và số. |
Nó nhanh hơn 50% so với Varchar. | Nó chậm hơn Char. |
Kích thước lưu trữ của giá trị char bằng với kích thước tối đa cho cột. | Kích thước lưu trữ của giá trị varchar bằng với chiều dài thực tế của dữ liệu được nhập, không phải kích thước tối đa cho cột. |