我想知道是否可以使用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功能来过滤唯一值.例如,您可以创建视图或临时表来执行操作.
例如,视图和临时表是合适的,也是进行此类操作的正确方法.
您可以阅读更多here和here
标签:php,database,comparison
来源: https://codeday.me/bug/20190708/1402778.html