我有一个使用字符集latin1
的表(通过show variables like "character_set_database";
检查),默认排序规则为latin1_swedish_ci
(通过SHOW TABLE STATUS;
检查)。
我想要使用编译在我的系统上的排序规则latin1_general_cs
运行查询(通过Show collation LIKE "%_cs";
检查):
select * from myTab WHERE col RLIKE '[[:upper:]]' COLLATE 'latin1_general_cs' LIMIT 10;
这会产生一个错误:
ERROR 1253 (42000): COLLATION 'latin1_general_cs' is not valid for CHARACTER SET 'utf8'
即使使用默认排序规则也无法工作:
select * from myTab WHERE col RLIKE '[[:upper:]]' COLLATE 'latin1_swedish_ci' LIMIT 10;
错误:
ERROR 1253 (42000): COLLATION 'latin1_swedish_ci' is not valid for CHARACTER SET 'utf8'
出了什么问题?是因为我的终端发送的数据是UTF-8编码吗?(连接使用的是“UTF-8”吗?)我怎样才能使用大小写敏感排序呢?我需要它,否则似乎无法检查大写字母。
utf8_general_cs
没有被安装或编译。我不知道如何安装它。但在安装之前,最好先了解为什么它不能工作。也许有一种方法可以转换我的数据,或者在启动mySQL时使用另一种字符集。现在我正在尝试将表本身转换为latin1_general_cs
排序规则,使用alter table myTab convert to character set latin1 collate latin1_general_cs;
。这可能需要一些时间,因为所有索引都必须被重写。 - R_UserSELECT * FROM myTab WHERE col RLIKE CONVERT(_utf8'[[:upper:]]' USING 'latin1') COLLATE 'latin1_general_cs' LIMIT 10;
是有效的。可能是因为与MySQL的连接是UTF8。但似乎没有人知道...我也使用R连接到MySQL - 我不知道连接使用哪种字符集。我一直以为MySQL会自动处理并转换。 - R_User