我运行2台服务器- Maria DB v10在我的Mac和MySQL v5.6在Centos上。它们都有相同的数据库和行为是相同的,所以我的问题是不相关的操作系统或服务器版本。
数据库1中的表定义如下
CREATE TABLE `issue_head` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`nme` longblob NOT NULL,
`row_ts` bigint(20) NOT NULL,
`created_user_id` bigint(20) NOT NULL,
`assigned_user_id` bigint(20) DEFAULT NULL,
`appID` bigint(20) NOT NULL,
`severity` varchar(50) NOT NULL,
`status` varchar(50) NOT NULL,
`is_test_ind` int(11) NOT NULL DEFAULT 0,
`price_est` decimal(15,2) DEFAULT NULL,
`required_ts` bigint(20) DEFAULT NULL,
`required_notif_ts` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `id1` (`appID`,`status`,`row_ts`),
KEY `id2` (`appID`,`row_ts`),
KEY `id3` (`appID`,`assigned_user_id`,`row_ts`),
KEY `id4` (`required_ts`,`required_notif_ts`)
) ENGINE=InnoDB AUTO_INCREMENT=1204 DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci;
db2 中的表定义如下
CREATE TABLE `aftn` (
`id` bigint(20) NOT NULL,
`druh_id` bigint(20) NOT NULL,
`out_ind` bigint(20) NOT NULL,
`row_dt` datetime NOT NULL,
`chng_dt` datetime NOT NULL,
`ack_dt` datetime DEFAULT NULL,
`mess_id` char(7) DEFAULT NULL,
`subj` varchar(500) DEFAULT NULL,
`msg` longtext DEFAULT NULL,
`status_id` bigint(20) NOT NULL,
`rel_obj_id` bigint(20) DEFAULT NULL,
KEY `aftn_id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb3 COLLATE=utf8mb3_czech_ci;
因此,它们具有相同的字符集和相同的排序规则。不幸的是,从数据库1中选择的字符集是大小写敏感的,尽管排序规则是 *_ci。从 db2 中选择的字符集是大小写敏感的。使用以下示例
select * from issue_head where nme like 'test%' and appID = 23;
不返回任何内容,但如果我这样写:
select * from issue_head where nme like CONVERT('test%' USING utf8mb3) COLLATE utf8mb3_czech_ci and appID = 23;
返回所有行,不考虑大小写。
选择
select * from aftn where msg like 'gg%';
在 db2 上运行将返回所有行而不管大小写。
数据库1有什么问题,如何使其大小写不敏感?
1条答案
按热度按时间6kkfgxo01#
我可以重现这个问题。我正在用MySQL 8.0.32进行测试,这是我在笔记本电脑上安装的。
我发现了这个解决方案:
我看到你将
nme
列定义为LONGBLOB
。这是没有字符集或排序规则的二进制数据,所以如果你不指定排序规则,它就无法使用不区分大小写的排序规则。