mysql在使用“like”时返回错误的结果

mysql在使用“like”时返回错误的结果,mysql,utf-8,Mysql,Utf 8,是的,正如标题所说,你会想到utf8集合名的问题。。也许这是真的 我有一个疑问: select distinct ort from veranstaltungsorte where ort like 'ka%'; 虽然它是从ka开始的,但结果我得到了Köln。加上3个正确的城市 当我使用 select distinct ort from veranstaltungsorte where ort like 'kö%'; 一切正常;只是我的db认为Köln也是从ka开始的 我试过角色集等等,但都

是的,正如标题所说,你会想到utf8集合名的问题。。也许这是真的

我有一个疑问:

select distinct ort from veranstaltungsorte where ort like 'ka%';
虽然它是从ka开始的,但结果我得到了Köln。加上3个正确的城市

当我使用

select distinct ort from veranstaltungsorte where ort like 'kö%';
一切正常;只是我的db认为Köln也是从ka开始的

我试过角色集等等,但都不管用。。有什么想法吗?

utf8\u general\u ci将用O进行排序

也许这就是你想要的

更多关于这个


否则。当你想搜索像ÄËÖ这样的特定字符时,你可以将它设置为utf8_swedish_ci,它将与ö

一起工作,它不是utf8_general_ci,我以前已经尝试过了。。而是这个:

ALTER TABLE tablename
CHANGE ort ort VARCHAR( 255 ) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL
重要提示:like现在将区分大小写。。所以我把第一个字母大写,我就完成了。
尽管如此,还是感谢您的帮助。

看起来您实际存储在ort列中的数据编码不正确:Köln实际上存储为KÃln。这就解释了为什么在寻找ka时会得到匹配:就目前的排序规则而言,KÃ=ka

你以前没有注意到这一点,这意味着你实际上有两个问题:

现在数据库中的数据已损坏。您可以使用任何数据库工具对此进行检查。 您正在使用不正确的编码连接到数据库:您正在发送UTF-8编码的字符串,而连接设置为latin1或类似的内容。 事实上,在您读写时都会发生相同的字符损坏,这意味着您在使用应用程序时可能不会注意到任何问题。

a请发布Descripte VeranstaltungSorter的结果;为了让我们了解一下您的表是如何设置的,请确保您也使用utf8或您正在使用的任何字符集查询表。