Sự khác biệt giữa VARCHAR và CHAR trong MySQL là gì?
Tôi đang cố gắng lưu trữ băm MD5.
Sự khác biệt giữa VARCHAR và CHAR trong MySQL là gì?
Tôi đang cố gắng lưu trữ băm MD5.
Câu trả lời:
VARCHAR
là chiều dài thay đổi.
CHAR
là chiều dài cố định.
Nếu nội dung của bạn có kích thước cố định, bạn sẽ có hiệu suất tốt hơn CHAR
.
Xem trang MySQL về các loại CHAR và VARCHAR để được giải thích chi tiết (hãy chắc chắn cũng đọc các bình luận).
Values in VARCHAR columns are variable-length strings. The length can be specified as a value from 0 to 255 before MySQL 5.0.3, and 0 to 65,535 in 5.0.3 and later versions.
CHAR Vs VARCHAR
CHAR được sử dụng cho Biến cố định kích thước chiều dài cố định
VARCHAR được sử dụng cho biến kích thước chiều dài thay đổi.
Ví dụ
Create table temp
(City CHAR(10),
Street VARCHAR(10));
Insert into temp
values('Pune','Oxford');
select length(city), length(street) from temp;
Đầu ra sẽ là
length(City) Length(street)
10 6
Kết luận: Để sử dụng không gian lưu trữ một cách hiệu quả, phải sử dụng VARCHAR Thay vì CHAR nếu độ dài biến là biến
Một CHAR(x)
cột chỉ có thể có chính xác các x
ký tự.
Một VARCHAR(x)
cột có thể có tối đa x
ký tự.
Vì băm MD5 của bạn sẽ luôn có cùng kích thước, có lẽ bạn nên sử dụng một CHAR
.
Tuy nhiên, bạn không nên sử dụng MD5 ở nơi đầu tiên; nó đã biết điểm yếu.
Sử dụng SHA2 thay thế.
Nếu bạn đang băm mật khẩu, bạn nên sử dụng bcrypt.
Sự khác biệt giữa VARCHAR và CHAR trong MySQL là gì?
Để đưa ra câu trả lời, tôi muốn thêm rằng trong các hệ thống OLTP hoặc trong các hệ thống có cập nhật thường xuyên, hãy cân nhắc sử dụng CHAR
ngay cả đối với các cột có kích thước thay đổi vì có thể VARCHAR
phân mảnh cột trong quá trình cập nhật.
Tôi đang cố gắng lưu trữ băm MD5.
Băm MD5 không phải là lựa chọn tốt nhất nếu bảo mật thực sự quan trọng. Tuy nhiên, nếu bạn sẽ sử dụng bất kỳ hàm băm nào, hãy xem xét BINARY
loại cho nó thay vào đó (ví dụ MD5 sẽ tạo ra hàm băm 16 byte, như vậy BINARY(16)
là đủ thay vì CHAR(32)
32 ký tự đại diện cho các chữ số hex. Điều này sẽ tiết kiệm không gian hơn và hiệu quả về hiệu suất.
Varchar cắt bỏ khoảng trắng ở cuối nếu các ký tự được nhập ngắn hơn độ dài khai báo, trong khi char thì không. Char sẽ đệm khoảng trắng và sẽ luôn là chiều dài của chiều dài khai báo. Về mặt hiệu quả, varchar có nhiều kinh nghiệm hơn vì nó cắt các ký tự để cho phép điều chỉnh nhiều hơn. Tuy nhiên, nếu bạn biết độ dài chính xác của char, char sẽ thực thi với tốc độ nhanh hơn một chút.
Trong hầu hết các RDBMS ngày nay, chúng là từ đồng nghĩa. Tuy nhiên, đối với những hệ thống vẫn có sự khác biệt, trường CHAR được lưu trữ dưới dạng cột có chiều rộng cố định. Nếu bạn xác định nó là CHAR (10), thì 10 ký tự được ghi vào bảng, trong đó "padding" (thường là khoảng trắng) được sử dụng để điền vào bất kỳ khoảng trống nào mà dữ liệu không sử dụng hết. Ví dụ: lưu "bob" sẽ được lưu dưới dạng ("bob" +7 dấu cách). Cột VARCHAR (ký tự biến) có nghĩa là lưu trữ dữ liệu mà không lãng phí thêm dung lượng mà cột CHAR thực hiện.
Như mọi khi, Wikipedia nói to hơn.
CHAR là trường có độ dài cố định; VARCHAR là một trường có chiều dài thay đổi. Nếu bạn đang lưu trữ các chuỗi có độ dài thay đổi lớn như tên, thì hãy sử dụng VARCHAR, nếu độ dài luôn giống nhau, thì hãy sử dụng CHAR vì nó hiệu quả hơn một chút và cũng nhanh hơn một chút.
CHAR là chiều dài cố định và VARCHAR là chiều dài thay đổi. CHAR luôn sử dụng cùng một dung lượng lưu trữ cho mỗi mục nhập, trong khi VARCHAR chỉ sử dụng lượng cần thiết để lưu trữ văn bản thực tế.
Char là kiểu dữ liệu ký tự có độ dài cố định, varchar là kiểu dữ liệu ký tự có độ dài thay đổi.
Vì char là loại dữ liệu có độ dài cố định, 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 này. Vì varchar là loại dữ liệu có độ dài thay đổi, kích thước lưu trữ của giá trị varchar là chiều dài thực 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. Bạn có thể sử dụng varchar khi các mục nhập dữ liệu trong một cột được dự kiến sẽ thay đổi đáng kể về kích thước.
theo sách MySQL hiệu suất cao :
VARCHAR lưu trữ các chuỗi ký tự có độ dài thay đổi và là loại dữ liệu chuỗi phổ biến nhất. Nó có thể yêu cầu ít không gian lưu trữ hơn các loại có độ dài cố định, vì nó chỉ sử dụng nhiều dung lượng mà nó cần (nghĩa là sử dụng ít không gian hơn để lưu trữ các giá trị ngắn hơn). Ngoại lệ là bảng MyISAM được tạo bằng ROW_FORMAT = FIXED, sử dụng một lượng không gian cố định trên đĩa cho mỗi hàng và do đó có thể lãng phí không gian. VARCHAR giúp hiệu suất vì nó tiết kiệm không gian.
CHAR có độ dài cố định: MySQL luôn phân bổ đủ không gian cho số lượng ký tự được chỉ định. Khi lưu trữ giá trị CHAR, MySQL sẽ xóa mọi khoảng trắng ở cuối. (Điều này cũng đúng với VARCHAR trong MySQL 4.1 và các phiên bản cũ hơn CHAR CHAR và VAR CHAR giống hệt nhau về mặt logic và chỉ khác nhau ở định dạng lưu trữ.) Các giá trị được đệm bằng khoảng trắng khi cần để so sánh.
VARCHAR
cần phải tự động phân bổ bộ nhớ theo và khi được yêu cầu, do đó làm giảm hiệu suất trái ngược với CHAR
, phải không?
Char
có độ dài cố định (hỗ trợ 2000 ký tự), viết tắt của ký tự là kiểu dữ liệu
Varchar
có độ dài thay đổi (hỗ trợ 4000 ký tự)
Char hoặc varchar- nó được sử dụng để nhập dữ liệu texual trong đó độ dài có thể được chỉ định trong ngoặc Eg- name char (20)
(
và )
là dấu ngoặc đơn, không phải dấu ngoặc.
(
và )
ngoặc, và nhiều người Anh thậm chí không nhận ra rằng có những phương ngữ tiếng Anh trong đó từ "ngoặc đơn" có thể chỉ một dấu chấm câu. Có một trường hợp mạnh được thực hiện để ưu tiên "dấu ngoặc đơn" cho "dấu ngoặc" - có thể, về mặt cân bằng, tùy chọn rõ ràng tối đa khi nhắm mục tiêu đối tượng lập trình viên quốc tế - nhưng đó là trường hợp phức tạp hơn "dấu ngoặc" là sai.