2011-08-29 39 views
7

Tại sao ta sử dụng max_length của CharField bằng 2^n trong khi những người khác sử dụng 2^n-1?CharField max_length 2^n vs 2^n-1

Ví dụ:

  • trong django.contrib.gis.db.backends.postgis.models (django 1.3):

    class SpatialRefSys(models.Model, SpatialRefSysMixin): 
        srtext = models.CharField(max_length=2048) 
    
  • trong django_openid_auth.models (djano-openid- auth 0.3):

    class Nonce(models.Model): 
        server_url = models.CharField(max_length=2047) 
    

Alth ough nó không phải là biện pháp khoa học, 2048 seems to be more popular than 2047, nhưng 255 is more popular than 256. Tài liệu Django nói rằng, trong MySQL max_length is restricted to 255 characters if you are using unique=True. Nhưng tại sao tôi sẽ sử dụng 2^n-1 thay vì od 2^n trong các trường hợp khác?

Trả lời

6

Bạn hầu như đã có nó. Nó không chỉ là đối số duy nhất = True cho 255, mà còn có các chuỗi dài tới 255 có thể là sometimes be stored more efficiently. Vì vậy, câu trả lời là có có thể một điểm để làm điều đó cho 255 so với 256, nhưng đối với độ dài khác nó rất có thể là vô nghĩa. Việc chọn độ dài hai đầu để bắt đầu thường không được thực hiện vì lý do khoa học (hầu hết chúng ta chưa thực sự đo điểm chuẩn rằng trường dài 512 của chúng tôi đã chạy ứng dụng của chúng tôi nhanh hơn so với trường dài 513).

Điều đó nói rằng có thể có trường hợp ứng dụng cụ thể trong đó ứng dụng Django là giao diện người dùng cho ứng dụng C, trong đó có chuỗi^^ hữu ích hơn nữa để lưu trữ hiệu quả việc chấm dứt bổ sung \0 byte.

Các vấn đề liên quan