小言_互联网的博客

C++ 读写 mysql 数据库中文乱码

467人阅读  评论(0)

最近在读写mysql数据库时,碰到乱码的问题,研究一番发现vs项目下,默认编码Unicode,但我的数据库默认utf8,所以读取数据的时候中文乱码。最终通过以下方法解决:

1、写入数据库时设置编码为gbk

mysql_query(connect, "set names gbk")

2、读取数据库时设置编码为utf8

mysql_query(connect, "set names utf8")

3、读取时将utf8转为unicode


  
  1. wchar_t* Utf8_2_Unicode( char* row_i)
  2. {
  3. int len = MultiByteToWideChar(CP_UTF8, 0, row_i, strlen(row_i), NULL, 0);
  4. wchar_t *wszStr = new wchar_t[len + 1];
  5. MultiByteToWideChar(CP_UTF8, 0, row_i, strlen(row_i), wszStr, len);
  6. wszStr[len] = '\0';
  7. return wszStr;
  8. }

 

结果对比:

        

 

数据库:

code:


  
  1. #include "mysql/mysql.h"
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <tchar.h>
  5. using namespace std;
  6. wchar_t* Utf8_2_Unicode( char* row_i)
  7. {
  8. int len = MultiByteToWideChar(CP_UTF8, 0, row_i, strlen(row_i), NULL, 0);
  9. wchar_t *wszStr = new wchar_t[len + 1];
  10. MultiByteToWideChar(CP_UTF8, 0, row_i, strlen(row_i), wszStr, len);
  11. wszStr[len] = '\0';
  12. return wszStr;
  13. }
  14. int main()
  15. {
  16. //初始化MYSQL
  17. MYSQL *connect = mysql_init((MYSQL*) 0);;
  18. //连接到MYSQL
  19. connect = mysql_real_connect(connect, "localhost", "root", "123", "test", 3306, NULL, 0);
  20. if (connect == NULL)
  21. {
  22. return mysql_errno(connect);
  23. }
  24. //将编码设置为gbk
  25. if (mysql_query(connect, "set names gbk"))
  26. {
  27. return mysql_errno(connect);
  28. }
  29. //写入中文数据
  30. if (mysql_query(connect, "INSERT INTO country(序号,中文,英文) VALUES('3','美国','America')"))
  31. {
  32. return mysql_errno(connect);
  33. }
  34. //设置编码格式utf8
  35. int ret = mysql_query(connect, "set names utf8");
  36. //读取中文数据
  37. ret = mysql_query(connect, "SELECT * FROM country");
  38. if (ret)
  39. {
  40. return mysql_errno(connect);
  41. }
  42. else
  43. {
  44. //获取结果集
  45. MYSQL_RES *res = mysql_store_result(connect);
  46. MYSQL_ROW row;
  47. while (row = mysql_fetch_row(res))
  48. {
  49. //将字符由utf8专转为unicode
  50. wchar_t* m1 = Utf8_2_Unicode(row[ 2]);
  51. wchar_t* m2 = Utf8_2_Unicode(row[ 1]);
  52. MessageBox( NULL, m1, m2, NULL);
  53. }
  54. mysql_free_result(res);
  55. }
  56. mysql_close(connect);
  57. getchar();
  58. return 0;
  59. }

 


转载:https://blog.csdn.net/lihaidong1991/article/details/104523599
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场