【问题标题】:How to make a column in SQL case insensitive?如何使 SQL 中的列不区分大小写?
【发布时间】:2017-07-08 18:48:18
【问题描述】:

问题是维基媒体中的页面链接过程,我创建了一个链接 [[like this]] 或 [[Like This]] 创建两个不同的链接。第三个单独的链接是 [[LIKE this]] ...我希望使数据库不区分大小写,以便它们都链接到同一页面。以下是一些建议的解决方案: 我正在尝试解决方案 #6。 https://meta.wikimedia.org/wiki/Case_sensitivity_of_page_names

http://archive.is/Dm5YI#selection-376.1-393.32

不区分大小写的意思是:

https://iglooo.000webhostapp.com/index.php?title=Computer_science

将返回与以下相同的结果:

https://iglooo.000webhostapp.com/index.php?title=Computer_Science

而不是像现在这样的单独页面。

‘collat​​e latin1_bin’实际上强制 mySQL 列区分大小写。

这是我所做的,alter table 需要 key drop:

alter table page drop key name_title;
alter table page modify column page_title varchar(255) NOT NULL default '';

有一个名为“page”的表需要区分大小写。上述尝试失败了。请帮忙。

我正在使用最新的 mediawiki 发行版。

【问题讨论】:

  • 这适用于哪个 RDBMS?请添加一个标签以指定您使用的是mysqlpostgresqlsql-serveroracle 还是db2 - 或者完全是其他东西。
  • SQL 中的列名不区分大小写。
  • 排序规则只影响排序顺序。例如,如果“Ab”和“aB”在 WHERE 中应该被视为相等,则使用 upper()
  • 为什么不能在插入或更新该列之前标准化数据(小写/大写)?
  • 提供的链接不起作用。您遇到了哪些挑战/错误?

标签: mysql mediawiki


【解决方案1】:

如果您不清理进入系统的数据,则无法以不区分大小写的方式存储它。话虽如此,您可以使用函数查询数据。

select
    foo.bar
from
    foo
where
    upper(foo.bar) = upper(MY_PARAMETER)

注意,右手upper() cluase 会在您的应用程序逻辑中得到更好的处理,但在这里完全可以这样做。

【讨论】:

    【解决方案2】:

    避免更改表和更改列的格式,您可以简单地使用整理

    在你查询中

    col_name = 'Computer_science' COLLATE latin1_general_ci
    

    以这种方式,选择列用作不区分大小写(通过传递)您在表定义中的 bin 排序规则

    【讨论】:

    • 这是我的建议 .. 如果你想改变表格然后改变分配一个不区分大小写的追逐 .. (不是 _ latin1_general_bin .. 而是 latin1_general_ci 或 mysql latin1_swedish_ci 的默认值;
    • 一个可能的解决方案(与 MediaWiki 直接相关):funkypenguin.co.nz/howto/…
    猜你喜欢
    • 2015-06-29
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2010-10-22
    • 2014-05-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多