MySQL 使用与 CString::CompareNoCase
不同的比较运算符进行排序这导致我发现了一些难以检测的错误。主要问题似乎是 token _
.
如何将一个 CString 与另一个 CString 进行比较,就像 MySQL 在使用 ORDER BY field
时比较字符串一样?
编辑:
难道MySQLORDER 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 库中内置的排序函数。
关于c++ - 像 MySQL 比较一样比较 MFC CString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117397/