首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

C/C++ 操作 MySQL 存取中文:關鍵在 mysql_set_character_set 統一 gb2312/gbk

     編輯:MySQL 資料庫相關知識

使用 MySQL C API (libmysql) 讀寫中文,核心在於連接建立後、每次 SQL 執行前顯式調用 mysql_set_character_set(conn, "gb2312")(或 gbk),確保客戶端、連接層、結果集三層編碼一致。

完整可編譯示例(Windows + MySQL 5.0)

#include 
#include 
#include 
#include 
#pragma comment(lib, "libmysql.lib")

MYSQL *mysql;
MYSQL_RES *res;
MYSQL_ROW row;

int main() {
    mysql = mysql_init(NULL);
    mysql_real_connect(mysql, "localhost", "root", "pwd", "db", 3306, NULL, 0);
    mysql_set_character_set(mysql, "gb2312");  // 關鍵行

    // 建表指定 CHARSET=gb2312
    mysql_query(mysql, "CREATE TABLE t(s0 VARCHAR(100), s1 CHAR(6), s2 VARCHAR(4), s3 VARCHAR(3), s4 INT) ENGINE=InnoDB DEFAULT CHARSET=gb2312");

    // 插入中文
    mysql_query(mysql, "INSERT INTO t VALUES('2000-3-10 21:01:30','Test','清風寒劍','歲月情',2500)");

    // 查詢並打印
    mysql_query(mysql, "SELECT * FROM t");
    res = mysql_store_result(mysql);
    while ((row = mysql_fetch_row(res))) {
        for (int i=0; i

關鍵點總結

  1. 連接後即設定:mysql_set_character_set(mysql, "gb2312") 等同於執行 SET NAMES gb2312。
  2. 建表/建庫指定 CHARSET:DEFAULT CHARSET=gb2312,避免服務端默認 latin1 導致存入時二次轉碼錯誤。
  3. 每次查詢前重複設定:長連接或連接池場景下,建議在每個 mysql_query 前調用一次,防止會話變量被他人修改。
  4. UTF-8 陷阱:老版本 libmysql 對 utf8 支持不完善,實測 gb2312/gbk 通過、utf8 失敗;現代項目請升級驅動並統一 utf8mb4。
  5. 編譯鏈接:#pragma comment(lib,"libmysql.lib") 或 -lmysqlclient,確保頭文件與庫版本匹配。

運行結果驗證

控制台正確顯示「清風寒劍」「歲月情」,證明中文存取全鏈路暢通。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved