MySQL用户定义的比较器

时间:2013-07-16 14:38:30

标签: mysql join comparator

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

说我有两个键,A.Zeb*ra.OR.Zebra.Z。我以这种方式编写它们给用户提供一些额外的信息,但出于平等目的,我可以删除结束并删除额外的*。在Java中,我可以通过实现Comparator接口来实现这一点。 MySQL有类似的想法吗?

仅仅创建一个额外的连接表(如

)会更好吗?
A.Zeb*ra.O   1
R.Zebra.Z    1
L.Horse.P    2

指定两个特定字符串是否相等,并在另一个表更改时使该表保持最新状态?

2 个答案:

答案 0 :(得分:1)

您可以创建新的排序规则,类似于创建比较器但仅限于字符串。见http://dev.mysql.com/doc/refman/5.6/en/adding-collation.html

答案 1 :(得分:1)

您不能像Java等那样定义比较器。整理可能有效,但我没有经验。在我的头顶,这里有一些选择:

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

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

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