kmzwのブログ

コミック や ガジェット の話題が中心の日記です。

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()関数を使うと良い.