我的表格包含字符集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中的连接”是什么?)我怎样才能使用区分大小写的排序规则?我需要它,否则似乎无法检查大写字母。
答案 0 :(得分:3)
你可能会发现这很有趣。
Differences between utf8 and latin1
我不能说我是这方面的专家,但就我所知,UTF8和Latin1对字符的编码方式不同。因此,尝试使用Latin1整理UTF8是没有意义的。
http://dev.mysql.com/doc/refman/5.0/en/charset-applications.html
鉴于:
CREATE DATABASE mydb
DEFAULT CHARACTER SET utf8
DEFAULT COLLATE utf8_general_ci;
是一致的。
抱歉,我刚刚重新阅读了您的问题而您说该表正在使用latin1。奇。你尝试过使用utf8校对吗?
答案 1 :(得分:0)
我认为问题出在其他地方。 RLIKE
是regexp函数COLLATE …
,此处无效。
看看 - >
#1 - false
SELECT 'koníček' = 'konicek' COLLATE utf8_czech_ci;
#2 - false
SELECT 'koníček' LIKE 'konicek' COLLATE utf8_czech_ci;
#3 - false
SELECT 'koníček' RLIKE 'konicek' COLLATE utf8_czech_ci;
#4 - true
SELECT 'koníček' = 'konicek' COLLATE utf8_general_ci;
#5 - true
SELECT 'koníček' LIKE 'konicek' COLLATE utf8_general_ci;
#6 - false
SELECT 'koníček' RLIKE 'konicek' COLLATE utf8_general_ci;