ตามเอกสารออนไลน์มีการ จำกัด แถว 64K และคุณสามารถคำนวณขนาดของแถวได้โดยใช้:
row length = 1
+ (sum of column lengths)
+ (number of NULL columns + delete_flag + 7)/8
+ (number of variable-length columns)
คุณต้องจำไว้ว่าความยาวของคอลัมน์ไม่ใช่การแมปแบบหนึ่งต่อหนึ่งของขนาด ตัวอย่างเช่นCHAR(10) CHARACTER SET utf8
ต้องการสามไบต์สำหรับแต่ละอักขระสิบตัวเนื่องจากการเข้ารหัสนั้นต้องคำนึงถึงคุณสมบัติสามไบต์ต่ออักขระของutf8
(นั่นคือการutf8
เข้ารหัสของ MySQLมากกว่า UTF-8 "ของจริง" ซึ่งสามารถมีได้ถึงสี่ไบต์ )
แต่ถ้าขนาดแถวของคุณใกล้ถึง 64K คุณอาจต้องการตรวจสอบสคีมาของฐานข้อมูลของคุณ เป็นตารางที่หายากที่ต้องมีความกว้างในฐานข้อมูลที่ตั้งค่าอย่างถูกต้อง (3NF) - เป็นไปได้ไม่ธรรมดามาก
หากคุณต้องการใช้มากกว่านั้นคุณสามารถใช้BLOB
หรือTEXT
ประเภท สิ่งเหล่านี้จะไม่นับรวมกับขีด จำกัด 64K ของแถว (นอกเหนือจากการดูแลระบบขนาดเล็ก) แต่คุณต้องระวังปัญหาอื่น ๆ ที่มาจากการใช้งานของพวกเขาเช่นไม่สามารถเรียงลำดับโดยใช้บล็อกข้อความทั้งหมดเกินจำนวนที่กำหนด ของตัวละคร (แม้ว่าจะสามารถกำหนดค่านี้ขึ้นไป) บังคับให้ตารางชั่วคราวอยู่บนดิสก์มากกว่าในหน่วยความจำหรือต้องกำหนดค่าไคลเอนต์และเซิร์ฟเวอร์ comms บัฟเฟอร์เพื่อจัดการขนาดอย่างมีประสิทธิภาพ
ขนาดที่ได้รับอนุญาตคือ:
TINYTEXT 255 (+1 byte overhead)
TEXT 64K - 1 (+2 bytes overhead)
MEDIUMTEXT 16M - 1 (+3 bytes overhead)
LONGTEXT 4G - 1 (+4 bytes overhead)
คุณยังคงมีไม่ตรงกันไบต์ / ตัวอักษร (เพื่อให้MEDIUMTEXT utf8
คอลัมน์สามารถเก็บ "เพียง" ประมาณครึ่งล้านตัวอักษร(16M-1)/3 = 5,592,405
) แต่ก็ยังขยายช่วงของคุณอย่างมาก