MySQL使用与CString::CompareNoCase
不同的比较运算符进行排序,这导致我遇到了一些难以检测的错误。主要问题似乎是令牌_
。
如何将CString与另一个CString进行比较,就像MySQL在使用ORDER BY field
时比较字符串一样?
编辑: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库中内置的排序规则函数。