c++ - 像 MySQL 比较一样比较 MFC CString

标签 c++ mysql mfc compare c-strings

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

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

编辑: 难道MySQLORDER BY BINARY field使用与 CString::operator< 完全相同的比较函数?我当前使用的方法SORT BY fieldCString::CompareNoCase正如所描述的,它们后面有不同的比较运算符。

最佳答案

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

比较是严格的数值比较。语言规则仅用于进行大小写转换。 (在某些语言中进行大小写转换会导致出现问题。这不是一个好的选择。)排序规则使用语言规则,例如忽略破折号。

MySQL 似乎有自己的内置排序规则表,因此只有两种方法可以完全完成 MySQL 所做的事情:

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

另一种方法是使用 Windows 内置的排序规则函数来更接近 MySQL 的行为。使用 CString::Collat​​e() 而不是 CString::CompareNoCase()

如果 Windows 排序函数不能满足您的需求,您还可以使用开源 ICU 库中内置的排序函数。

关于c++ - 像 MySQL 比较一样比较 MFC CString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117397/

相关文章:

c++ - 为什么不将 `std::initializer_list` 定义为文字类型?

c++ - 在 eclipse 上使用 opencv 3.0 时出现链接错误

c++ - 带 nfs 挂载的 QFileSystemWatcher

php - MySQL Session 变量在触发器中的作用

java - 如何在hibernate中更新父表的主键,从而自动更新子表的外键?

c++ - 具有 BS_AUTORADIOBUTTON 样式的自绘按钮

c++ - 使用 std::bitset 进行双重表示

php - 在 CodeIgniter 中列出表的一些用户

file - 如何删除被锁定的文件?

c++ - 帮助在 MFC 中使用 CWinThread