Kích thước tối đa của 'max_length' trong Django là bao nhiêu?


86

Đây là mô hình của tôi:

class Position(models.Model):
    map = models.ForeignKey(Map,primary_key=True)
    #members=models.CharField(max_length=200)
    LatLng = models.CharField(max_length=40000)
    infowindow = models.CharField(max_length=40000)

Nhưng nó không chạy được. Kích thước tối đa của max_lengththam số là gì?

Câu trả lời:


104

Điều đó phụ thuộc vào phần phụ trợ cơ sở dữ liệu. Các Django DB Docs sẽ cho bạn biết, đó max_length=255là bảo đảm để làm việc luôn.

Nếu bạn cần một cái gì đó của số tiền mà bạn đã chỉ định trong câu hỏi của bạn, tôi khuyên bạn nên sử dụng một TextField .


2
Với trường hợp này cùng với thực tế là đối với DB tôi sử dụng nó cũng giới hạn tùy chọn duy nhất là 255, cá nhân tôi luôn tuân theo câu thần chú rằng nếu tôi cần CharField lớn hơn 255, tôi sẽ đặt nó thành TextField.
digitaldreamer

13
Kích thước tối đa của TextField cũng phụ thuộc vào DB. Đối với MySQL, khoảng 4 nghìn tỷ.
Justin Abrahms

2
Trong MySQL Charfield là một varchar, tối đa 65,535 (nhưng đây cũng là kích thước hàng tối đa), xem stackoverflow.com/questions/13506832/… . Không bị phạt khi sử dụng kích thước tối đa lớn, MySQL sẽ sử dụng những gì nó thực sự cần. Lưu ý rằng Trường văn bản được xử lý khác nhau, với các hàm ý về hiệu suất, vì vậy tốt hơn nên lập chỉ mục với các trường khác trong bảng khác (càng nhiều hàng được lập chỉ mục trên mỗi trang DB càng tốt), tìm những gì bạn cần, sau đó với khóa đã biết hiện tại, hãy lấy Trường văn bản.
Aviah Laor

2
Mặc dù TextField là lựa chọn hợp lý cho> 255 chuỗi, nhưng nó không thực thi max_lengthở cấp mô hình (hoặc cơ sở dữ liệu). Điều này có thể làm phức tạp một số logic xác thực không giống như trong trường hợp CharField cho phép bạn chỉ định một max_lengthmà Django thực thi.
elnygren

1
Đoạn được liên kết có nội dung: "Bất kỳ trường nào được lưu trữ với kiểu cột VARCHAR đều có max_length bị giới hạn ở 255 ký tự nếu bạn đang sử dụng unique = True cho trường. Điều này ảnh hưởng đến CharField, SlugField."
Chris

5

Sử dụng TextFieldthay thế

infowindow = models.TextField()

2
Hãy coi chừng điều TextFieldđó không xác thực max_lengthở cấp cơ sở dữ liệu.
Chris Conlan

1

Nó phụ thuộc vào cơ sở dữ liệu phụ trợ. Nếu bạn sử dụng MySQL 5.6 thì có giới hạn là 65.535. Nếu bạn đang sử dụng ở trên thì nó cũng sẽ cho phép 1024 nhưng không vượt quá mức đó.

class Demo(models.Model):
    max_test = models.CharField(max_length=1024)

Tôi đã chạy ở trên trên MySQL 5.7


1
Nếu điều này sẽ hoạt động phụ thuộc vào phần phụ trợ cơ sở dữ liệu được sử dụng như đã được đề cập trong câu trả lời được chấp nhận. Mặc dù điều này có thể hoạt động, nhưng giải pháp tốt hơn là sử dụng TextField.
colidyre

0

Nó thực sự phụ thuộc vào cơ sở dữ liệu bạn sử dụng cho mô hình. PostgreSQL, MySQL, v.v. có các cài đặt và giới hạn khác nhau.

Nếu bạn thực sự cần một chuỗi dài hoặc không chắc biến sẽ dài bao nhiêu, hãy luôn an toàn khi sử dụng variable=models.TextField().

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.