如何查询MySQL的精确长度和精确UTF-8字符

如何查询MySQL的精确长度和精确UTF-8字符,mysql,utf-8,Mysql,Utf 8,我有我的语言(拉脱维亚语)的词汇词典 创建表格单词( 值varchar(255)COLLATE utf8\U unicode\U ci默认值NULL )ENGINE=MyISAM默认字符集=utf8 COLLATE=utf8\U unicode\U ci 假设里面有三个字: 插入单词(值)值('tēja') 插入(价值)值(“vējš”) 插入(价值)值(“feja”) 我想做的是,我想找到所有长度正好为4个字符的单词,其中第二个字符是“ē”,第三个字符是“j” 对我来说,正确的查询应该是: 从

我有我的语言(拉脱维亚语)的词汇词典

创建表格单词(
值varchar(255)COLLATE utf8\U unicode\U ci默认值NULL
)ENGINE=MyISAM默认字符集=utf8 COLLATE=utf8\U unicode\U ci

假设里面有三个字:
插入单词(值)值('tēja')
插入(价值)值(“vējš”)
插入(价值)值(“feja”)

我想做的是,我想找到所有长度正好为4个字符的单词,其中第二个字符是“ē”,第三个字符是“j”

对我来说,正确的查询应该是:
从值为“275; j_275;”的单词中选择*
但这个查询的问题是它返回的不是两个条目(“tēja”和“vējš”),而是所有三个条目。 据我所知,这是因为MySQL在内部将字符串转换为某种ASCII表示形式

然后,像

从二进制'275; j_275;'等值所在的单词中选择*
但这也不会返回两个条目(“tēja”,“vējš”),而只返回一个条目(“tēja”)。我相信这与非ASCII字符的UTF-8 2字节有关

所以问题:
什么样的MySQL查询会返回我的确切两个词('tēja','vējš')


提前感谢您

您必须使用适当的排序。
拉脱维亚人不知道,但这里有一个德国人的例子:
给你一个主意

你可以尝尝这个

什么样的MySQL查询会返回我的确切两个词('tēja','vējš')

utf8\u bin
排序规则不仅区分重音,而且区分大小写。如果您只想匹配带变音符号的字母,而不关心大小写,则必须使用
utf\u…\u ci
排序规则,该排序规则不会将
e
ē
视为同一个字母

我不能立即看到一个(有很多根本不整理
ē
,如果您只需要在非变音字母上进行区分大小写的匹配就可以了)。有趣的是,它将宏字母视为普通字母,这是您不想要的(它知道
s
不同于
s


无论如何,无论最终使用何种排序规则,您都希望将表放在该排序规则中,而不是在查询中手动指定它,以便对比较进行正确索引。

谢谢,我完全按照您所说的做了-将表更改为:字符集utf8 COLLATE utf8\U bin。我还希望使用一些西里尔符号,所以我会坚持使用UTF-8
SELECT * FROM words WHERE value LIKE '_ēj_' COLLATE utf8_bin;