MySQL使用与CString::CompareNoCase
不同的比较运算符进行排序,这导致了一些难以检测的错误。主要问题似乎是令牌_
。
我如何将CString与另一个CString进行比较,就像MySQL在使用ORDER BY field
时比较字符串一样?
编辑:
可能是MySQL ORDER BY BINARY field
使用与CString::operator<
完全相同的比较函数吗?我当前的方法使用SORT BY field
和CString::CompareNoCase
,如上所述,它们背后有不同的比较运算符。
答案 0 :(得分:0)
CString::CompareNoCase()
使用比较。 MySQL使用整理。
比较是严格的数字比较。语言规则仅用于进行大小写转换。 (进行大小写转换会导致某些语言出现问题。这不是一个很好的选择。)排序使用语言规则,例如忽略破折号。
MySQL似乎有自己的内置整理表,因此只有两种方法可以完全完成 MySQL的工作:
另一种方法是使用Windows内置的排序规则功能更接近MySQL行为。使用CString::Collate()
代替CString::CompareNoCase()
。
如果Windows排序规则功能无法满足您的需求,您还可以使用开源ICU库中内置的排序规则功能。