mysql数据库和php代码之间的字符串比较等价

时间:2014-11-24 19:41:01

标签: php database comparison

我想知道是否可以使用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中的唯一索引相同。

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以阅读更多herehere