Сравнение строк используя PHP mysql_* НАБОР НАЗЫВАЕТ UTF 8 и Стол Mysql С utf8_unicode_ci

У меня есть таблица 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 "

";
} while ($row_Recordset1 = mysql_fetch_assoc($Recordset1));

В первый раз, когда это поражает новую стоимость как ожидалось, я добираюсь:

булев ложный
БРЮССЕЛЬ
булев верный

В следующий раз я добираюсь:

булев верный
БРЮССЕЛЬ
булев верный

Очень, поскольку я ожидал бы.

Проблема возникает, когда она поражает не латинские символы , когда каждый проход производит:

булев ложный
Баден-Württember
булев верный

Когда я установил их быть равными, они, и затем когда следующий отчет тянут (и каждый отчет был введен тождественно), это терпит неудачу, это - когда я использовал то же самое кодирование, мне на самом деле нужен он, чтобы признать, что они - то же самое, даже если знаки введены по-другому.

Независимо от того, что происходит, я попробовал utf8_encode и Normalizer:: нормализуйте , чтобы получить истинный результат сравнения, таким образом, я могу использовать это в управляющей структуре (например, если вы видели его, прошлый раз не печатает его на этот раз), но это терпит неудачу.

1
добавлено отредактировано
Просмотры: 1
de
Обеспечивают hexdumps рассматриваемых последовательностей .
добавлено автор hakre, источник
Можно ли включать продукцию из ВЫСТАВОЧНЫЙ CREATE TABLE newmeets в вопросе? Может случиться так, что наборы символов и сопоставления на таблице и колонках поддельные.
добавлено автор Charles, источник
Чарльз - является этим, что вы имели в виду? - Структура таблицы для стола newmeets - CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ newmeets ( ID интервал (11) NOT NULL auto_increment, Страна , текст сопоставляет utf8_unicode_ci NOT NULL, , государство varchar (50) сопоставляет utf8_unicode_ci NOT NULL, PRIMARY KEY ( ID )) CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=110 ENGINE=InnoDB ПО УМОЛЧАНИЮ;
добавлено автор Sapfizz, источник
Спасибо Чарльз, шестнадцатеричные свалки были способом рассмотреть его, они показали мне, что, хотя я копировал ценности по, они все еще не были тем же самым... назад к стадии ввода.
добавлено автор Sapfizz, источник
Не уверенный, что я должен сделать, чтобы добавить благодарность вашей репутации?
добавлено автор Sapfizz, источник

1 ответы

Похоже, что у вас есть проблема нормализации в вашей базе данных. Вместо того, чтобы хранить то же самое государство, поскольку последовательность много раз, поставила все государственные имена в стол сам по себе и ссылается на них.

Это также гарантирует, чтобы вы не делали - например, случайно - помещенные двойные различные, но одинаково смотрящие данные в различные ряды, которые вы не в состоянии правильно выровнять позже, как вы просто сделали.

Альтернативно необходимо подвергнуть сомнению отличные ряды и обновить их, так, чтобы вы сделали , по крайней мере , имеют те же самые данные о двоичной строке для одноименных государств. Например, если Mysql в состоянии на самом деле выровнять эти государственные последовательности, но PHP - из-за он - двойная природа последовательностей - не.

0
добавлено
Чарльз - является этим, что вы имели в виду? - Структура таблицы для стола newmeets - CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ newmeets ( ID интервал (11) NOT NULL auto_increment, Страна , текст сопоставляет utf8_unicode_ci NOT NULL, , государство varchar (50) сопоставляет utf8_unicode_ci NOT NULL, PRIMARY KEY ( ID )) CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=110 ENGINE=InnoDB ПО УМОЛЧАНИЮ;
добавлено автор Sapfizz, источник
Жаль игнорируют выше, я хотел писать ИЗБРАННОМУ ГРАФУ ( государство ) КАК "граф", государство GROUP BY государство ORDER BY , государство ОГРАНИЧИВАЕТ 0, 30 графов Государство 61 Баден W\U 0026\\U 0023\252; rttember 4 Баварии 2 БРЮССЕЛЯ 17
добавлено автор Sapfizz, источник
Поскольку только небольшому проценту стола на самом деле назначат государство, я надеялся избежать необходимости хранить их в отдельном столе и ссылаться на них. Все текущие состояния были обновлены к той же самой стоимости, делая обновление на них.
добавлено автор Sapfizz, источник