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

我想知道是否可以使用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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值