获取并设置从c++到MySQL到c++的wchar_t字符

Get and set wchar_t chars from c++ to MySQL to c++

本文关键字:c++ wchar 字符 MySQL 获取 设置      更新时间:2023-10-16

我有一个数据库(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++用户手册中有一章给出了这一切背后的原因和原因。