在我的 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/