MySQL的字符集支持(Character Set Support)有兩個方面:
字符集(Character set)和排序方式(Collation)。
MySQL對於字符集的支持細化到四個層次: 服務器(server),數據庫(database),數據表(table)和連接(connection)。
MySQL對於字符集的指定可以細化到一個數據庫,一張表,一列,應該用什麼字符集。
2.1.查看字符集的設置
mysql> show variables like 'character_set_%';
2.2.查看字符集排序設置
mysql> show variables like 'collation_%';
3.1修改服務器級別字符集
a.臨時修改
mysql>SET GLOBAL character_set_server=utf8;
b.永久修改
打開/etc/mysql/my.cnf,在[mysqld]後添加character-set-server=utf8
a. 臨時更改
mysql>SET GLOBAL character_set_database=utf8;
b. 永久更改
改了服務器級就可以了
3.3修改表級
mysql>ALTER TABLE table_name DEFAULT CHARSET utf8; 更改了後永久生效
3.4修改列級修改示例
mysql>ALTER TABLE `products` CHANGE `products_model` VARCHAR( 20 ) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL; 更改了後永久生效
3.5更改連接字符集
a. 臨時更改:mysql> SET GLOBAL character_set_client;
b. 永久更改:打開/etc/mysql/my.cnf,在[client]後添加default-character-set=utf8
最後搞明白了是MySQL使用的字符集的問題。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);MySQL提供的接口函數prototype為:int STDCALL mysql_set_character_set(MYSQL *mysql, const char *csname);成功返回0,失敗返回非0。
你看看我的圖片回答吧,提交回答時百度不讓我回答。