Nếu đó là Chương trình C, tôi cũng dành chút thời gian để suy nghĩ về điều đó. Nhưng với một cơ sở dữ liệu tôi để nó cho động cơ DB.
Người lập trình DB dành nhiều thời gian để suy nghĩ về bố trí bộ nhớ tốt nhất, vì vậy chỉ cần nói cho cơ sở dữ liệu những gì bạn cần và nó sẽ lưu trữ dữ liệu theo cách phù hợp nhất với công cụ DB (thường).
Nếu bạn muốn căn chỉnh dữ liệu, bạn sẽ cần chính xác kiến thức về tổ chức dữ liệu nội bộ: Chuỗi được lưu trữ như thế nào? Một, hai hoặc 4 byte để lưu trữ độ dài? Nó có được lưu trữ dưới dạng chuỗi byte đơn thuần hoặc được mã hóa bằng UTF-8 UTF-16 UTF-32 không? Liệu DB cần byte thêm để xác định giá trị NULL hoặc> MAXINT? Có thể chuỗi được lưu trữ như là một chuỗi byte được kết thúc bằng NUL - sau đó cần thêm một byte trong nội bộ.
Cũng với VARCHAR nó không phải là cần thiết đúng, rằng DB sẽ luôn phân bổ 100 (128) byte cho chuỗi của bạn. Có lẽ nó lưu trữ chỉ là một con trỏ đến nơi mà không gian cho dữ liệu thực tế là.
Vì vậy, tôi khuyên bạn nên sử dụng VARCHAR (100) nếu đó là yêu cầu của bạn. Nếu DB quyết định sắp xếp nó bằng cách nào đó có chỗ cho thêm dữ liệu nội bộ, quá.
Cách khác: Giả sử bạn sử dụng VARCHAR (128) và mọi thứ kết hợp với nhau: DB phân bổ 128 byte cho dữ liệu của bạn. Ngoài ra nó cần thêm 2 byte để lưu trữ độ dài chuỗi thực tế - tạo ra 130 byte - và sau đó có thể là DB sắp xếp dữ liệu đến ranh giới tiếp theo (giả sử 32 byte): Dữ liệu thực tế cần thiết trên đĩa bây giờ là 160 byte 8-}
Đây có phải là câu hỏi cho một RDBMS cụ thể hoặc một RDBMS cụ thể không? –
bạn có dự định lưu trữ dữ liệu thập phân trong trường varchar không? –
ypercube: mysql, InnoDB Tudor: không, chỉ văn bản ... trừ khi văn bản là một số :) – RandomWhiteTrash