Linux下 C語言 Mysql操作和字元集設定,linuxmysql
一、C語言 Mysql操作二、建立資料庫和表
mysql> use TemWetDatabase changedmysql> create table monitor -> ( -> Id int not null, -> monitor_name varchar(50), -> monitor_com varchar(50), -> primary key(Id) -> );Query OK, 0 rows affected (0.10 sec)
三、編寫c程式測試
c串連操作資料庫程式碼範例:
#include <mysql/mysql.h>#include <stdio.h>#include <stdlib.h>#include <string.h>static char* server_groups[]={"embedded","server","this_program_server",(char*)NULL};int main(){ MYSQL mysql; MYSQL_RES *res; MYSQL_ROW row; char sqlcmd[200]; int t,r; mysql_init(&mysql);//初始化MYSQL標識符,用於串連 if(!mysql_real_connect(&mysql,"localhost","root","root","sensers",0,NULL,0)){ fprintf(stderr,"無法串連到資料庫,錯誤原因是:%s/n",mysql_error(&mysql)); } else { puts("資料庫連接成功"); //首先向資料庫中插入一條記錄 //sprintf(sqlcmd,"%s","insert into friends (name,telephone) Values ('xx','xx')"); //mysql_query(&mysql,sqlcmd); sprintf(sqlcmd,"%s","set names utf8;"); t=mysql_real_query(&mysql,sqlcmd,(unsigned int)strlen(sqlcmd)); sprintf(sqlcmd,"%s","select * from senser;"); t=mysql_real_query(&mysql,sqlcmd,(unsigned int)strlen(sqlcmd)); if(t){ printf("查詢資料庫失敗%s/n",mysql_error(&mysql)); } else { res=mysql_store_result(&mysql);//返回查詢的全部結果集 while(row=mysql_fetch_row(res)){//mysql_fetch_row取結果集的下一行 for(t=0;t<mysql_num_fields(res);t++){//結果集的列的數量 printf("%s\t",row[t]); } printf("\n"); int wet = atoi(row[2]); printf("%d\n",wet); } mysql_free_result(res);//操作完畢,查詢結果集 } mysql_close(&mysql);//關閉資料庫連接 }mysql_library_end();//關閉MySQL庫return EXIT_SUCCESS;}
編譯c檔案:
# gcc sqltest.c -o sqltest -lmysqlclient
編譯成功,執行成功.
四、字元集設定
插入一條帶中文的資料,但是卻出現了中文亂碼的問題。這應該是資料庫的字元編碼問題了。
解決方案:
修改MySQL的設定檔/etc/mysql/my.cnf
儲存,並重新啟動mysql服務。
查看資料庫的字元集:mysql> show variables like 'character_set_%';
刪除之前的資料庫資料表,重建立立,並插入資料,完美支援中文。