Взагалі найкращий спосіб - це змінити зіставлення таблиці. Однак у мене є стара програма, і я не в змозі оцінити результат, чи має це побічні ефекти. Тому я намагався якось перетворити рядок у якийсь інший формат, який вирішив проблему зіставлення. Що я знайшов працююче - це порівняння рядків шляхом перетворення рядків у шістнадцяткове зображення його символів. У базі даних це робиться за допомогою HEX(column).
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), перш ніж використовувати його в БД. Через тип зіставлення база даних не може містити символів UTF8 всередині, тому порівняння має працювати подій, хоча це змінює початковий рядок (перетворення символів UTF8, які не існують у ISO-шафі, призводить до того, що вони видаляються цілком). Просто переконайтесь, що, коли ви записуєте дані в базу даних, ви використовуєте те саме перетворення UTF8 в ISO.