一、環境準備
# 安裝開發庫
$ sudo apt-get install libmysql++-dev
# 複製庫文件到系統路徑(視發行版而定)
$ sudo cp -r /usr/lib/mysql/* /usr/lib/
# 查看編譯鏈接參數
$ mysql_config --cflags --libs
二、建庫建表示例
mysql> CREATE DATABASE TemWet;
mysql> USE TemWet;
mysql> CREATE TABLE monitor (
Id INT NOT NULL,
monitor_name VARCHAR(50),
monitor_com VARCHAR(50),
PRIMARY KEY (Id)
);
三、C 程式完整範例
#include
#include
#include
#include
int main() {
MYSQL mysql;
MYSQL_RES *res;
MYSQL_ROW row;
char sqlcmd[200];
int t, r;
mysql_init(&mysql);
if (!mysql_real_connect(&mysql, "localhost", "root", "root", "sensers", 0, NULL, 0)) {
fprintf(stderr, "連接失敗: %s\n", mysql_error(&mysql));
return EXIT_FAILURE;
}
puts("資料庫連接成功");
// 設置字符集,解決中文亂碼
sprintf(sqlcmd, "SET NAMES utf8");
mysql_real_query(&mysql, sqlcmd, strlen(sqlcmd));
sprintf(sqlcmd, "SELECT * FROM senser");
t = mysql_real_query(&mysql, sqlcmd, strlen(sqlcmd));
if (t) {
printf("查詢失敗: %s\n", mysql_error(&mysql));
} else {
res = mysql_store_result(&mysql);
while ((row = mysql_fetch_row(res))) {
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();
return EXIT_SUCCESS;
}
四、編譯與執行
$ gcc sqltest.c -o sqltest -lmysqlclient
$ ./sqltest
五、字符集配置徹底解決中文亂碼
- 編輯
/etc/mysql/my.cnf,在 [mysqld]、[client]、[mysql] 區塊添加:
character-set-server = utf8
collation-server = utf8_general_ci
default-character-set = utf8
- 重啟 MySQL:
sudo service mysql restart。
- 驗證:
SHOW VARIABLES LIKE 'character_set_%'; 全部應為 utf8。
- 重建庫表並插入中文測試,亂碼問題解決。
關鍵點提示
- 程式中連接成功後立即執行
SET NAMES utf8,確保通訊字符集一致。
- 配置文件修改需重啟服務生效。
- 若仍有亂碼,檢查終端編碼、源文件編碼(建議 UTF-8 無 BOM)。