ในการจัดเก็บข้อมูลVARCHAR(255)
นั้นฉลาดพอที่จะจัดเก็บเฉพาะความยาวที่คุณต้องการในแถวที่กำหนดCHAR(255)
ซึ่งแตกต่างจากที่เก็บ 255 อักขระ
แต่เนื่องจากคุณติดแท็กคำถามนี้ด้วย MySQL ฉันจะพูดถึงเคล็ดลับเฉพาะ MySQL เนื่องจากแถวถูกคัดลอกจากเลเยอร์เครื่องมือจัดเก็บข้อมูลไปยังเลเยอร์ SQL VARCHAR
ฟิลด์จะถูกแปลงเพื่อCHAR
ให้ได้ประโยชน์จากการทำงานกับแถวที่มีความกว้างคงที่ ดังนั้นสตริงในหน่วยความจำจะเพิ่มความยาวสูงสุดของVARCHAR
คอลัมน์ที่คุณประกาศ
เมื่อแบบสอบถามของคุณสร้างตารางชั่วคราวโดยปริยายตัวอย่างเช่นในขณะที่กำลังเรียงลำดับหรือGROUP BY
อาจใช้หน่วยความจำจำนวนมาก หากคุณใช้VARCHAR(255)
ฟิลด์จำนวนมากสำหรับข้อมูลที่ไม่จำเป็นต้องยาวขนาดนั้นอาจทำให้ตารางชั่วคราวมีขนาดใหญ่มาก
นอกจากนี้คุณอาจต้องการทราบว่าลักษณะการทำงานของ "การเว้นระยะห่าง" หมายความว่าสตริงที่ประกาศด้วยชุดอักขระ utf8 จะมีขนาดสามไบต์ต่ออักขระแม้กระทั่งสำหรับสตริงที่คุณจัดเก็บด้วยเนื้อหาไบต์เดี่ยว (เช่น ascii หรือละติน 1 อักขระ) และในทำนองเดียวกันชุดอักขระ utf8mb4 ทำให้สตริงขยายออกเป็นสี่ไบต์ต่ออักขระในหน่วยความจำ
ดังนั้นVARCHAR(255)
ใน utf8 ที่จัดเก็บสตริงสั้น ๆ เช่น "ไม่มีความเห็น" จะใช้เวลา 11 ไบต์บนดิสก์ (อักขระอักขระที่ต่ำกว่าสิบตัวบวกความยาวหนึ่งไบต์) แต่ใช้หน่วยความจำ 765 ไบต์ดังนั้นในตาราง temp หรือผลลัพธ์ที่เรียงลำดับ
ฉันได้ช่วยผู้ใช้ MySQL ที่สร้างตารางอุณหภูมิ 1.5GB บ่อยๆโดยไม่รู้ตัวและทำให้เต็มพื้นที่ดิสก์ พวกเขามีVARCHAR(255)
คอลัมน์จำนวนมากซึ่งในทางปฏิบัติเก็บสตริงที่สั้นมาก
เป็นการดีที่สุดที่จะกำหนดคอลัมน์ตามประเภทข้อมูลที่คุณต้องการจัดเก็บ มีประโยชน์ในการบังคับใช้ข้อ จำกัด ที่เกี่ยวข้องกับแอปพลิเคชันดังที่คนอื่น ๆ กล่าวถึง แต่มีประโยชน์ทางกายภาพในการหลีกเลี่ยงการสูญเสียหน่วยความจำที่ฉันอธิบายไว้ข้างต้น
เป็นเรื่องยากที่จะทราบว่าที่อยู่ไปรษณีย์ที่ยาวที่สุดคืออะไรซึ่งเป็นสาเหตุที่หลายคนเลือกVARCHAR
ที่อยู่ที่ยาวกว่าที่อยู่ใด ๆ อย่างแน่นอน และ 255 เป็นเรื่องปกติเนื่องจากเป็นความยาวสูงสุดของ a VARCHAR
ซึ่งสามารถเข้ารหัสความยาวได้ด้วยหนึ่งไบต์ นอกจากนี้ยังเป็นVARCHAR
ความยาวสูงสุดใน MySQL ที่เก่ากว่า 5.0