【发布时间】:2012-12-28 10:57:28
【问题描述】:
我有一个带有 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));
当它第一次达到预期的新值时,我得到:
布尔假
布鲁塞尔
布尔真
下次我得到:
布尔真
布鲁塞尔
布尔真
正如我所料。
当每次通过时遇到非拉丁字符时,问题就来了:
布尔假
巴登-符腾堡
布尔真
当我将它们设置为相等时,然后当提取下一条记录(并且每条记录输入相同)时它会失败,这是我使用相同编码时,我实际上需要它来识别它们即使输入的字符不同,也一样。
无论发生什么,我都尝试utf8_encode 和Normalizer::normalize 从比较中获得真实结果,因此我可以在控制结构中使用它(例如,如果您上次看到它,请不要打印它这次)但它失败了。
【问题讨论】:
-
您能否将
SHOW CREATE TABLE newmeets的输出包含在您的问题中?表和列上的字符集和排序规则很可能是伪造的。 -
Charles - 你是这个意思吗? -- 表
newmeets的表结构 -- CREATE TABLE IF NOT EXISTSnewmeets(IDint(11) NOT NULL auto_increment,Countrytext collate utf8_unicode_ci NOT NULL,Statevarchar(50) collate utf8_unicode_ci NOT NULL, PRIMARY KEY (ID) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=110 ; -
谢谢查尔斯,十六进制转储是查看它的方式,它们向我展示了虽然我正在复制值,但它们仍然不一样......回到输入阶段。
-
不确定我需要做什么才能为您的声誉增加荣誉?
标签: php mysql utf-8 character-encoding unicode-normalization