window下连接mysql
网上很多VC连接mysql的例子都是要带个libmysql.dll才能正常使用的。
但有时我们并不想多带个libmysql.dll,只想单文件就能使用或者你是要
封装在一个dll文件里,这时你要就用到mysqlclient.lib这个静态库了。
示例代码如下,很很简单,就不多说了。
相关的mysql头文件及静态库:
http://download.csdn.net/source/1047386
#include <stdio.h> #include <windows.h> #include "mysql.h" //忽略LIBCMT.lib, MSVCRTD.lib这些库,不然链接时会报lnk2005错误 #pragma comment(linker,"/nodefaultlib:LIBCMT.lib") #pragma comment(linker,"/nodefaultlib:MSVCRTD.lib") /*用mysqlclient.lib,不要用libmysql.lib,要不你要多带一个libmysql.dll 静态库有两个,一个是debug版的,一个是release版的,要注意 */ #if defined _DEBUG #pragma comment(lib, "..\\mysqllib\\lib\\debug\\mysqlclient.lib") #else #pragma comment(lib, "..\\mysqllib\\lib\\opt\\mysqlclient.lib") #endif #pragma comment(lib, "wsock32.lib") //#pragma comment(lib, "Advapi32.lib") int main() { MYSQL* mysql = NULL; mysql = mysql_init(mysql); MYSQL_RES* res; MYSQL_ROW record; mysql_real_connect(mysql, "192.168.1.99", "root", "hyd409", "signallamp1", 3306, NULL, NULL); mysql_query(mysql, "select * from user"); res = mysql_store_result(mysql); while ((record = mysql_fetch_row(res))) { printf("auth=%s,password=%s,access=%s\n", record[0], record[1], record[2]); } mysql_free_result(res); mysql_close(mysql); printf("Over"); //getchar(); while (1); return 0; }
遇到的问题:
我用C++函数mysql_use_result获取mysql数据库中的数据,其编码格式为utf-8,但得到的是中文字符串都是'?'
答案
执行mysql_use_result语句之前增加一句:
char *sql="set names gbk;";
msyql_query(sql);
这样执行后将当前会话的客户端编码格式调整为中文格式。