【问题标题】:Case sensitive find in RailsRails 中区分大小写的查找
【发布时间】:2010-12-29 15:47:06
【问题描述】:

我正在使用带有排序规则utf8_general_ci 的 Mysql,对于我的大多数搜索来说它都很好。但是对于一个模型和一个字段,我想找到一个区分大小写的记录 sensitive。怎么做?

【问题讨论】:

    标签: mysql ruby-on-rails find collation case-sensitive


    【解决方案1】:

    执行不区分大小写查询的是 MySQL,而不是 Ruby on Rails。

    http://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html

    您可以制作需要区分大小写的数据库列

    1. 将字段修改为 BINARYVARBINARY 而不是 CHAR 和 VARCHAR。
    2. 将字段修改为具有二进制排序规则(例如 latin1_bin)

    -

     create table tbl_name (
        ...
        data varchar COLLATE latin1_bin
     )
    

    或者您可以修改查询以使用 COLLATE 运算符:

    SELECT * from tbl_name WHERE col_name COLLATE latin1_bin LIKE 'a%'

    【讨论】:

    • 是的,我知道,但是当所有其他搜索都不区分大小写时,我想在区分大小写的 Rails 中找到它
    • 我知道如何在 MySql 中做到这一点。我在问如何在 Rails 中做到这一点。我已经用 Model.find_by_sql 做到了,但我正在寻找更清洁的解决方案。
    • 基本上要么 mysql 对具有区分大小写属性的列使用数据类型,要么 SELECT 查询强制匹配区分大小写。 Ruby-on-rails 不会影响前者,我不知道除了使用 Model.find_by_sql 之外还有其他方法可以做到这一点
    【解决方案2】:

    如果您总是想以区分大小写的方式搜索该列,最好使用排序规则 utf8_bin 来定义它

    【讨论】:

      猜你喜欢
      • 2012-07-05
      • 2014-08-13
      • 2010-10-15
      • 2013-06-23
      • 1970-01-01
      • 2011-05-12
      • 1970-01-01
      • 2023-01-18
      • 2014-03-25
      相关资源
      最近更新 更多