0

是否可以在 MySQL 中定义一个特殊的比较器进行索引?

假设我有两个键,A.Zeb*ra.O并且R.Zebra.Z. 我让它们以这种方式编写,为用户提供了一些额外的信息,但出于平等目的,我可以去掉末端并删除额外的*. 在 Java 中,我可以通过实现Comparator接口来做到这一点。MySQL有类似的想法吗?

我最好只创建一个额外的连接表,比如

A.Zeb*ra.O   1
R.Zebra.Z    1
L.Horse.P    2

要指定两个特定字符串相等,并在另一个表更改时保持此表为最新?

4

2 回答 2

1

您可以创建一个新的排序规则,这类似于创建一个比较器,但仅适用于字符串。见http://dev.mysql.com/doc/refman/5.6/en/adding-collat​​ion.html

于 2013-07-16T14:47:43.687 回答
1

您不能像在 Java 等中那样定义比较器。排序规则可能有效,但我没有这些经验。在我的脑海中,这里有一些替代方案:

  1. 编写一个用户定义的函数来进行比较。这将相对较慢且无法优化。

  2. 为每一行存储一个规范的排序值。您可以使用触发器计算其值。例如,您的表看起来像这样。

    Thingie     CanonicalThingie
    ----------- ----------------
    A.Zeb*ra.O  Zebra
    R.Zebra.Z   Zebra
    L.Horse.P   Horse
    
  3. 重新考虑你的设计。如果该A.Zeb*ra.0值意味着三或四件事,则可能需要将其拆分为三或四列。您可能面临的挑战不仅仅是对它进行分类。

于 2013-07-16T14:50:25.620 回答