Tự hỏi không gian lưu trữ thực tế sẽ được chiếm bởi hai kiểu dữ liệu này, vì tài liệu MySQL không rõ ràng về vấn đề này.Bộ ký tự và kích cỡ lưu trữ của MySQL char & varchar
CHAR (M) M × w byte, 0 < = M < = 255, trong đó w là số byte cần thiết cho việc ký tự tối đa độ dài trong bộ ký tự
VARCHAR (M) , VARBINARY (M) L + 1 byte nếu giá trị cột đòi hỏi 0-255 byte, L + 2 byte nếu giá trị có thể đòi hỏi nhiều hơn 255 byte
này dường như ngụ ý với tôi rằng, cho một utf8-mã hóa cơ sở dữ liệu, một CHAR sẽ luôn luôn mất 32 bit cho mỗi ký tự, trong khi một VARCHAR sẽ mất từ 8 đến 32 tùy thuộc vào độ dài byte thực tế của các ký tự được lưu trữ. Đúng không? Hoặc một VARCHAR ngụ ý một chiều rộng ký tự 8-bit, và lưu trữ multi-octet UTF8 ký tự thực sự tiêu thụ nhiều 'ký tự' từ VARCHAR? Hoặc VARCHAR cũng luôn lưu trữ 32 bit cho mỗi ký tự? Rất nhiều khả năng.
Không phải thứ mà tôi từng phải lo lắng nhiều về trước đây, nhưng tôi bắt đầu đạt đến giới hạn kích thước bảng tạm thời trong bộ nhớ và tôi không nhất thiết phải tăng cường nhóm khả dụng của MySQL (thứ hai thời gian).
để thêm vào đó, 'lưu trữ utf8' MySQL không phải là chỉ bị tê liệt, nó không phải là tiêu chuẩn của bạn UTF-8. Các chuỗi được mã hóa của 'utf8' được lưu trữ bằng cách sử dụng gấp đôi lưu trữ các chuỗi mã hóa UTF-8 thông thường, làm cho nó còn kém hiệu quả hơn. – deceze
@deceze Tôi không biết điều đó. Bạn có bất kỳ chi tiết hoặc tham chiếu về điều đó không? – Celada
Tôi ước gì tôi đã làm, nhưng tài liệu không nói nhiều về nó. Có một câu hỏi gần đây ở đây về việc bán phá giá cơ sở dữ liệu nơi dữ liệu được bán trong nhị phân-như-mặc dù, đó là nơi điều này là rất rõ ràng. – deceze