Em geral, a melhor maneira é alterar o agrupamento da tabela. No entanto, tenho um aplicativo antigo e não sou capaz de estimar o resultado se isso tem efeitos colaterais. Portanto, tentei de alguma forma converter a string em outro formato que resolvesse o problema de agrupamento. O que eu achei trabalhando é fazer a comparação de cadeias, convertendo as cadeias em uma representação hexadecimal de seus caracteres. No banco de dados, isso é feito com o HEX(column).
PHP, você pode usar esta função:
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);
}
Ao fazer a consulta ao banco de dados, sua string UTF8 original deve ser convertida primeiro em uma string iso (por exemplo, usando utf8_decode()
no PHP) antes de usá-la no banco de dados. Devido ao tipo de intercalação, o banco de dados não pode ter caracteres UTF8, portanto o comparismo deve funcionar, embora isso altere a cadeia original (a conversão de caracteres UTF8 que não existem no conjunto de caracteres ISO resulta em? Ou estes são removidos completamente). Apenas certifique-se de que, ao gravar dados no banco de dados, use a mesma conversão UTF8 em ISO.