c++ - 如何发送查询以使用 Connector/C++ 填充 utf8 VARCHAR 列?

标签 c++ mysql utf-8 mysql-connector

在我的 C++ 应用程序(在使用 VS2012 开发的 Windows x64 上)中,我使用 MySQL Connector/C++ 连接 MySQL 数据库。我的表 ALL_USERNAMES 有一列:

USERNAME VARCHAR(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci

但是,我不确定如何通过我的 C++ 应用程序触发 utf8 查询。方法 sql::Statement::executeUpdate 接受 sql::SQLString 类型。它本质上是 std::string

所以如果我这样做:

std::string strQuery = "INSERT INTO ALL_USERNAMES (USERNAME) VALUES ('अतुल')"
executeUpdate(strQuery);

当我通过 MySQL Workbench 检查表记录时,我看到 USERNAME 都是问号 (???????)。

我在 Connector/C++ 文档中找不到任何相关信息。知道如何解决这个问题吗?

我想尝试的:

在 MySQL C API 中有如下函数:

mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8"); 
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8"); 

我想尝试一下,因为我怀疑它会解决我的问题。 但是我在 Connector/C++ 中找不到它的对应项。

更新:

SHOW CREATE TABLE 给我这个:

'ALL_USERNAMES', 'CREATE TABLE `all_usernames` (\n  `USERNAME` varchar(32) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL\n) ENGINE=InnoDB DEFAULT CHARSET=utf8'

我的客户端代码在这里(这是在我写自己的答案之前):

sql::Connection *m_pConnection = NULL;
sql::Statement *m_pStatement = NULL;
sql::Driver *driver = NULL;

driver = get_driver_instance();
m_pConnection = driver->connect("tcp://127.0.0.1:3306", "username", "password");
m_pConnection->setSchema("DBNAME");
m_pStatement = m_pConnection->createStatement();
int RetVal = m_pStatement->executeUpdate("INSERT INTO ALL_USERNAMES (USERNAME) VALUES ('अतुल')");

最佳答案

  • 不要使用已弃用的mysql_* 接口(interface);使用 mysqli_*PDO

  • 使用 mysqli_set_charset('utf8');,而不是指示的命令。

  • 出现问号是因为:

    • 客户具有有效的品格(良好),并且
    • SET NAMES 同意客户端的编码(好),但是
    • 目标列的 CHARACTER SET 不包含预期的字符。所以……
  • USERNAME 声明为 CHARACTER SET ut8。 (如果您已经这样做,请提供 SHOW CREATE TABLE。)

关于c++ - 如何发送查询以使用 Connector/C++ 填充 utf8 VARCHAR 列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31217497/

相关文章:

c++ - 在不声明变量的情况下存储 "variables"

c++ - 我的 LinkedList 类有什么问题?

c++ - 如何在 STL 容器中使用 'push_back' 大尺寸对象?

mysql - 更改 my.ini 后 root 密码不起作用

php - mysql utf8字符问题

c++ - 从不同语言环境中的字符串解析 float

mysql - Web服务器和api服务器-配置和代码上传

mysql - 当行不是通过 ORM 创建时,Django 根据外键删除行的速度很慢

java - JFrame 标题中的字符错误

php - 如何区分可读的 UTF-8 字符串和二进制乱码?