mysql查询返回两个结果而不是一个

时间:2013-11-11 12:18:50

标签: mysql sql

我注意到了这一点,因为对于某些词语,它返回了错误的词源。所以我注意到查询返回了许多结果而不是一个结果。该表有大约60000个条目。

所以这是我的mysql查询:

conMySQL.ConnectionString = "Provider=MSDASQL; DRIVER={MySQL ODBC 3.51 Driver};SERVER=" & MYSQLserverIP & ";Port=" & MYSQLserverPort & ";DATABASE=" & MYSQLserverDB & ";UID=" & MYSQLserverUser & ";PASSWORD=" & MYSQLserverPass & ";OPTION=3;Connect Timeout=1;"
conMySQL.Open
If conMySQL.State = 1 Then
    recMySQL.Open "SELECT * FROM tEtymology WHERE sLemma='" & sLemma & "'", conMySQL, adOpenStatic, adLockReadOnly
    If Not (recMySQL.EOF And recMySQL.BOF) Then
        recMySQL.MoveFirst
        strReturn = sLemma & "<br>" & recMySQL.Fields("id").Value & "#" & recMySQL.Fields("sLemma").Value & "#" & recMySQL.Fields("sEtymology").Value
        recMySQL.MoveNext
        strReturn = strReturn & "<br>" & recMySQL.Fields("id").Value & "#" & recMySQL.Fields("sLemma").Value & "#" & recMySQL.Fields("sEtymology").Value
    End If
End If

例如,对于引理“μπότα”,结果是:

μπότα
34288#μπότα#[<μσν. μπότα < γαλλ. botte]
38505#οπότε#[<αρχ. ὁπόταν, με επίδραση του ὅτε]

对于许多单词而言,这不仅适用于您在此处看到的单词。我尝试删除sLemma字段中的索引(认为索引条目是一个散列值,并且由于碰撞它变得相同),但没有变化。我也尝试更改sLemma列的排序规则,但没有任何改变。

所以我从中理解的是,对于mysqlμπότα=μπότα和μπότα=οπότε这没有任何意义。 sLemma列中只有一个条目“μπότα”。

有什么想法吗?

编辑:这是条目在phpmyadmin中的显示方式

enter image description here

您可能认为它是相同的条目(带有此处提到的ID的红色条目),但如果您缩放图像,您将看到它们是不同的字母(第一个和最后一个字母)。

1 个答案:

答案 0 :(得分:0)

从评论和测试中,几乎可以肯定是一个字符编码问题。不确定您目前使用的是哪个字符集,但您可以尝试类似“希腊语”(ISO 8859-7希腊语)的内容 - 其他可能性:http://dev.mysql.com/doc/refman/5.1/en/charset-charsets.html

此处每个字符集的一些字符图表:http://collation-charts.org/mysql60/

如果更改db上的字符集无法解决问题,还有一些注意事项需要注意设置连接使用的字符集(而不仅仅是实际服务器)。希望有所帮助!

修改

显然你可以使用命令

show variables like 'char%';

查看所有当前的字符集编码。我在这个博客上看到的主题并不完全相同,但非常有趣:https://www.bluebox.net/insight/blog-article/getting-out-of-mysql-character-set-hell