En general, la mejor forma es cambiar la clasificación de la tabla. Sin embargo, tengo una aplicación antigua y realmente no puedo estimar el resultado si esto tiene efectos secundarios. Por lo tanto, intenté de alguna manera convertir la cadena en algún otro formato que resolviera el problema de clasificación. Lo que encontré funcionando es comparar cadenas convirtiendo las cadenas en una representación hexadecimal de sus caracteres. En la base de datos, esto se hace con HEX(column).
Para PHP, puede usar esta función:
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);
}
Al realizar la consulta de la base de datos, su cadena UTF8 original debe convertirse primero en una cadena iso (por ejemplo, usarla utf8_decode()
en PHP) antes de usarla en la base de datos. Debido al tipo de intercalación, la base de datos no puede tener caracteres UTF8 dentro, por lo que la comparación debería funcionar aunque esto cambie la cadena original (la conversión de caracteres UTF8 que no existen en el conjunto de caracteres ISO da como resultado un? O estos se eliminan por completo). Solo asegúrese de que cuando escriba datos en la base de datos, utilice la misma conversión de UTF8 a ISO.