什麼是字符集、字符序?簡單的來講: 字符集(character set):定義了字符以及字符的編碼。 字符序(collation):定義了字符的比較規則。 舉個例子: 有四個字符:A、B、a、b,這四個字符的編碼分別是A = 0, B = 1, a = 2, b = 3。這裏的字符 + 編碼就構成了字符集(character set)。 若是咱們想比較兩個字符的大小呢?好比A、B,或者a、b,最直觀的比較方式是採用它們的編碼,好比由於0 < 1,因此 A < B。 另外,對於A、a,雖然它們編碼不一樣,但咱們以爲大小寫字符應該是相等的,也就是說 A == a。 這上面定義了兩條比較規則,這些比較規則的集合就是collation。 一樣是大寫字符、小寫字符,則比較他們的編碼大小; 若是兩個字符爲大小寫關係,則它們相等。
服務器端字符集:控制的是,存到mysql中時,字符集控制 客戶端字符集: 控制的是用戶的輸入及顯示 系統字符集: 控制的是系統相關的顯示,和一些依賴於操做系統的應用
在生產中咱們必須保證操做系統、MySQL客戶端實例、MySQL服務器端的字符集保持一致mysql
source /etc/sysconfig/i18n [root@db02 logs]# echo $LANG zh_CN.UTF-8
cmake . -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \
方法2: 在配置文件中設置sql
[mysqld] character-set-server=utf8
mysql> set names utf8; Query OK, 0 rows affected (0.00 sec)
[client] default-character-set=utf8
CREATE DATABASE `oldboy` /*!40100 DEFAULT CHARACTER SET utf8 */ create database oldboy DEFAULT CHARACTER SET UTF8 DEFAULT COLLATE = utf8_general_ci;
建立表數據庫
CREATE TABLE `test` ( `id` int(4) NOT NULL AUTO_INCREMENT, `name` char(20) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8
help create database; show character set;
alter database oldboy CHARACTER SET utf8 collate utf8_general_ci; alter table t1 CHARACTER SET latin1;