如何更改排序规则以使 mysql 不区分大小写
How to change the collation to make mysql case insensitive
我发现当我查询其中一个表时它区分大小写,因此我尝试更改排序规则(我在 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;
还有其他建议吗?
在 mysql 中,除了 table 的整体排序规则之外,每一列都有一个排序规则。您需要更改每一列的排序规则。
(我相信总体 table 排序规则决定了创建新列时的默认排序规则,但不要引用我的话。)
看起来您有以下选择:
- 将二进制列转换为 none 二进制文本列,使用临时列,因为二进制列不能区分大小写
- 像您提到的link那样使用转换函数
- 使用 Lower 或 Upper 方法
如果您真的希望该列始终不区分大小写,我建议您选择选项 1。
我发现当我查询其中一个表时它区分大小写,因此我尝试更改排序规则(我在 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;
还有其他建议吗?
在 mysql 中,除了 table 的整体排序规则之外,每一列都有一个排序规则。您需要更改每一列的排序规则。
(我相信总体 table 排序规则决定了创建新列时的默认排序规则,但不要引用我的话。)
看起来您有以下选择:
- 将二进制列转换为 none 二进制文本列,使用临时列,因为二进制列不能区分大小写
- 像您提到的link那样使用转换函数
- 使用 Lower 或 Upper 方法
如果您真的希望该列始终不区分大小写,我建议您选择选项 1。