我想知道是否可以使用 MySQL 和 PHP 比较两个字符串并获得相同的结果。在 MySQL 中,我有:

a = b collate utf8_general_ci

对于 PHP,我找到了一种使用 Transliterator class 的有前途的方法
transliterator_transliterate($a, 'NFD; [:Nonspacing Mark:] Remove; NFC; Lower();') = transliterator_transliterate($b, 'NFD; [:Nonspacing Mark:] Remove; NFC; Lower();')

大多数情况下,两者都会做相同的事情,但似乎无法比较 PHP 中的两个字符串,既不区分重音也不区分大小写,与 MySQL 兼容。

有没有人有更好的解决方案来在 PHP 和 MySQL 中获得相同的结果,或者无论如何都应该避免这种情况,将所有比较转移到数据库或应用程序代码中?

上下文是 MySQL 和专有数据库之间的复制。我在 MySQL 的文本字段上的数据库中有一个唯一键。另一方面,我在内存中有数千行,我想在 PHP 中过滤唯一值,而不是先尝试将它们插入 MySQL 表中。我的方法是将这些值用作数组中的键,以保持它们的唯一性。现在的问题归结为以某种方式规范化这些键,将相同的值视为与 MySQL 中的唯一索引相同。

最佳答案

即使你实现并通过一些测试确认,由于php和mysql字符串比较的内部实现不同,它可能不可靠。

与整数和数学计算不同,字符串比较通常以一种满足特定需求的方式实现,并且可以偏向于不同的语言和平台。因此,如果您使用两个不同的系统,则无法保证它们在任何时候都完全相同。

其次,与 mysql 相比,php 执行此类操作会更慢。
您可以使用 mysql 功能来过滤唯一值。例如,您可以创建 View 或临时表来执行操作。
例如, View 和临时表是合适的并且是执行此类操作的正确方法。

您可以阅读更多 herehere

关于php - mysql数据库与php代码的字符串比较等价性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27184561/

10-09 16:26
查看更多