【问题标题】:Å vs å is not matching in mysql query - how to do case insensitive matchÅ vs å 在 mysql 查询中不匹配 - 如何进行不区分大小写的匹配
【发布时间】:2014-12-20 10:46:45
【问题描述】:

我在PHP 开发了一个丹麦网站。我正在使用mysqli

我在称为标签的数据库字段中有 Daugård 和 Århus 之类的词。

当我运行如下查询时,我希望这两个值都作为结果。

Query : select * from table_name where tags like '%år%'; 
Expected result : Daugård and Århus both
Actual result : Daugård

现在它执行区分大小写的匹配并仅返回 Daugård 单词。 我尝试通过函数 set_charset('utf8') 将 charset 动态更改为 utf8,但没有成功。

'tags' field is 'utf8_general_ci'table collation is 'utf8_general_ci' 和我的database collation is 'latin1_swedish_ci' 的排序规则。

帮帮我,我怎样才能做到这一点?

【问题讨论】:

  • 该字段是否有自己的排序规则?
  • 是的,我忘了提,'tags' 字段也有 'utf8_general_ci' 排序规则
  • 数据实际上是否正确存储在数据库中,如字符 Å 和 å? “尝试更改字符集”听起来您之前没有设置字符集,这意味着数据可能作为垃圾存储在数据库中,MySQL 无法识别特定字符。
  • 好吧,我尝试在通过 PHP-MySQLi 查询检索数据时更改字符集运行时。我在保存之前或之后没有更改表、字段或数据库的排序规则...
  • 什么版本的 MySQL?

标签: php mysql utf-8 mysqli case-sensitive


【解决方案1】:

为避免排序问题,请在比较之前对“标签”使用大小写转换功能:

select * from table_name where lcase(tags) like '%år%';

我可能会遗漏一些东西,因为我对 MySQL 并不熟悉。我知道函数 LOWER(tags) 可以在 Oracle 中完成这项工作,只要搜索的模式也是小写的。

【讨论】:

    猜你喜欢
    • 2020-07-27
    • 2011-02-09
    • 2016-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    • 2012-03-15
    • 1970-01-01
    相关资源
    最近更新 更多