查閱其他文章做的總結(jié),記錄一下
character set和collation簡單理解
character set 字符集
即字符集,常用的UTF-8毡们、GB2312、GB18030是對Unicode的一套編碼
軟件國際化是大勢所趨昧辽,所以Unicode是國際化最佳的選擇衙熔。當(dāng)然為了提高性能,有些情況下還是使用latin1比較好搅荞。MySQL有兩個(gè)支持Unicode的character set:
ucs2:使用16bits來表示一個(gè)Unicode字符红氯。
utf8:使用1~3bytes來表示一個(gè)Unicode字符框咙。
選擇哪個(gè)character set視情況而定,例如utf8表示latin字符只需要一個(gè)字節(jié)痢甘,所以當(dāng)用戶數(shù)據(jù)大部分為英文等拉丁字符時(shí)喇嘱,使用utf8比較節(jié)省數(shù)據(jù)庫的存儲空間utf8和utf8mb4的區(qū)別
MySQL在5.5.3之后增加了這個(gè)utf8mb4的編碼,mb4就是most bytes 4的意思塞栅,專門用來兼容四字節(jié)的unicode者铜。好在utf8mb4是utf8的超集,除了將編碼改為utf8mb4外不需要做其他轉(zhuǎn)換放椰。當(dāng)然作烟,為了節(jié)省空間,一般情況下使用utf8也就夠了
那上面說了既然utf8能夠存下大部分中文漢字,那為什么還要使用utf8mb4呢?
原來mysql支持的 utf8 編碼最大字符長度為 3 字節(jié)砾医,如果遇到 4 字節(jié)的寬字符就會插入異常了拿撩。三個(gè)字節(jié)的 UTF-8 最大能編碼的 Unicode 字符是 0xffff,也就是 Unicode 中的基本多文種平面(BMP)如蚜。也就是說压恒,任何不在基本多文本平面的 Unicode字符,都無法使用 Mysql 的 utf8 字符集存儲错邦。包括 Emoji 表情(Emoji 是一種特殊的 Unicode 編碼探赫,常見于 ios 和 android 手機(jī)上),和很多不常用的漢字撬呢,以及任何新增的 Unicode 字符等等(utf8的缺點(diǎn))
collation
指定數(shù)據(jù)集如何排序期吓,以及字符串的比對規(guī)則
每個(gè)character set會對應(yīng)一定數(shù)量的collation。查看方法是在MySQL的Console下輸入
show collation;
eg:
utf8_danish_ci
ci是case insensitive的縮寫倾芝,cs是case sensitive的縮寫讨勤。即,指定大小寫是否敏感晨另。
utf8_bin是將字符串中的每一個(gè)字符用二進(jìn)制數(shù)據(jù)存儲潭千,區(qū)分大小寫。
utf8_general_ci借尿,utf8_unicode_ci刨晴,utf8_danish_ci有什么區(qū)別
同一個(gè)character set的不同collation的區(qū)別在于排序、字符串對比的準(zhǔn)確度(相同兩個(gè)字符在不同國家的語言中的排序規(guī)則可能是不同的)以及性能路翻。
例如:
utf8_general_ci在排序的準(zhǔn)確度上要遜于utf8_unicode_ci狈癞,當(dāng)然,對于英語用戶應(yīng)該沒有什么區(qū)別茂契。但性能上(排序以及比對速度)要略優(yōu)于utf8_unicode_ci.例如前者沒有對德語中?=ss的支持蝶桶。而utf8_danish_ci相比utf8_unicode_ci增加了對丹麥語的特殊排序支持
索引
1、索引類型
MYSQL索引有四種
PRIMARY(唯一且不能為空掉冶;一張表只能有一個(gè)主鍵索引)真竖、
它可以提高查詢效率脐雪,并提供唯一性約束。一張表中只能有一個(gè)主鍵恢共。被標(biāo)志為自動增長的字段一定是主鍵战秋,但主鍵不一定是自動增長。一般把主鍵定義在無意義的字段上(如:編號)讨韭,主鍵的數(shù)據(jù)類型最好是數(shù)值INDEX(普通索引)
UNIQUE(唯一性索引)脂信、
FULLTEXT(全文索引:用于搜索很長一篇文章的時(shí)候,效果最好透硝。用在比較短的文本狰闪,如果就一兩行字的,普通的 INDEX 也可以)
舊版的MySQL的全文索引只能用在MyISAM表格的char蹬铺、varchar和text的字段上。
不過新版的MySQL5.6.24上InnoDB引擎也加入了全文索引索引方法
mysql的兩種索引方法(Innodb和MyISAM默認(rèn)的索引是Btree索引):
1).HASH(用于對等比較秉撇,如"="和" <=>") //<=> 安全的比對 甜攀,用與對null值比較,語義類似is null()
2).BTREE(用于非對等比較琐馆,比如范圍查詢)>规阀,>=,<瘦麸,<=谁撼、BETWEEN、Like索引使用注意事項(xiàng):
1.索引會忽略null值滋饲,所以我們在設(shè)計(jì)數(shù)據(jù)庫的時(shí)候設(shè)置為為NOT NULL;
2.短索引(給索引設(shè)置長度)不僅能夠提高查詢速度厉碟,而且能節(jié)省I/O操作。
3.Mysql在查詢的時(shí)候只會使用一個(gè)索引屠缭,但不是一個(gè)字段
4.不鼓勵使用like對索引操作:like"%aaa%"不會使用索引箍鼓;但like“aaa%”會使用索引。即可以對固定起始值模糊查詢
5.不適用于否地操作(not in , <>, !=呵曹,or) //用到or地方款咖,盡量用union,或者程序兩次查找
6.如果創(chuàng)建了索引奄喂,但是查詢語句并沒有使用铐殃,則會使原來的效率更差