โดยทั่วไปวิธีที่ดีที่สุดคือเปลี่ยนการเรียงตาราง อย่างไรก็ตามฉันมีแอปพลิเคชันเก่าและไม่สามารถประเมินผลลัพธ์ได้ว่ามีผลข้างเคียงหรือไม่ ดังนั้นฉันจึงพยายามแปลงสตริงเป็นรูปแบบอื่นที่แก้ปัญหาการเรียงลำดับได้ สิ่งที่ฉันพบว่าได้ผลคือทำการเปรียบเทียบสตริงโดยการแปลงสตริงเป็นการแทนค่าฐานสิบหกของอักขระของมัน ในฐานข้อมูลสิ่งนี้ทำได้ด้วยHEX(column).
For PHP คุณสามารถใช้ฟังก์ชันนี้:
public static function strToHex($string)
{
$hex = '';
for ($i=0; $i<strlen($string); $i++){
$ord = ord($string[$i]);
$hexCode = dechex($ord);
$hex .= substr('0'.$hexCode, -2);
}
return strToUpper($hex);
}
เมื่อทำการสืบค้นฐานข้อมูลสตริง UTF8 ดั้งเดิมของคุณจะต้องถูกแปลงเป็นสตริง iso ก่อน (เช่นใช้utf8_decode()
ใน PHP) ก่อนที่จะใช้ใน DB เนื่องจากประเภทการจัดเรียงฐานข้อมูลจึงไม่สามารถมีอักขระ UTF8 อยู่ภายในได้ดังนั้นการเปรียบเทียบจึงควรทำงานได้แม้ว่าสิ่งนี้จะเปลี่ยนสตริงดั้งเดิม (การแปลงอักขระ UTF8 ที่ไม่มีอยู่ในผลลัพธ์ชุดอักขระ ISO ใน a? หรือสิ่งเหล่านี้จะถูกลบออกทั้งหมด) ตรวจสอบให้แน่ใจว่าเมื่อคุณเขียนข้อมูลลงในฐานข้อมูลแสดงว่าคุณใช้การแปลง UTF8 เป็น ISO เดียวกัน