Genel olarak en iyi yol, tablo harmanlamasını değiştirmektir. Ancak eski bir uygulamam var ve bunun yan etkileri olup olmadığını gerçekten tahmin edemiyorum. Bu nedenle, dizeyi bir şekilde harmanlama sorununu çözen başka bir biçime dönüştürmeyi denedim. Çalışırken bulduğum şey, dizeleri karakterlerinin onaltılık bir temsiline dönüştürerek dizeyi karşılaştırmaktır. Veritabanında bu HEX(column).
PHP için yapılır, şu işlevi kullanabilirsiniz:
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);
}
Veritabanı sorgusu yaparken, orijinal UTF8 dizginiz DB'de kullanılmadan önce bir iso dizgesine (örneğin utf8_decode()
PHP'de kullanılarak) dönüştürülmelidir . Harmanlama türü nedeniyle, veritabanının içinde UTF8 karakterleri olamaz, bu nedenle orijinal dizeyi değiştirse de karşılaştırma olayı çalışmalıdır (ISO karakter kümesinde bulunmayan UTF8 karakterlerinin dönüştürülmesi bir? İle sonuçlanır veya bunlar tamamen kaldırılır). Veritabanına veri yazarken aynı UTF8 - ISO dönüşümünü kullandığınızdan emin olun.