C語言如何查看和修改MySQL使用的字符集

        最近用C語言連接數據庫,插入數據時如果數據中存在漢字,插入會失敗。最後搞明白了是MySQL使用的字符集的問題。

        1、如何查看當前連接的數據庫使用的字符集

MySQL提供的接口函數prototype爲:

void        STDCALL mysql_get_character_set_info(MYSQL *mysql,

                           MY_CHARSET_INFO *charset);

其中 MY_CHARSET_INFO 結構體定義如下:

typedef struct character_set
{
  unsigned int      number;     /* character set number              */
  unsigned int      state;      /* character set state               */
  const char        *csname;    /* collation name                    */
  const char        *name;      /* character set name                */
  const char        *comment;   /* comment                           */
  const char        *dir;       /* character set directory           */
  unsigned int      mbminlen;   /* min. length for multibyte strings */
  unsigned int      mbmaxlen;   /* max. length for multibyte strings */
} MY_CHARSET_INFO;

調用上述函數並打印結果:

MY_CHARSET_INFO charset;

mysql_get_character_set_info(mysql, &charset);

printf("character set number:%d\n", charset.number);
printf("character set state:%d\n", charset.state);
printf("collation name:%s\n", charset.csname);
printf("character set name:%s\n", charset.name);
printf("comment:%s\n", charset.comment);
printf("character set directory:%s\n", charset.dir);
printf("min. length for multibyte strings:%d\n", charset.mbminlen);
printf("max. length for multibyte strings:%d\n", charset.mbmaxlen);

結果如下:


可以看出當前數據庫使用的字符集爲latin1。現在還不知道爲什麼插入漢字會提示出錯,雖然客戶端、連接、數據庫三個方面使用的字符集都是latin1,按理說latin1使用了字節的所有8位空間,不管什麼字節流過來都不會報錯。

2、如何修改當前連接使用的字符集

MySQL提供的接口函數prototype爲:

int          STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname);

成功返回0,失敗返回非0。

在網上查資料有人說使用"utf8",我試了一下,發現還是不行。使用“GBK”可以:

if (!mysql_set_character_set(mysql, "GBK"))
{
	printf("New connection character set: %s\n",
	mysql_character_set_name(mysql));
}

其字符集信息如下:


The End.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章