代码之家  ›  专栏  ›  技术社区  ›  opensas

mysql不考虑重音符号来验证索引键的唯一性

  •  1
  • opensas  · 技术社区  · 15 年前

    我有一个表,只有一个名为“tag”的字段,它是varchar(250)

    该字段是用排序规则“latin1\u西班牙语\u ci”定义的,因为我计划用西班牙语保存单词。。。

    问题是下面的查询

    select * from test where tag = 'unó'
    

    select * from test where tag = 'uno'
    

    也就是说,对于mysql,'uno'='un'。。。“un”和“un”。。。等。。。

    此字段应具有唯一密钥。。。

    我试过与别人的排序,所有的“斌”排序似乎工作,也拉丁文1_一般_词太。。。

    我只想知道这是否是为数据库中的每个字段选择的合适的排序规则,或者我是否会在选择它时遇到任何困难。。。考虑到我计划在数据库中存储西班牙语数据。。。

    ps:不管怎样,在西班牙语的校勘中,口音被认为是毫无意义的似乎真的很奇怪。。。

    4 回复  |  直到 13 年前
        1
  •  2
  •   stoivane    15 年前

    你可以用 latin1_general_ci 作为默认的数据库/表/列排序规则并指定 latin1_spanish_ci 在需要时按选择:

    select * from test order by tag collate latin1_spanish_ci;
    select * from test where tag = 'uno' collate latin1_spanish_ci;
    

    因为‘o’、’等在 拉丁西班牙语 ,如果表中包含例如“uno”、“un”和“un”,则后一语句返回多个结果。

        2
  •  1
  •   dolmen    6 年前

    这个 ci latin1_spanish_ci 方法 不区分大小写 .

    如果您想能够区分任何重音字母和任何大小写,以语言名称命名的排序规则是不合适的。将排序规则与 _bin

    attach a specific collation 指定值以强制对列的排序规则使用特定排序规则:

    SELECT * FROM test WHERE tag = ('uno' COLLATE latin1_bin);
    
        3
  •  0
  •   funwhilelost    15 年前

        4
  •  0
  •   Luis H Cabrejo    6 年前

    这是一个快速解决这个问题。

    “un”应另存为“un” ó '在你的数据库中。

    你的搜索结果应该是

    选择*from database where field='un ó '

    使用UNICODE HTML实体是关键 https://www.compart.com/en/unicode/U+00F3 ... 干杯!