MySQL เวอร์ชันก่อน 5.0.3 สามารถจัดเก็บอักขระได้ 255 ตัว แต่จากเวอร์ชัน 5.0.3 จะสามารถจัดเก็บอักขระได้ 65,535 ตัว
เอกสารอย่างเป็นทางการของ MySQL ระบุ -
ความยาวสูงสุดที่ใช้ได้ของ VARCHAR ใน MySQL 5.0.3 และใหม่กว่านั้นขึ้นอยู่กับขนาดแถวสูงสุด (65,535 ไบต์ ซึ่งใช้ร่วมกันระหว่างทุกคอลัมน์) และชุดอักขระที่ใช้ ตัวอย่างเช่น อักขระ utf8 สามารถกำหนดได้สูงสุดสามไบต์ต่ออักขระ ดังนั้นคอลัมน์ VARCHAR ที่ใช้ชุดอักขระ utf8 สามารถประกาศให้มีอักขระสูงสุด 21,844 ตัว
โปรดทราบว่าขีดจำกัดของขนาดแถวสูงสุดคือ 65,535 ไบต์ ซึ่งระบุว่าเมื่อรวมคอลัมน์ทั้งหมดแล้ว ไม่ควรเกิน 65,535 ไบต์
ให้เราดูว่าจะเกิดอะไรขึ้นหากสิ่งนี้ถูกละเมิด -
นี่คือตารางที่มีสองคอลัมน์ "หนึ่ง" varchar ที่มีความยาว 32,765 และ "สอง" ที่มี 32766
ความยาว =32765+2 + 32766 + 2 =65535
CREATE TABLE IF NOT EXISTS `mytable` ( `one` varchar(32765) NOT NULL, `two` varchar(32766) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ตอนนี้ให้เราเพิ่มความยาวคอลัมน์ -
CREATE TABLE IF NOT EXISTS `mytable` ( `one` varchar(32767) NOT NULL, `two` varchar(32770) NOT NULL ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ด้านบนให้ข้อผิดพลาดดังต่อไปนี้ -
#1118 - Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs
ข้อความข้างต้นระบุว่า −
The maximum row size is 65,535 bytes. If it exceeds, an error will be visible.