MySQL使用与CString::CompareNoCase
不同的比较运算符进行排序,这导致我遇到了一些难以检测的错误。主要问题似乎是令牌_
。
如何在使用ORDER BY field
时将CString与另一个CString进行比较,就像MySQL比较字符串一样?
编辑:
MySQL ORDER BY BINARY field
是否使用与CString::operator<
完全相同的比较函数?我目前的方法是将SORT BY field
与CString::CompareNoCase
一起使用,如后所述,它们后面具有不同的比较运算符。
最佳答案
CString::CompareNoCase()
使用比较。 MySQL使用排序规则。
比较是严格的数值比较。语言规则仅用于进行大小写转换。 (进行大小写转换会在某些语言中给您带来麻烦。这不是一个好选择。)归类使用语言规则,例如忽略破折号。
看来MySQL具有自己的内置排序表,因此只有两种方法可以完全执行MySQL的工作:
从MySQL中提取代码并在您的代码中使用(非常困难,并且可能有许可问题。)
将字符串发送到MySQL服务器,然后让服务器为您订购它们。
另一种选择是使用Windows内置的归类功能来更接近MySQL的行为。使用CString::Collate()
代替CString::CompareNoCase()
。
如果Windows排序规则功能不能满足您的需求,您也可以使用内置于开源ICU库中的排序规则功能。