В общем, лучший способ - изменить параметры сортировки таблицы. Однако у меня есть старое приложение, и я не могу точно оценить результат, имеет ли это побочные эффекты. Поэтому я попытался как-то преобразовать строку в какой-то другой формат, который решил проблему с сортировкой.
Я обнаружил, что работа заключается в сравнении строк путем преобразования строк в шестнадцатеричное представление их символов. В базе данных это делается с помощью 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.