State列を持つ Mysql テーブルがあります。状態はヨーロッパ全体からのもので、テーブルと列はutf8_unicode_ci
.
使用するデータベースを呼び出すとき
mysql_select_db($database_WTF, $WTF);
mysql_query('SET NAMES utf8');
$query_Recordset1 = "SELECT *
FROM newmeets
WHERE newmeets.`State` IS NOT NULL
AND newmeets.`State` != ''
ORDER BY newmeets.`State` ASC ";
次に、この単純なループで実行します
mysql_select_db($database_WTF, $WTF);
mysql_query('SET NAMES utf8');
$query_Recordset1 = "SELECT *
FROM newmeets
WHERE newmeets.`State` IS NOT NULL
AND newmeets.`State` != ''
ORDER BY newmeets.`State` ASC ";
$LastState = "";
do {
echo
var_dump($LastState == $row_Recordset1['State']);
echo $row_Recordset1['State'];
$LastState = $row_Recordset1['State'];
var_dump($LastState == $row_Recordset1['State']);
echo "<hr>";
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));
期待どおりに新しい値に初めて到達すると、次のようになります。
boolean false
BRUSSELS
boolean true
次回私が得る時:
boolean true
BRUSSELS
boolean true
私が期待するほど。
問題は、各パスが生成されるときに非ラテン文字にヒットしたときに発生します。
boolean false
バーデン・ヴュルテンバー
boolean true
それらが等しくなるように設定すると、次のレコードがプルされると(そして各レコードが同じように入力された場合)、失敗します。これは、同じエンコーディングを使用した場合です。実際には、それらが同じであることを認識する必要があります文字が異なって入力されていても。
何が起こっているかに関係なく、比較から真の結果を得ようutf8_encode
と試みNormalizer::normalize
たので、これを制御構造で使用できます(たとえば、前回見た場合は、今回は印刷しないでください)が失敗します。