字符集編碼
字符集是一套符號和編碼。mysql景鼠、database、table痹扇、column都可以設(shè)置編碼铛漓。
--查看所有字符集編碼項命令
show variables like 'character_set_%';
選項名 | 備注 |
---|---|
character_set_client | 客戶端向服務(wù)器發(fā)送數(shù)據(jù)時使用的編碼 |
character_set_results | 服務(wù)器端返回給客戶端的結(jié)果所使用的編碼 |
character_set_connection | 數(shù)據(jù)庫連接編碼 |
character_set_database | 數(shù)據(jù)庫編碼 |
character_set_filesystem | 文件系統(tǒng)編碼 |
character_set_server | 服務(wù)端編碼 |
character_set_system | 系統(tǒng)編碼 |
character_set_dir | 指定字符編碼文件路徑 |
- 更改字符編碼
命令格式:set 變量名 = 字符編碼;
ex:
set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;
ps:可以通過格式: set names 字符編碼 來同時設(shè)置character_set_client鲫构、character_set_connection浓恶、character_set_result的編碼
校對集
校對集是數(shù)據(jù)比較的方式,共有三種格式:_bin:binary, 二進(jìn)制比較, 區(qū)分大小寫;_cs: case sensitive, 大小寫敏感;_ci: case insensitice, 大小寫不敏感;校對集必須在沒有數(shù)據(jù)之前設(shè)置才有效芬迄,如果在已有數(shù)據(jù)的情況下進(jìn)行修改问顷,那么修改無效。
--顯示所有字符集
show character set;
show charset;
--顯示符合匹配規(guī)則的字符集
show character set like '%d%';
show charset like '%d%';
--顯示所有校對集
show collation;
--顯示符合匹配規(guī)則的校對集
show collation like '%d%';
--設(shè)置字符集編碼為utf8
charset utf8;
--設(shè)置校對集編碼
collate utf8_general_ci;
數(shù)據(jù)類型
- 數(shù)值類型
整型
類型 | 字節(jié) |
---|---|
tinyint | 1字節(jié) |
smallint | 2字節(jié) |
mediumint | 3字節(jié) |
int | 4字節(jié) |
bigint | 8字節(jié) |
int(M) M表示總位數(shù)禀梳。默認(rèn)存在符號位杜窄,unsigned 屬性修改顯示寬度,如果某個數(shù)不夠定義字段時設(shè)置的位數(shù)算途,則前面以0補填塞耕,zerofill 屬性修改
ps:MySQL沒有布爾類型,通過整型0和1表示嘴瓤。常用tinyint(1)表示布爾型扫外。
浮點型
類型 | 字節(jié) |
---|---|
float(單精度) | 4字節(jié) |
double(雙精度) | 8字節(jié) |
浮點型既支持符號位 unsigned 屬性,也支持顯示寬度 zerofill 屬性廓脆。不同于整型筛谚,前后均會補填0.定義浮點型時,需指定總位數(shù)和小數(shù)位數(shù)停忿。float(M, D) double(M, D)M表示總位數(shù)驾讲,D表示小數(shù)位數(shù)。M和D的大小會決定浮點數(shù)的范圍。不同于整型的固定范圍吮铭。M既表示總位數(shù)(不包括小數(shù)點和正負(fù)號)时迫,也表示顯示寬度(所有顯示符號均包括)。支持科學(xué)計數(shù)法表示谓晌。浮點數(shù)表示近似值掠拳。
定點數(shù)
decimal是可變長度。decimal(M, D) M也表示總位數(shù)纸肉,D表示小數(shù)位數(shù)溺欧。保存一個精確的數(shù)值,不會發(fā)生數(shù)據(jù)的改變毁靶,不同于浮點數(shù)的四舍五入胧奔。將浮點數(shù)轉(zhuǎn)換為字符串來保存,每9位數(shù)字保存為4個字節(jié)预吆。
- 字符串類型
char, varchar
char 定長字符串龙填,速度快,但浪費空間拐叉。varchar 變長字符串岩遗,速度慢,但節(jié)省空間凤瘦。char(M)宿礁、varchar(M)M表示能存儲的最大長度,此長度是字符數(shù)蔬芥,非字節(jié)數(shù)梆靖。不同的編碼,所占用的空間不同笔诵。char,最多255個字符返吻,與編碼無關(guān)。varchar,最多65535字符乎婿,與編碼有關(guān)测僵。一條有效記錄最大不能超過65535個字節(jié)。utf8 最大為21844個字符谢翎,gbk 最大為32766個字符捍靠,latin1 最大為65532個字符。varchar 是變長的森逮,需要利用存儲空間保存 varchar 的長度榨婆,如果數(shù)據(jù)小于255個字節(jié),則采用一個字節(jié)來保存長度褒侧,反之需要兩個字節(jié)來保存良风。varchar 的最大有效長度由最大行大小和使用的字符集確定颜武。最大有效長度是65532字節(jié),因為在varchar存字符串時拖吼,第一個字節(jié)是空的,不存在任何數(shù)據(jù)这吻,然后還需兩個字節(jié)來存放字符串的長度吊档,所以有效長度是64432-1-2=65532字節(jié)。
blob, text
blob 二進(jìn)制字符串(字節(jié)字符串)
tinyblob, blob, mediumblob, longblob
text 非二進(jìn)制字符串(字符字符串)
tinytext, text, mediumtext, longtext
text 在定義時唾糯,不需要定義長度怠硼,也不會計算總長度。
text 類型在定義時移怯,不可給default值香璃。
binary, varbinary
類似于char和varchar,用于保存二進(jìn)制字符串舟误,也就是保存字節(jié)字符串而非字符字符串葡秒。char, varchar, text 對應(yīng) binary, varbinary, blob。
日期時間類型
datetime 8字節(jié) 日期及時間 1000-01-01 00:00:00 到 9999-12-31 23:59:59
date 3字節(jié) 日期 1000-01-01 到 9999-12-31
timestamp 4字節(jié) 時間戳 19700101000000 到 2038-01-19 03:14:07
time 3字節(jié) 時間 -838:59:59 到 838:59:59
year 1字節(jié) 年份 1901 - 2155
枚舉和集合
枚舉(enum)
enum(val1, val2, val3...)
在已知的值中進(jìn)行單選嵌溢。最大數(shù)量為65535.
枚舉值在保存時眯牧,以2個字節(jié)的整型(smallint)保存。每個枚舉值赖草,按保存的位置順序学少,從1開始逐一遞增。
表現(xiàn)為字符串類型秧骑,存儲卻是整型版确。
NULL值的索引是NULL。
空字符串錯誤值的索引值是0乎折。
集合(set)
set(val1, val2, val3...)
create table tab ( gender set('男', '女') );
insert into tab values ('男, 女');
最多可以有64個不同的成員绒疗。以bigint存儲,共8個字節(jié)笆檀。采取位運算的形式忌堂。當(dāng)創(chuàng)建表時,SET成員值的尾部空格將自動被刪除酗洒。