【发布时间】:2016-11-08 18:15:16
【问题描述】:
这是一个 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' is not valid for CHARACTER SET 'latin1' - 也许这是 What is the best collation to use for MySQL with PHP? 的副本,但这似乎更主观,我正在寻找特定问题的具体答案
其他说明:
- 如果有影响的话,这个栏目是
latin1 - 我的 PHP PDO 包装库是 https://github.com/fulldecent/thin-pdo
【问题讨论】:
-
你在哪里设置
$next? -
您可以使用
ORDER BY email COLLATE 'latin1_bin',或者您可以将列的排序规则设置为utf8,但您不能通过查询中的其他子集进行排序。 -
您在 2016 年使用
latin1列有什么原因吗?这似乎过于严格了。 -
@cmorrissey,谢谢你的代码更正
-
@tadman 谢谢,我举报了上游github.com/sequelpro/sequelpro/issues/2530
标签: php mysql pdo character-encoding collation