ขนาดสูงสุดของ 'max_length' ใน Django คือเท่าใด


87

นี่คือโมเดลของฉัน:

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)

แต่มันวิ่งไม่ได้. ขนาดสูงสุดของmax_lengthพารามิเตอร์คืออะไร?

คำตอบ:


106

ขึ้นอยู่กับแบ็กเอนด์ฐานข้อมูล Django DB เอกสารจะบอกคุณว่าmax_length=255การประกันการทำงานเสมอ

ถ้าคุณต้องการบางสิ่งบางอย่างของจำนวนเงินที่คุณได้ระบุไว้ในคำถามของคุณผมขอแนะนำให้ใช้TextField


2
ด้วยกรณีนี้ควบคู่ไปกับความจริงที่ว่าสำหรับ DB ฉันจึงใช้มันจึง จำกัด ตัวเลือกเฉพาะไว้ที่ 255 ฉันเองก็ยึดมั่นในมนต์ว่าถ้าฉันต้องการ CharField ที่ใหญ่กว่า 255 ฉันจะทำให้เป็น TextField
digitaldreamer

13
ขนาดสูงสุดของ TextField ยังขึ้นอยู่กับฐานข้อมูล สำหรับ MySQL มีประมาณ 4 ล้านล้าน
Justin Abrahms

2
ใน MySQL Charfield เป็น varchar, สูงสุด 65,535 ( แต่นี้ยังเป็นขนาดแถวสูงสุด) ดูstackoverflow.com/questions/13506832/... ไม่มีโทษของการใช้ขนาดสูงสุดที่ใหญ่ MySQL จะใช้สิ่งที่ต้องการจริง โปรดทราบว่า Textfields ได้รับการจัดการที่แตกต่างกันโดยมีผลกระทบด้านประสิทธิภาพดังนั้นจึงควรจัดทำดัชนีกับเขตข้อมูลอื่นในตารางอื่น (ยิ่งมีการจัดทำดัชนีแถวต่อหน้า DB มากเท่าไหร่ก็ยิ่งดี) ค้นหาสิ่งที่คุณต้องการจากนั้นด้วยคีย์ที่รู้จักกันในขณะนี้ให้รับ Textfield
Aviah Laor

2
แม้ว่า TextField จะเป็นตัวเลือกที่ใช้ได้สำหรับสตริง> 255 แต่ก็ไม่ได้บังคับใช้max_lengthในระดับโมเดล (หรือฐานข้อมูล) สิ่งนี้อาจทำให้ตรรกะการตรวจสอบความถูกต้องซับซ้อนแตกต่างจากในกรณีของ CharField ที่ช่วยให้คุณระบุสิ่งmax_lengthที่ Django บังคับใช้
elnygren

1
ย่อหน้าที่เชื่อมโยงระบุว่า: "เขตข้อมูลใด ๆ ที่จัดเก็บด้วยประเภทคอลัมน์ VARCHAR มีความยาว max_length ที่ จำกัด ไว้ที่ 255 อักขระหากคุณใช้ unique = True สำหรับฟิลด์สิ่งนี้มีผลต่อ CharField, SlugField"
คริส


1

ขึ้นอยู่กับฐานข้อมูลแบ็กเอนด์ หากคุณใช้ MySQL 5.6 จะมีขีด จำกัด 65,535 หากคุณใช้ข้างต้นนั้นจะอนุญาตให้ใช้ 1024 ด้วย แต่ไม่เกินนั้น

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

ฉันวิ่งไปข้างบนบน MySQL 5.7


1
หากจะใช้งานได้ขึ้นอยู่กับแบ็กเอนด์ฐานข้อมูลที่ใช้ตามที่กล่าวไว้แล้วในคำตอบที่ยอมรับ แม้ว่าจะได้ผล แต่ทางออกที่ดีกว่าคือการใช้ TextField
colidyre

0

ขึ้นอยู่กับฐานข้อมูลที่คุณใช้สำหรับรุ่นนั้น ๆ จริงๆ PostgreSQL, MySQL และอื่น ๆ มีการตั้งค่าและขีด จำกัด ที่แตกต่างกัน

variable=models.TextField()หากคุณจำเป็นต้องมีสายยาวหรือมันไม่แน่ใจว่าวิธียาวตัวแปรจะเป็นเสมอปลอดภัยเพียงแค่ไปด้วย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.