【问题标题】:finding non-english numbers starting with ٠٩ returns rows starting with 09查找以 ٠٩ 开头的非英语数字会返回以 09 开头的行
【发布时间】:2015-08-12 12:22:53
【问题描述】:

我们在数据库中有一个名为mobile(varchar 30 - utf8_persian_ci) 的列,其中包含一些手机号码

其中一些不是英文的,我正在尝试查找和编辑它们

它们都以٠٩ 开头,等于09

SELECT *
FROM `users`
WHERE mobile LIKE "%٠٩%"

但此查询返回所有数字,包括以 09 开头的英文数字!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可能应该使用 utf8_bin 而不是 utf8_persian_ci 以避免等价问题(٠٩ 相当于 09)

    见: MySQL distinction between e and é (e acute) - UNIQUE index

    【讨论】:

      【解决方案2】:

      这是因为,您的数据库无法识别非英文字符。尝试使用utf_general_ci 排序规则。那可能会解决你的问题。您可以使用以下内容更改数据库排序规则:

      ALTER DATABASE <database_name> CHARACTER SET utf8 COLLATE utf_general_ci;
      

      这会改变表格排序规则:

      ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8 COLLATE utf_general_ci;
      

      编辑 :我使用utf_general_ci 进行了检查。非常适合我。

      【讨论】:

      • thanx 我会试试这个,我认为它与字符集有关......但如果数据库无法识别非英文数字,​​则查询不应该返回任何结果......我认为不知何故,它将数字翻译成英文
      猜你喜欢
      • 1970-01-01
      • 2022-08-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      相关资源
      最近更新 更多