C語言連線mysql資料庫查詢中文的資料表亂碼問題
用C語言呼叫mysql的API函式查詢資料庫中文的表時候顯示亂碼:
例項參考部落格:
http://blog.csdn.net/linux_ever/article/details/50651513
原始碼:
/*************************************************************************
> File Name:mysql_test.c
> Author:
> Mail:
> Created Time: 2016年02月11日 星期四 10時45分31秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main()
{
int ret = 0;
MYSQL mysql;
MYSQL * connect = NULL;
connect = mysql_init(&mysql);
if(connect == NULL){
ret = mysql_errno(&mysql);
printf("mysql_init error, %s\n", mysql_error(&mysql));
return ret;
}
printf("mysql_init ok...\n");
//connect = mysql_real_connect(connect, NULL, "root", "yxk", "mydb61", 0, NULL, 0);
connect = mysql_real_connect(connect, "localhost", "root", "yxk", "ch11", 0, NULL, 0);
if(connect == NULL){
ret = mysql_errno(&mysql);
printf("mysql_real_connect error, err is: %s\n", mysql_error(&mysql));
return ret;
}
printf("mysql_real_connect ok...\n");
ret = mysql_query(&mysql, "set names utf8");
if(ret != 0){
printf("mysql_query error\n");
return ret;
}
const char * query = "select * from teacher";
ret = mysql_query(connect, query);
if(ret != 0){
printf("mysql_query error\n");
return ret;
}
MYSQL_RES *result = mysql_store_result(&mysql);
if(result == NULL){
printf("mysql_store_result error\n");
return -1;
}
int field_num = mysql_field_count(&mysql);
//表頭
MYSQL_FIELD * fields = mysql_fetch_fields(result);
int i = 0;
printf("-------------------------------------------------------------\n");
for(i= 0; i < field_num; i++){
printf("%s \t", fields[i].name);
}
printf("\n---------------------------------------------------------------\n");
//表內容
MYSQL_ROW row = NULL;
while(row = mysql_fetch_row(result)){
for(i= 0; i < field_num; i++){
printf("%s \t", row[i]);
}
printf("\n");
}
mysql_free_result(result);//釋放記憶體
mysql_close(connect);
printf("mysql_close...\n");
return ret;
}
執行結果:
解決辦法:
需要在查詢之前先設定查詢的屬性,設定字符集為utf8;
mysql_query(&mysql, "set names utf8");
解決之後的原始碼:
/*************************************************************************
> File Name:mysql_test.c
> Author:
> Mail:
> Created Time: 2016年02月11日 星期四 10時45分31秒
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main()
{
int ret = 0;
MYSQL mysql;
MYSQL * connect = NULL;
connect = mysql_init(&mysql);
if(connect == NULL){
ret = mysql_errno(&mysql);
printf("mysql_init error, %s\n", mysql_error(&mysql));
return ret;
}
printf("mysql_init ok...\n");
//connect = mysql_real_connect(connect, NULL, "root", "yxk", "mydb61", 0, NULL, 0);
connect = mysql_real_connect(connect, "localhost", "root", "yxk", "ch11", 0, NULL, 0);
if(connect == NULL){
ret = mysql_errno(&mysql);
printf("mysql_real_connect error, err is: %s\n", mysql_error(&mysql));
return ret;
}
printf("mysql_real_connect ok...\n");
ret = mysql_query(&mysql, "set names utf8");
if(ret != 0){
printf("mysql_query error\n");
return ret;
}
const char * query = "select * from teacher";
ret = mysql_query(connect, query);
if(ret != 0){
printf("mysql_query error\n");
return ret;
}
MYSQL_RES *result = mysql_store_result(&mysql);
if(result == NULL){
printf("mysql_store_result error\n");
return -1;
}
int field_num = mysql_field_count(&mysql);
//表頭
MYSQL_FIELD * fields = mysql_fetch_fields(result);
int i = 0;
printf("-------------------------------------------------------------\n");
for(i= 0; i < field_num; i++){
printf("%s \t", fields[i].name);
}
printf("\n---------------------------------------------------------------\n");
//表內容
MYSQL_ROW row = NULL;
while(row = mysql_fetch_row(result)){
for(i= 0; i < field_num; i++){
printf("%s \t", row[i]);
}
printf("\n");
}
mysql_free_result(result);//釋放記憶體
mysql_close(connect);
printf("mysql_close...\n");
return ret;
}
執行結果為:
相關文章
- MySql中的資料查詢語言(DQL)三:連線查詢MySql
- PHP連線、查詢MySQL資料庫PHPMySql資料庫
- R語言連線資料庫(MySQL)R語言資料庫MySql
- python查詢mysql中文亂碼問題PythonMySql
- MySQL — 資料查詢語言MySql
- mysql資料庫連表查詢的幾種方法MySql資料庫
- pdo_mysql 資料庫亂碼問題MySql資料庫
- SqlServer資料庫中文亂碼問題解決SQLServer資料庫
- 資料庫查詢語言(DQL)資料庫
- 查詢MySQL資料庫,MySQL表的大小MySql資料庫
- php基礎之連線mysql資料庫和查詢資料PHPMySql資料庫
- Linuxcentos7/ubantu下:用C語言連線MySQL資料庫LinuxCentOSC語言MySql資料庫
- mysql資料庫concat拼接字串亂碼問題MySql資料庫字串
- 3.DQL資料查詢語言(內連線,外連線,自連線)
- 關係型資料庫查詢語言 SQL 和圖資料庫查詢語言 nGQL 對比資料庫SQL
- 資料庫學習(四)連線查詢資料庫
- mysql連表查詢出現資料重複MySql
- MySql資料庫連線池專題MySql資料庫
- 用Navicat連線資料庫-資料庫連線(MySQL演示)資料庫MySql
- 千萬級資料庫使用索引查詢速度更慢的疑惑-資料回表問題資料庫索引
- SSM解決中文存入資料庫亂碼問題(記錄自己的問題)SSM資料庫
- 連線資料庫-mysql資料庫MySql
- MySQL資料庫:7、SQL常用查詢語句MySql資料庫
- 資料庫查詢語句資料庫
- CDA資料分析師 - SQL資料庫基礎 查詢&連線SQL資料庫
- mybatis查詢mysql 資料庫中 BLOB欄位,結果出現亂碼MyBatisMySql資料庫
- mysql 5.7後使用sys資料庫下的表查詢資料庫效能狀況MySql資料庫
- python資料插入連線MySQL資料庫PythonMySql資料庫
- laravel 5.8 連線資料庫庫查詢 資料 速度慢,使用mysql 直接查詢響應就快,什麼原因呢?Laravel資料庫MySql
- 【資料庫】查詢優化之子連線優化資料庫優化
- 通用資料庫/源連線管理分析查詢DBeaverEE資料庫
- go 連線資料庫 - GORM學習 - sql查詢Go資料庫ORMSQL
- [20181128]toad連線資料庫的問題.txt資料庫
- 資料庫基礎查詢--單表查詢資料庫
- 【資料庫】MySQL查詢優化資料庫MySql優化
- 如何連線MySQL資料庫MySql資料庫
- django | 連線mysql資料庫DjangoMySql資料庫
- Python連線MySQL資料庫PythonMySql資料庫
- pycharm連線MySQL資料庫PyCharmMySql資料庫