有没有办法在 MySQL / Rails 中强制区分大小写以进行单个查找?

发布于 2024-07-07 16:34:30 字数 166 浏览 8 评论 0原文

我正在对标签进行一些搜索,有些用户喜欢“cat”,而另一些用户喜欢“Cat”,想想看……

无论如何,有没有办法强制特定的查找区分大小写? 如:

Tag.find(:some-special-option-here)

有什么想法吗?

I'm doing some searching of tags, and some users like "cat" while others like "Cat" Go figure...

Anyways, is there a way to force a particular find to be case sensitive? Such as:

Tag.find(:some-special-option-here)

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

好听的两个字的网名 2024-07-14 16:34:30

您还可以在不更改列属性的情况下执行区分大小写的搜索。

SELECT * FROM mytable WHERE myfield='Value' 

此查询匹配:

  • value
  • VALUE
  • vAlUe
  • 等等

而...

SELECT * FROM mytable WHERE BINARY myfield='Value'

仅匹配:

You can also do a case-sensitive search without changing your column properties.

SELECT * FROM mytable WHERE myfield='Value' 

This query matches:

  • Value
  • value
  • VALUE
  • vAlUe
  • and so on

While...

SELECT * FROM mytable WHERE BINARY myfield='Value'

Matches only:

  • Value
归途 2024-07-14 16:34:30

通过在创建表时将“COLLATE utf8_bin”添加到 :options 字符串,您可以在创建表时使所有字符串区分大小写。 例如:

create_table( "page_infos", :force => true, :options => "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin") do |t|
      t.string   "title",       :limit => 120
end

You can make all strings case sensitive when you create the table by adding "COLLATE utf8_bin" to the :options string when creating the table. For example:

create_table( "page_infos", :force => true, :options => "ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_bin") do |t|
      t.string   "title",       :limit => 120
end
ぃ双果 2024-07-14 16:34:30

在 mysql 数据库中,将文本的数据类型设置为 utf_collat​​e_bin。 例如:

ALTER TABLE `sets` CHANGE `set_name` `set_name` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

其中“sets”是表,“set_name”是 VARCHAR(64) 类型的列。 您也可以在 PhpMyAdmin 中执行此操作。

任何二进制整理都可以完成这项工作; 但 utf8 更好。

如果您想知道当前整理末尾的 _ci 是什么,它意味着“不区分大小写”:p

In the mysql database, set your text's data type to utf_collate_bin. For example:

ALTER TABLE `sets` CHANGE `set_name` `set_name` VARCHAR( 64 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL

Where 'sets' is the table, 'set_name' is the column of type VARCHAR(64). You can also do this in PhpMyAdmin..

Any binary collate will do the job; but utf8 is preferable.

If you were wondering what the _ci at the end of your current collate is, it means "Case Insensitive" :p

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文