我将 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/