Bạn thường thấy các trường cơ sở dữ liệu được đặt có độ lớn 255 ký tự, lý do truyền thống / lịch sử là gì? Tôi cho rằng đó là một cái gì đó để làm với giới hạn phân trang / bộ nhớ và hiệu suất nhưng sự khác biệt giữa 255 và 256 luôn làm tôi bối rối.
varchar(255)
Xem xét đây là một công suất hoặc cường độ, không phải là một bộ chỉ mục , tại sao 255 được ưa thích hơn 256? Là một byte dành riêng cho một số mục đích (terminator hoặc null hoặc một cái gì đó)?
Có lẽ varchar (0) là vô nghĩa (có công suất bằng 0)? Trong trường hợp nào 2 ^ 8 không gian nên là 256 chắc chắn?
Có những cường độ khác cung cấp lợi ích hiệu suất? Ví dụ, varchar (512) ít hiệu suất hơn varchar (511) hay varchar (510)?
Là giá trị này giống nhau cho tất cả các cơ sở dữ liệu quan hệ, cũ và mới?
từ chối trách nhiệm - Tôi là nhà phát triển không phải là DBA, tôi sử dụng kích thước và loại trường phù hợp với logic kinh doanh của mình ở nơi được biết đến, nhưng tôi muốn biết lý do lịch sử cho sở thích này, ngay cả khi nó không còn phù hợp (nhưng thậm chí nhiều hơn nếu nó vẫn còn liên quan).
Biên tập:
Cảm ơn câu trả lời, dường như có một số sự đồng thuận rằng một byte được sử dụng để lưu trữ kích thước, nhưng điều này không giải quyết vấn đề dứt khoát trong tâm trí của tôi.
Nếu dữ liệu meta (độ dài chuỗi) được lưu trữ trong cùng bộ nhớ / đĩa liền kề, nó có ý nghĩa. 1 byte siêu dữ liệu và 255 byte dữ liệu chuỗi, sẽ rất phù hợp với nhau và phù hợp với 256 byte lưu trữ liền kề, có lẽ là gọn gàng và ngăn nắp.
Nhưng ... Nếu siêu dữ liệu (độ dài chuỗi) được lưu trữ tách biệt với dữ liệu chuỗi thực tế (có thể trong bảng chính), thì để hạn chế độ dài của dữ liệu chuỗi bằng một byte, chỉ vì việc lưu trữ chỉ một số nguyên 1 byte dễ dàng hơn của siêu dữ liệu có vẻ hơi kỳ lạ.
Trong cả hai trường hợp, nó dường như là một sự tinh tế có lẽ phụ thuộc vào việc thực hiện DB. Việc sử dụng 255 có vẻ khá phổ biến, vì vậy ai đó ở đâu đó đã tranh luận một trường hợp tốt cho nó ngay từ đầu, có ai có thể nhớ trường hợp đó là / là gì không? Các lập trình viên sẽ không áp dụng bất kỳ thực hành mới nào mà không có lý do, và điều này phải là mới một lần.