MySQL使用与CString::CompareNoCase不同的比较运算符进行排序,这导致我遇到了一些难以检测的错误。主要问题似乎是令牌_

如何在使用ORDER BY field时将CString与另一个CString进行比较,就像MySQL比较字符串一样?

编辑:
MySQL ORDER BY BINARY field是否使用与CString::operator<完全相同的比较函数?我目前的方法是将SORT BY fieldCString::CompareNoCase一起使用,如后所述,它们后面具有不同的比较运算符。

最佳答案

CString::CompareNoCase()使用比较。 MySQL使用排序规则。

比较是严格的数值比较。语言规则仅用于进行大小写转换。 (进行大小写转换会在某些语言中给您带来麻烦。这不是一个好选择。)归类使用语言规则,例如忽略破折号。

看来MySQL具有自己的内置排序表,因此只有两种方法可以完全执行MySQL的工作:


从MySQL中提取代码并在您的代码中使用(非常困难,并且可能有许可问题。)
将字符串发送到MySQL服务器,然后让服务器为您订购它们。


另一种选择是使用Windows内置的归类功能来更接近MySQL的行为。使用CString::Collate()代替CString::CompareNoCase()

如果Windows排序规则功能不能满足您的需求,您也可以使用内置于开源ICU库中的排序规则功能。

10-07 13:37
查看更多