php - 以与 MySQL 相同的方式比较 PHP 中的字符串

标签 php mysql utf-8 collation mysql-error-1062

我将 varchar 存储在 utf8 MySQL 表中并使用 utf8_general_ci 归类。我在 varchar 上有一个唯一索引。我想用 PHP 进行字符串比较,这相当于 MySQL 对索引所做的操作。

一个具体的例子是,我希望能够在发生这种情况之前检测到“a”在 PHP 中被认为等同于“À”:

mysql> insert UniTest (str) values ('a');                                   
Query OK, 1 row affected (0.00 sec)

mysql> insert UniTest (str) values ('À');                                   
ERROR 1062 (23000): Duplicate entry 'À' for key 1

最佳答案

排序规则与存储无关。您需要设置字符集以确定存储编码。排序规则控制比较和排序应该如何发生。排序规则必须是字符集感知的,否则它与字符集无关。

要回答你的问题,你可以使用iconv转译文本,然后进行比较。例如:

function compare($s1, $s2) {
  return strcmp(
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s1),
    iconv('UTF-8', 'ISO-8859-1//TRANSLIT', $s2));
}

这基本上就是 MySql 将为您做的,尽管它可能更快,并且它的整理表可能与 ISO-8859-1//TRANSLIT 略有不同。对此不完全确定。

不过,正如其他人已经建议的那样,使用数据库可能会更容易。

关于php - 以与 MySQL 相同的方式比较 PHP 中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471021/

相关文章:

php - 分层选择人口 jQuery/PHP

php - 在 php 中创建一个循环以在查询中工作

Mysql order by on column with unicode characters

php - 在 RDBMS 中将 ids 存储为逗号分隔的字符串是否有任何性能原因?

mysql - MariaDB Galera 集群服务器以 100% CPU 运行并且负载不断上升

php - UTF-8 和德语字符?

javascript - 用于查找和替换转义的 UTF-8 字符串的正确正则表达式

file-upload - 带有 utf8 字符过滤器的 primefaces 文件上传过滤器

php - 根据帖子大小“拉伸(stretch)”图像

php - 通过 lon/lat 坐标计算对 PHP/SQL 结果进行排序