如何更改排序规则以使mysql不区分大小写

时间:2015-04-28 13:58:11

标签: mysql collation case-sensitive

我发现当我查询其中一个表时它区分大小写,所以我尝试更改排序规则(我在Windows中使用Workbench)。我

    right clicked on the table -> alter table -> collation 
-> changed from utf8mb4_default to utf8mb4_general_ci

但它没有用,查询仍然区分大小写。当我

right click on the table -> alter table -> collation 

是utf8mb4_default

当我再次将其更改为utf8mb4_general_ci并应用更改时,表示未检测到任何更改!

列类型是VARBINARY,我试过这个:

MySQL case insensitive search on varbinary field?

但是需要花费很多时间,这是不可接受的。

这是创建声明:

CREATE TABLE `page` (
  `page_id` int(8) unsigned NOT NULL AUTO_INCREMENT,
  `page_namespace` int(11) NOT NULL DEFAULT '0',
  `page_title` varbinary(255) NOT NULL DEFAULT '',
  `page_restrictions` tinyblob NOT NULL,
  `page_counter` bigint(20) unsigned NOT NULL DEFAULT '0',
  `page_is_redirect` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `page_is_new` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `page_random` double unsigned NOT NULL DEFAULT '0',
  `page_touched` varbinary(14) NOT NULL DEFAULT '',
  `page_links_updated` varbinary(14) DEFAULT NULL,
  `page_latest` int(8) unsigned NOT NULL DEFAULT '0',
  `page_len` int(8) unsigned NOT NULL DEFAULT '0',
  `page_content_model` varbinary(32) DEFAULT NULL,      
  PRIMARY KEY (`page_id`),
  UNIQUE KEY `name_title` (`page_namespace`,`page_title`),
  KEY `page_random` (`page_random`),
  KEY `page_len` (`page_len`),
  KEY `page_redirect_namespace_len` (`page_is_redirect`,`page_namespace`,`page_len`),
  KEY `idx_page_page_is_new` (`page_is_new`),
  KEY `idx_page_page_title_is_new` (`page_title`,`page_is_new`)
) ENGINE=InnoDB AUTO_INCREMENT=44062999 DEFAULT CHARSET=utf8mb4;

还有其他建议吗?

2 个答案:

答案 0 :(得分:2)

看起来您有以下选择:

  1. 使用临时列将二进制列转换为无二进制文本列,因为二进制列不能是区分大小写的
  2. 使用转换功能作为您提及的链接
  3. 使用Lower或Upper方法
  4. 如果你真的希望列始终不区分,我会说选择1。

答案 1 :(得分:0)

在mysql中,除了表的整体排序规则外,还有每列的排序规则。您需要更改每个列的排序规则。

(我相信如果您创建新列,整体表格排序会确定默认排序规则,但请不要引用我。)