หน้าเว็บ

วันศุกร์ที่ 8 สิงหาคม พ.ศ. 2551

แก้ไขปัญหา Database error 1071 while doing query Specified key was too long; max key length is 1000 bytes ของ PHPList

เนื่องจากถ้าใช้ db เป็น MyISAM จะรองรับ index key ขนาดไม่เกิน 1000 bytes
แต่ว่า user_blacklist_data ใช้ email และ name เป็น index key ซึ่งมีขนาดรวมกันคือ 255+100 = 355 bytes
และถ้าใช้เป็น UTF แต่ละ character จะใช้ 3 bytes รวมเป็น 3*355 = 1065 bytes ซึ่งเกินที่กำหนด

วิธีแก้วิธีแรก สร้างตาราง user_blacklist_data ขึ้นมาเอง โดยลดขนาด email ลงเหลือ 233 bytes แทน ซึ่งปกติก็ไม่ค่อยมีใครใช้ถึงอยู่แล้ว
CREATE TABLE phplist_user_blacklist_data (email varchar(233)
not null unique,name varchar(100) not null,data text,index
emailidx (email),index emailnameidx (email,name))


หรือวิธีที่สอง ให้ใช้ InnoDB แทน MyISAM จะไม่เกิดปัญหานี้

ระบบที่ทดสอบ
PHPList: 2.10.5

ข้อมูลจาก
http://forums.phplist.com/viewtopic.php?t=8150
http://mantis.phplist.com/bug_view_advanced_page.php?bug_id=8583

ไม่มีความคิดเห็น: