MySQLのC APIで,日本語のデータを扱う
意外と情報がなかったので,メモ.
#ifdef _WIN32 #include <windows.h> #endif #include <stdio.h> #include <mysql.h> #define QUERY_SIZE 1024 #define MYSQL_SERVER "localhost" #define MYSQL_USER "userneme" #define MYSQL_PASSWORD "password" #define MYSQL_DB "test_regist_2byte" #define MYSQL_PORT 3306 #define MYSQL_SOCKET NULL #define MYSQL_OPT 0 #define TABLE_REGIST "test_table" #define DAT_ENGLISH "hoge" #define DAT_JAPANESE "ほげ" int main(void) { MYSQL *mysql; /* 接続 */ char query[QUERY_SIZE]; /* クエリー文 */ /* MySQL初期化 */ if((mysql=mysql_init(NULL)) == NULL) { fprintf(stderr, "Initialize Error.\n"); return(-1); } /* MySQLオプションデフォルト値設定 */ mysql_options(mysql, MYSQL_OPT_COMPRESS,0); /* MySQL接続 */ if(mysql_real_connect( mysql, MYSQL_SERVER, MYSQL_USER, MYSQL_PASSWORD, MYSQL_DB, MYSQL_PORT, MYSQL_SOCKET, MYSQL_OPT) == NULL) { fprintf(stderr, "Connection Error.\n"); return(-1); } /* 登録 */ sprintf(query, "INSERT INTO %s VALUES ('%s')", TABLE_REGIST, DAT_ENGLISH); if(mysql_query(mysql, query)!=0) /* クエリー発行 */ { fprintf(stderr, "Error Query: %s\n",query); fprintf(stderr, "Error Message:%s\n",mysql_error(mysql)); return(-1); } /* 日本語を含むクエリーでの登録 */ mysql_set_character_set(mysql, "sjis"); /* 使用コードの明示設定 */ sprintf(query, "INSERT INTO %s VALUES ('%s')", TABLE_REGIST, DAT_JAPANESE); if(mysql_real_query(mysql, query, strlen(query))!=0) /* クエリー発行 */ { fprintf(stderr, "Error Query: %s\n",query); fprintf(stderr, "Error Message:%s\n",mysql_error(mysql)); return(-1); } /* MySQL切断 */ mysql_close(mysql); return(0); }
バイナリデータを扱う mysql_real_query()関数を使うと良い.