1. 程式人生 > >MySQL支援的資料型別

MySQL支援的資料型別

2.1整值型別 【整數】 當加入zerofill引數的時候,會把數值前用0填充剩餘的寬度,同時當設定了寬度限制之後,如果插入大於寬度限制的值,不會截斷或插不進去報錯 當選擇屬性UNSIGNED時,使引數屬性的取值範圍取值是正常值的下限為0,eg.tinyint有符號範圍-128~~127,無符號範圍是0-255,當一列制定為zerofill,則MySQL自動為該列新增UNSIGNED屬性 【小數】浮點數float,double 定點數decimal (M.D)表示該值一共M(精度)位數(整數+小數),小數位數未D(標度) 浮點數如果不寫精度和標度,則會按照實際精度值顯示,如果有精度和標度,則會自動將四捨五入後的數值插入;定點數如果不寫精度和標度,則會按照預設值decimal(10,0)來進行操作,並且如果資料超過了精度和標度值,系統會進行報錯,但是值還是會新增進去 【注:對於精確度較高的應用中要使用定點數而不是浮點數來儲存資料,因為在使用單精度浮點數表示的時候會產生誤差 P153】 【注:浮點數的比較最好使用範圍比較而不是==比較,否則會產生誤差; P154】 【關於浮點數與定點數的應用要注意: 1,浮點數存在誤差問題; 2,對貨幣等精確到敏感的資料,應該用定點數表示或儲存; 3,在程式設計中,如果用到浮點數,要特別注意誤差問題,並儘量避免浮點數比較; 4,要注意浮點數中一些特殊值的處理; **** 】 2.2日期時間型別 timestamp的插入和查詢都受當時時區的影響,而datetime只能反應出插入時當地的時區 2.3字串型別 char和varchar的主要區別在於字串的儲存方式不同,char不可變,varchar可變,在檢索時char刪除了尾部的空格,varchar則保留這些空格 對於那些變換長度不大並且對於查詢速度有比較高的要求的資料可以考慮使用char 對於不同的引擎來說: MyISAM:建議使用固定長度的資料列代替可以長度的資料列 MEMORY:目前都是用固定長度的資料行處理,所以無論使用char還是varchar都是一樣的,兩者都是作為char型別的處理 InnoDB:建議使用varchar,對於InnoDB資料表,內部的行儲存格式上沒有區分固定長度和可變長度列(所有資料行都使用指向資料列值的頭指標),因此在本質上使用固定長度char不一定比可變varchar的效能要好。因而主要效能因素是資料行使用的儲存總量,由於char比varchar平均佔用的空間要多於varchar,因此使用varchar是最小化需要處理的資料行的儲存總量和磁碟的I/O是比較好的

 text與blob
      合成索引:根據大文字欄位的內容來建立一個雜湊值,並把這個值儲存在單獨的資料列中,接下來就可以通過檢索雜湊值找到資料行了;可以使用MD5()函式生成雜湊值,也可以使用SHA1()或者CRC32();合成的雜湊值如果尾部用空格,就不要存放在char或者vachar中,因為他們會把尾部的空格去掉;
      合成索引的使用:eg:
           新增:insert into user values(1,repeat('lgy',3),md5(context));
           查詢:select * from hash_value=md5(repeat('lgy',3));
      但是這種技術只能用於精確匹配,如果要對blob或者clob進行模糊查詢,mysql提供了字首索引,也就是為欄位的前n列建立索引
           eg:desc select * from user where context like 'lgy%' \G;
      %不能放在前面,否則索引不會被引用
      【注:】如果經常做刪除和修改記錄的操作,要定期執行OPTIMIZE TABLE功能對錶進行隨便處理