gbk/gb2312
採用雙字節字符集,不論中、英文字符均使用雙字符來表示,爲了區分中文,將其最高位都設定成1
gb2312是gbk的子集,gbk是gb18030的子集,gb2312僅能存儲簡體中文字符
gbk包括中日韓字符的大字符集
一般使用gbk字符集足夠
國際通用性比utf8差,不過utf8佔用的數據庫比gbk大(utf8是三字節字符集)
UTF全稱(Unicode Transformation Format),是Unicode的一種存儲方式,可變長度字符編碼,又稱萬國碼 數據庫字符集儘可能使用utf8(包括 connect、result、及最終html頁面都必需要求一致爲utf8) UTF8使用可變長度字節來存儲 Unicode字符,例如 ASCII字母繼續使用1個字節存儲,重音文字、希臘字母、或西裏爾字母等使用2個字節來存儲,而經常使用的漢字就要用3個字節;也就是一個英文字符等於一個字節,一箇中文(含繁體)等於三個字節。 utf8mb4一個字符最多能存4字節,因此能支持更多的字符集;項目中經常使用utf8mb4存放emoji表情 latin1 是8bit (1 bytes)字符集,但不能覆蓋亞洲、非洲語言 unidoce是latin1的擴展,增長了亞洲、非洲常規語言支持,但仍不支持所有語言,且ASCII用unidoce來表示效率不高(小字符集轉換成大字符集,每每便隨的就是字符的丟失) utf8是unicode的擴展 gbk、gb2312等字符集與utf8之間都必須經過Unicode編碼才能相互轉換
char(N):N表明的是字符個數(也叫字符長度)、而非bytes char(N):是固定長存儲,佔用定長的存儲空間,不足的部分用空格填充;MySQL處理char(N)類型時,須要將空格strip掉後return。 存儲空間:char(N)類型的存儲空間和字符集有關係,結合剛纔字符集的知識點,一箇中文在utf8字符集中佔用3個bytes、gbk佔用2個bytes、數字和字符統一用一個字符表示。 存儲機制:在不夠N長度時,MySQL在存儲數據時,須要用填充特殊的空格,而非十六進制的20 思考: char(30),在不一樣的字符集中最多能存放多少個字母、漢字,以及佔用空間狀況 gbk: 能夠存放30個字節 佔用的空間30*2 utf8:能夠存放30個字節 佔用的空間30*3
varchar(N):N表明的是字符個數(也叫字符長度)、而非bytes
varchar(N):是變長存儲,僅使用必要的存儲空間.
存儲空間:varchar(N)類型的存儲空間和字符集有關係,結合剛纔字符集的知識點,一箇中文在utf8字符集中佔用3個bytes、gbk統一佔用2個bytes、數字和字符一個字符表示。
存儲機制:varchar(N)字段存儲實際是從第二個字節開始存儲,而後用1到2個字節表示實際長度,剩下的纔是能夠存儲數據的範圍,所以最大可用存儲範圍是65535-3=65532字節;第一個字節標識是否爲空.(長度小於255字節,使用一個字節來表示長度;大於255字節使用兩個字節來表示長度)
臨時生效html
mysql> set character_set = 'gbk'; mysql> set character_set_client = 'gbk';
mysql> set global character_set_client = 'gbk'; Query OK, 0 rows affected (0.00 sec)
vim /etc/my.cnf
character-set-server=utf8