我只是想知道 - 如何以不会使保存在 utf8_unicode_ci 中的数据变形的方式将MySQL 结果以字符串(或其他类似的“字符串”数据类型)的形式转换为 C++。
在 C++ 过程之后,应用程序应该将结果写回(到另一个表)到数据库中,其中参数也在 utf8_unicode_ci 中编码。
我在某处读到Unicode 联盟不推荐使用宽字符,但我的问题仍然是 mysql_query() 的第二个参数是不够宽的字符串。
我已经尝试了一些“utf8 字符串”解决方案,但没有成功。我还尝试将数据保存在公共字符串中,然后以相同的方式(逐字节)将其写入数据库,但它根本无法正常工作......(请参阅下面的代码)
数据库:
save_text: text = ?š??žýáíé
处理后:save_newtext: text = ?š??žýáíé
#include <iostream>
#include <mysql.h>
#include <string>
#define ... // server conection
using namespace std;
MYSQL *connection, mysql;
MYSQL_RES *result;
MYSQL_ROW row;
int query_state;
int main(int argc, char** argv)
{
mysql_init(&mysql);
mysql_real_connect(&mysql,CTH_SERVER,CTH_USER,CTH_PASSWORD,CTH_DB_IN,0,0,0));
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8");
mysql_query(connection, "SELECT text FROM save_text WHERE id = 23");
result = mysql_store_result(connection);
if ((row = mysql_fetch_row(result)) != NULL) {
string sql;
sql = "INSERT INTO save_newtext (text) VALUES ('";
sql += row[0];
sql += "')";
mysql_query(connection, sql.c_str());
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
提前致谢!!
来自MySQL 参考
mysql_options() 应该在 mysql_init() 之后和 mysql_connect() 或 mysql_real_connect() 之前调用。
所以你的代码应该是
mysql_init(&mysql);
mysql_options(&mysql, MYSQL_SET_CHARSET_NAME, "utf8");
mysql_options(&mysql, MYSQL_INIT_COMMAND, "SET NAMES utf8");
mysql_real_connect(&mysql,CTH_SERVER,CTH_USER,CTH_PASSWORD,CTH_DB_IN,0,0,0));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5494 次 |
| 最近记录: |