建表原則:使用可以正確儲存資料的最小資料型別。為每一列選擇合適的字段型別:整數型別
占用位元組
範圍tinyint
1有符號:[-128,127] 或無符號:[0,255]
smallint
2有符號:[-32768,32767]或無符號:[0,65535]
mediumint
3有符號:[-8333608,8388607]或無符號:[0,1677215]
int、integer
4有符號:[-21億多,21億多]或無符號:[0,42億多]
bigint
8很大,19位數字的範圍
int有5種型別,不同的型別的最大儲存範圍是不一樣的。性別?用tinyint,因為enum也是整型儲存。
1)所有整數型別都有乙個可選的屬性unsigned(無符號),此時上限取值是原來的2倍
2)還有乙個屬性是auto_increment(自增),該屬性只能用於整數型別
注:mysql 中對於主鍵一般選擇是 int,因為一般資料量到達 2000 萬時就要分表了(int 是 42 億);另外,bigint 的底層儲存更複雜。屬性
儲存空間
精度精確性
說明float
4 bytes
單精度非精確
單精度浮點型
double
8 bytes
雙精度比float精度高
雙精度浮點型
注:float 容易造成精度丟失,且具體的精度由機器精度決定1)高精度的資料型別,常用來儲存交易相關的資料
2)decimal(m,n)
3)儲存空間變長
注:表示定點數的還有 number(p,d)型別
單位最大
特性char(n)
字元最大為255字元
長度為 n 的定長字串,容易造成空間的浪費
varchar(n)
字元可以超過255個字元
最大長度為 n 的變長字串,節省儲存空間
text(n)
位元組總大小為65535位元組,約為64kb
-1)mysql預設為 utf-8,那麼在英文模式下1個字元=1個位元組,在中文模式下1個字元=3個位元組。
2)text 在 mysql 內部大多儲存格式為溢位頁,效率不如 char
3)字元型別變長情況下,varchar 更節省空間,但是對於 varchar 字段,需要乙個位元組來記錄長度。所以,固定長度的用 char ,不要用 varchar 。
型別位元組
表示形式
例date
3位元組yyyy-mm-dd
2011-11-11
time
3位元組hh:mm:ss
11:11:00
datetime
8位元組yyyy-mm-dd hh:mm:ss
2011-11-11 11:11:00
timestamp
4位元組yyyy-mm-dd hh:mm:ss
2011-11-11 11:11:00
timestamp 翻譯為漢語即"時間戳",它是當前時間到 unix元年(1970 年 1 月 1 日 0 時 0 分 0 秒)的秒數。對於某些時間的計算,如果是以 datetime 的形式會比較困難,假如我是 2011-11-11 11:11:00 出生,現在的時間是 2020-01-01 10:04:50,那麼要計算我活了多少秒鐘用 datetime 還需要函式進行轉換,但是 timestamp 直接相減就行。
1)mysql 在 5.6.4 版本之後,timestamp 和 datetime 支援到微秒
2)儲存範圍的區別
3)timestamp 和 datetime 可以接受的入參形式
// 下面都是 mysql 允許的形式,mysql 會自動處理
2011-11
-1120:
48:592011#11#1120/
48/5920111111204859
4)如果存進去的是 null,timestamp 會自動儲存當前時間,而 datetime 會儲存 null
5)timestamp 會根據系統時區進行轉換,datetime 則不會,所以,一般使用 timestamp 國際化
6)注意,如存時間戳使用數字型別 bigint
注:非空字段盡量定義成 not null,提供預設值,或者使用特殊值、空串代替null。null型別的儲存、優化、使用都會存在問題。
mysql 的 latin1 支援中文
初學者往往會犯糊塗,mysql 的預設字符集 latin1 是否支援中文?初步分析表明,是的,確實支援中文!是初步的結論,只做了初步的分析 latin1是iso 8859 1的別名,有些環境下寫作latin 1。iso 8859 1編碼是單位元組編碼,向下相容ascii,其編碼範圍是0x00 0xf...
WebServices 之二 支援的資料型別
asp.net webservice 支援絕大多數的基元型別及其陣列,另外還支援自定義的結構 struct 型別 class 列舉 enum dataset xmlelement xmlnode 集合 ienumerable icollection 等。asp.net webservice 使用 x...
mysql5 7支援的原生態json格式
在mysql5.7中可以直接儲存json格式,並且可以對json資料進行讀取 如果要解析第乙個陣列成員請使用 json extract data,0 要搜尋用 json search data,one 關鍵字 或者json search data,all 關鍵字 第乙個是搜乙個,後面是搜出全部。se...