这是一个 MySQL 查询:
SELECT last_name FROM users ORDER BY last_name
我们将所有数据导入 PHP,然后运行:
$prior = NULL;
do {
$current = array_shift($results);
assert($current >= $prior);
$prior = $current;
} while ($current !== NULL);
目前,此断言对于某些输入失败。是否可以在上面的 MySQL 查询中添加 COLLATE 子句来绝对保证 PHP 断言?
<小时/>我尝试过的东西:
- 上面的代码不适用于某些非 ASCII 输入
ORDER BY email COLLATE utf8_bin
导致COLLATION 'utf8_bin' 对于 CHARACTER SET 'latin1' 无效
- 也许这是 What is the best collation to use for MySQL with PHP? 的重复项但这似乎更主观,我正在寻求特定问题的特定答案
其他说明:
- 如果有区别,此列为
latin1
- 我的 PHP PDO 包装器库是 https://github.com/fulldecent/thin-pdo
最佳答案
echo ('a' == 'A') ? 'a==A ' : 'a <> A ';
echo ('a' == 'á') ? 'a==á ' : 'a <> á ';
两人都回来了<>
,所以我推断 PHP 的行为类似于 latin1_bin
(或您拥有的任何字符集的 _bin
)。
关于php - 哪种 MySQL 排序规则与 PHP 的字符串比较完全匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38228335/