จำนวนฟิลด์สูงสุดในแบบฟอร์ม
บางครั้งขณะสร้างฟิลด์ที่กำหนดเอง คุณอาจเผชิญกับข้อความแสดงข้อผิดพลาดที่มีลักษณะดังนี้:
Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs. > >
หมายความคืออะไร?
ในเชิงง่าย มันหมายความว่าคุณได้ถึงขีดจำกัดของจำนวนฟิลด์สูงสุดสำหรับแบบฟอร์ม/doctype เฉพาะ ดังนั้น ขีดจำกัดสูงสุดของฟิลด์คืออะไร?
ใน MySQL มีขีดจำกัดคงที่ของ 4096 คอลัมน์ต่อตาราง แต่ขีดจำกัดสูงสุดที่มีประสิทธิภาพอาจน้อยกว่าสำหรับตารางที่กำหนด ขีดจำกัดที่แน่นอนขึ้นอยู่กับปัจจัยที่โต้ตอบกันหลายปัจจัย
ทุกตาราง (ไม่ว่าจะเป็น storage engine ใด) มีขนาดแถวสูงสุด 65,535 ไบต์ Storage engines อาจวางข้อจำกัดเพิ่มเติมบนขีดจำกัดนี้ ลดขนาดแถวสูงสุดที่มีประสิทธิภาพ
ขนาดแถวสูงสุดจำกัดจำนวน (และอาจเป็นขนาด) ของคอลัมน์เพราะความยาวรวมของคอลัมน์ทั้งหมดไม่สามารถเกินขนาดนี้ (65,535 ไบต์) ตัวอย่างเช่น อักขระ utf8mb3 ต้องการไบต์สูงสุด 3 ไบต์ต่ออักขระ ดังนั้นสำหรับคอลัมน์ VARCHAR(140) เซิร์ฟเวอร์ต้องจัดสรร 140 × 3 = 420 ไบต์ต่อค่า ดังนั้น ตารางไม่สามารถมีคอลัมน์ดังกล่าวมากกว่า 65,535 / 420 = 156 คอลัมน์
ในเฟรมเวิร์ก Frappe คอลัมน์ประเภท VARCHAR(140) ถูกสร้างตามประเภทฟิลด์ "Data", "Link", "Select", "Dynamic Link", "Password" และ "Read Only" ดังนั้น คุณสามารถสร้างคอลัมน์ดังกล่าวประมาณ 156 คอลัมน์ในระบบ
วิธีแก้:
เพื่อเพิ่มฟิลด์เพิ่มเติมในระบบ คุณสามารถทำการเปลี่ยนแปลงบางอย่าง
- แปลงฟิลด์บางฟิลด์เป็นฟิลด์ประเภท "Text", "Small Text", "Text Editor" หรือ "Code" ใน MySQL คอลัมน์ BLOB และ TEXT นับจากหนึ่งถึงสี่บวกแปดไบต์แต่ละคอลัมน์ต่อขีดจำกัดขนาดแถวเพราะเนื้อหาของพวกมันถูกเก็บแยกจากส่วนที่เหลือของแถว ดังนั้น การแปลงเป็นประเภทฟิลด์เหล่านี้จะเปิดพื้นที่บางส่วนและจะอนุญาตให้เพิ่มฟิลด์เพิ่มเติม
- ตั้งค่าที่เล็กลงในคุณสมบัติ "Length" ขณะสร้างฟิลด์ ค่าเริ่มต้นคือ 140 ระบบตั้งความยาวของ
VARCHARตามคุณสมบัตินี้และจัดสรรขนาดสำหรับคอลัมน์เหล่านั้น ดังนั้น Length ที่เล็กลงนำไปสู่การเพิ่มฟิลด์เพิ่มเติม - ฟิลด์ที่กำหนดเองไม่ถูกลบจากฐานข้อมูลโดยอัตโนมัติ หากคุณแน่ใจว่าคุณไม่ต้องการข้อมูลจากฟิลด์ที่กำหนดเองใดๆ คุณสามารถ trim ตารางโดยใช้คำสั่ง trim-tables: https://frappeframework.com/docs/user/en/bench/reference/trim-tables