获取并设置从c++到MySQL到c++的wchar_t字符
Get and set wchar_t chars from c++ to MySQL to c++
我有一个数据库(Mysql)与一些UTF-8字段(我可以改变,如果需要的话)。
我使用的是旧的MySQL 'Communicator'或它的前身,我写了大约3年前的代码,今天我所知道的就是我链接了libmysql。Lib和#include "mysql.h"(如果你想让我挖掘更多)。
问题是我不知道如何插入和读取非ascii。
我知道MultiByteToWideChar,但一些代码在Linux (gcc)下编译,所以我猜这不会工作。
当代码应该在Linux和Windows上运行时,从/到MySQL数据库获取和设置std::wstrings(或wchar_t*)的标准过程是什么?
使用mysql_set_character_set()
API将连接字符集更改为"utf8"。将您的wstring转换为UTF-8(没有库函数,但您可以相当容易地编写它,或使用iconv
),并将UTF-8指针传递给MySQL。
这个API在旧版本的MySQL c++ API(>5.0.7)中不存在,所以先检查你的头文件
注意:在Win32与Visual Studio, wchar_t数据类型是short
,而不是int
。您可以将连接字符集更改为"ucs2"并直接传递wchar_t指针,只需将它们转换为char*。
我建议您在MySQL中以UTF-8的形式存储数据,而不是试图说服它采用windows原生的UTF-16。如果您的文本主要是西方的,那么UTF-8编码将更加紧凑,并且它将更有可能与MySQL的c和unix特性一起工作。
在MySQL中有一些Visual c++特定的示例来展示如何做到这一点。例如,参见CExampleDlg::ToUTF8()
和examples/vstudio/mfc/mfc_dlg.cpp
中调用它的函数。
MySQL++用户手册中有一章给出了这一切背后的原因和原因。
- MacOS通过在莫哈韦"wchar.h"下破碎的自制啤酒发出叮当声
- VS Code C++:不准确的系统包括路径错误(wchar.h,boost/lambda/lambda.hpp)
- 'const char*'和'WCHAR*'
- 为什么需要与 WCHAR 相关的代码处理
- 无法使用 mingw-w64 g++ 编译:找不到 <wchar.h>
- 无法将参数 1 从 WCHAR 转换为常量字符 *
- 无法使用 swprintf 在 WCHAR* 中打印字符*
- -fshort-wchar 和 std::wstring - 分段错误
- 我应该使用 wchar 还是 char 来加密?
- 【MacOSX 10.15.1】使用 odb 生成数据库,致命错误:wchar.h:没有这样的文件或目录 #include < wchar.h>
- 如何在 C++ 中的 wcstok 中使用常量 WCHAR* 变量?
- 将字符串文本常量定义为 char const* 和 wchar const*
- 比较嵌套 for 循环中的两个 wchar 数组?
- wchar 模式下 pugixml 的链接错误
- strcmp 错误'WCHAR [260]' 'const char *'
- 'Cannot add two pointers'添加带有 WCHAR 的 LPCWSTR
- 如何将CString转换为使用WCHAR的Windows API和自定义函数?
- 从网络数据包复制一串 wchar 时访问冲突
- 如何使用 Win32 WCHAR 执行字符串操作
- VC++ 2017 如何将常量wchar_t转换为 WCHAR *.