utf8_unicode_ci และ utf8_general_ci ต่างกันยังไง
จริงๆแล้วทั้ง utf8_unicode_ci และ utf8_general_ci มันคือ Collation ของฐานข้อมูลครับ ซึ่งถ้าเรารู้ว่าคำๆนี้มีความหมายว่าอะไร เราก็จะเข้าใจความหมายของ utf8_unicode_ci และ utf8_general_ci ทันที
Collation หมายถึง รูปแบบการจัดเรียงครับ ซึ่งถ้าเข้าใจตามนี้ก็จะรู้ได้ทันทีว่า ทั้ง utf8_unicode_ci และ utf8_general_ci จะต่างกันตอน "เรียงลำดับ" ครับ
general หมายถึงการเรียงลำดับตามรหัสอักขระ (ในภาษาอังกฤษ)
unicode จะเป็นการเรียงลำดับตามภาษาท้องถิ่น ถ้าเป็นภาษาไทยจะเรียงลำดับตามนี้ http://unicode.org/charts/PDF/U0E00.pdf ซึ่งจริงๆแล้วมันเหมาะกับการเรียงลำดับในภาษาอื่นที่ไม่ใช่ภาษาอังกฤษครับ ซึ่งมันจะเรียงลำดับได้ถูกต้องกว่า (จริงๆแล้วสำหรับผลลัพท์ในภาษาไทยอาจไม่ค่อยชัดเจนเท่าไรนัก มักใช้อันไหนก็ได้ แต่ถ้าเป็นในภาษาต่างประเทศอื่นๆจะมีผลมากทีเดียว)
ในด้าน Performance เนื่องจาก general เรียงลำดับตามรหัสอักขระปกติ ทำให้มันสามารถเรียงลำดับได้เร็วกว่า unicode ครับ ถ้าจะให้ผมแนะนำ สำหรับภาษาไทยผมแนะนำให้ใช้ general จะได้ประโยชน์ด้านความเร็วมากกว่า unicode
แถมให้อีกนิด
ci หมายถึง case insensitive แปลเป็นไทยว่า เรียงลำดับโดยไม่สนใจขนาดตัวอักษร (a และ A คือตัวเดียวกัน)
cs หมายถึง case sensitive ก็ตรงกันข้ามกับ ci A จะอยู่ก่อน a
bin หมายถึง binary หมายถึงเรียงลำดับตาม byte code