首先我們應該了解mysql中的一個重要特性——插件式存儲引擎,從名字就能夠看出在mysql中,用戶能夠依據自己的需求隨意的選擇存儲引擎。實際上也是這樣。即使在同一個數據庫中。不同的表也能夠使用不同的存儲引擎。Mysql中支持的存儲引擎有非常多種,這個能夠去baidu或者google,本文主要說兩種比較經常使用的存儲引擎。myisam和innodb。
myisam的特點是
1)索引和數據分開存儲,myisam有三個文件(.frm文件,存儲表定義;.MYI存儲索引?my?index。??MYD存儲數據?my data)
2)不支持事務以及外鍵
3)支持全文索引
4)支持數據壓縮(myisam支持3種不同存儲格式。靜態表,動態表,壓縮表)
5)Select和Insert效率較高。所以一般以Select和insert為主的應用使用myisam存儲引擎。
6)表鎖
innodb的特點
1)支持外鍵和事務
2)假設非常多是update和delete操作,那么選擇innodb是合適的。
3)數據和索引存儲在一起。
4)innodb不支持全文索引
5)InnoDB 中不保存表的詳細行數。也就是說,運行select count(*) from table時。InnoDB要掃描一遍整個表來計算有多少行,可是MyISAM僅僅要簡單的讀出保存好的行數就可以。注意的是。當count(*)語句包括 where條件時。兩種表的操作是一樣的。
6)行級鎖
在對于字符串存儲的時候,假設是myisam建議使用固定長度數據列
假設使用innodb,建議使用varchar數據類型
================================華麗切割線===================================================
以下簡單提一下mysql中字符集的選擇
通常是這種。假設數據庫僅僅是須要支持一般中文,那么使用gbk就夠了。不須要使用uft8。原因是gbk一個漢字2個字節,utf8中一個漢字3個字節。
mysql的字符集有兩個概念,一個是字符集,一個是校對規則
字符集用來定義存儲字符串的方式
校對規則用來定義字符串的比較方式
假設校對規則是ci(比較時,大寫和小寫不敏感)?cs(比較時大寫和小寫敏感)。bin(二元,和字符編碼有關)
怎樣改動一個數據庫中的字符集呢?
假設沒有數據,直接改動就是,可是假設數據庫中已經存在數據,那么怎樣改動字符集呢?
1)導出表結構
2)手動改動導出的表結構(一個sql文件A.sql)
3)導出全部記錄(B.sql)
4)改動B.sql中的set?names?utf8
5)使用新的字符集創建數據庫
6)創建表
7)導入數據