排序MySQL查询忽略大小写

时间:2015-07-20 22:45:23

标签: mysql objective-c sorting case-insensitive

Duh马上你会想,“使用ORDER BY然后使用专栏”,但我的价值是:

  1. A
  2. ž
  3. 一个
  4. ž
  5. 当我使用此查询对它们进行排序时:

    SELECT * FROM Diaries ORDER BY title ASC;
    

    然后我明白了:

    1. A
    2. ž
    3. 一个
    4. ž
    5. 当我想要获得这样的内容时,第一个问题

      1. A
      2. 一个
      3. ž
      4. ž
      5. 我遇到了同样的排序问题,第二个问题,但我能够解决这个问题:通过暂时将所有字符放在小写

        for (NSString *key in [dicGroupedStories allKeys]) {
            [dicGroupedStories setValue: [[dicGroupedStories objectForKey: key] sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
                NSString *stringA = [[a objectStory_title] lowercaseString];
                NSString *stringB = [[b objectStory_title] lowercaseString];
        
                return [stringA compare: stringB];
            }] forKey: key];
        
        }
        

        我之所以不使用此比较器来对我的第一个问题进行排序的唯一原因是bc我不想执行我的查询然后对它们进行排序然后使用该数组。

        问题:我想知道是否有办法按照我的第二个问题在SQL查询中对其进行排序

          

        对象 id a id b 是包含其他对象的数组,例如标题,创建日期,说明等。objectDiary_title返回NSString }

3 个答案:

答案 0 :(得分:1)

在SQL中,您可以使用lower()中的upper()order by函数:

ORDER BY lower(Diaries), diaries

答案 1 :(得分:0)

您可以将COLLATE与xxx_ci一起使用,其中ci表示不区分大小写。例如:

SELECT * FROM Diaries ORDER BY title COLLATE 'latin1_general_ci' ASC;

这里有关于MySQL案例敏感性的更多信息:https://dev.mysql.com/doc/refman/5.0/en/case-sensitivity.html。它对搜索和比较也很有用。

答案 2 :(得分:0)

使用不区分大小写的collation,例如:

ORDER BY Diaries COLLATE utf8_unicode_ci ;

但是,与任何convertion on-the-fly一样,即时更改排序规则会使查询无法使用索引(如果要排序的数据集足够小,则可以接受)。

如果性能问题,那么最好使用目标归类重新索引列:

ALTER TABLE MODIFY COLUMN Diaries VARCHAR(10) COLLATE utf8_unicode_ci ;

ORDR BY将因defaut而不区分大小写,并且可以在此列上使用索引。

utf8_unicode_ci只是一个例子。只需确保使用排序*_ci(对于不区分大小写)compatible with the column's encoding

相关问题