在我的C++應用程序(在使用VS2012開發的Windows x64上)我使用MySQL Connector/C++連接MySQL數據庫。我已經有一列的表ALL_USERNAMES:如何發送查詢以使用Connector/C++填充utf8 VARCHAR列?
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工作臺檢查表記錄我看到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++中找到它的對應部分。
UPDATE:
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 ('अतुल')");
如果你'選擇HEX(COL)...',你得到''爲अतुल'E0A485E0A4A4E0A581E0A4B2'? (這是utf8編碼。) –
是的,我完全一樣。 – Atul