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