mysql中的資料型別

2021-08-02 10:04:25 字數 3857 閱讀 3808

1 整型

2 定點型decimal, numeric, 在mysql中以binary形式儲存,用於精確儲存數值。

decimal(m,n): m為最大有效位數(不超過65,預設為10),用於控制數值的精度,n為最大小數字數

3 浮點型float(4 bytes), double(8bytes) , 用於近似儲存數值。

float(m,n): m為最大有效位數(0-23), n為最大小數字數

double(m, n):m為最大有效位數(24-53), n為最大小數字數

但是這裡的m並不能用於控制精度,而是用於確定儲存空間的大小(是float還是double).

為了保持最大的可移植性,一般最好不要對m和n進行限制。 

4 日期時間型別

date: mysql預設以'yyyy-mm-dd'格式展現date資料, 有效範圍是'1000-01-01''9999-12-31'

datetime: 預設展現格式'yyyy-mm-dd hh:mm:ss[.fraction]', 有效範圍'1000-01-01 00:00:00.000000''9999-12-31 23:59:59.999999',最高時間精度可以到微秒(6位小數)

timestamp: 有效範圍'1970-01-01 00:00:01.000000''2038-01-19 03:14:07.999999', timestamp會將當地時間轉化成utc進行儲存,然後再轉化成當地時間進行展示,預設當前時區為伺服器所在時區。注:

1. mysql會將無效的date, datetime, timestamp 所有位都置零進行儲存。

2. 2位年份轉化為4位的規則:00-69==》2000-2069;70-99==》1970-1999; 

3. 可以為timestamp和datetime賦值當前時間的變數或者函式current_timestamp(),now(),localtime,localtime(),localtimestamp, 和localtimestamp

(),這些量都具有相同的含義。

time: 預設展現為'hh:mm:ss[.fraction]'或者'hhh:mm:ss[.fraction]'格式, 有效範圍為'-838:59:59'到'838:59:59'。大的時間主要用於表徵事件的時間差。

注意:'1234'表示'00:12:34', '12:34'表示'12:34:00'

year:佔1byte。 可以限定為year(4)(有效範圍:1901to2155)和year(2)(有效範圍:1970-2069)

注意:'00'在year(2)和year(4)中代表的分別是2000和0000.

非法年份會記錄成0000.  

年份可以為'1999',也可以為數字1999. 

年份可以用now()返回值賦值。

5 字串型別

char(m): 定長字串,m取值範圍0-255

varchar(m): 變長字串,m為字串的最大長度,取值範圍0-65535。 varchar在字串前會有1-2bytes的長度字首,用於標記可變字串的長度。

注意:1. 對於過長的字串,varchar型別會在插入前截斷,並且輸出警告, char 型別直接截斷無反饋。

2. char型別讀取時會截斷尾部空白字元,而varchar不會 

3. 除了模式匹配外,mysql中的字串比較都是忽略尾部空白字元的。 

6 二進位制型別

bit(m): 用於儲存二進位制值,m為最大二進位制位數(1-64)。賦值可以用b'value', 例如 b'10001000'等等。

binary(m): 類似char,但是其儲存的是二進位制字串,而沒有包含字符集,因此所有的排序比較都是根據二進位制代表的數值來進行的。m為最大可儲存的byte數, 0<=m<=255.

varbinary: 類似varchar, m<65535, 其實際所佔空間為存入的內容長度+1或者2.

注意:1. binary插入資料時,位數不足會用ox00在最右邊填充, 而varbinary沒有填充。

2. binary沒有字符集和字元規則,而char binary儲存的是普通字串通過二進位制規則進行儲存,這二者是不一樣的。

blob (tinyblob-2^8+1bytes,blob-2^16+1bytes,mediumblob-2^24+2bytes, andlongblob-2^32+2bytes):blob是binary large object. 

text (tinytext-2^8+1bytes

,text-2^16+1bytes,mediumtext-2^24+2bytes, andlongtext-2^32+2bytes):

注意:blob和text的訪問無填充無截斷。 

enum:可取的選項數小於65535, 實際操作中一般不多於3000. 

1. 索引從1開始 

2. 插入enum中的字串如果不存在與選項中,則會插入空字串,索引為0.

3. 如果enum列可以為空,則預設為空,否則預設為第乙個索引的值。 

4. enum的排序是根據索引值來進行的。如果要按字母順序表來進行,則 要使用order by cast(

colas char)

5. enum的內容只能通過常量來建立 

set: 最多可以有64個不同的成員

1. 重複的成員會導致警告,或者報錯(strict mode) 

2. 自動刪除結尾空白

3. set以數值儲存。每個成員代表乙個bit位,若以數值返回成員則分別為1, 2, 4, 8...... 

4. 插入資料時,每個成員都只計入一次

5. 查詢, 使用find_in_set或者like, 例如:

mysql>select * from tbl_namewhere find_in_set('value',set_col)>0;mysql>select * from tbl_namewhereset_collike '%value%';

也可以查詢索引和多個成員, 如:

mysql>select * from tbl_namewhereset_col& 1;mysql>select * from tbl_namewhereset_col= 'val1,val2';

MYSQL中的資料型別

mysql支援大量的列型別,它可以被分為3類 數字型別 日期和時間型別以及字串 字元 型別。本節首先給出可用型別的乙個概述,並且總結每個 列型別的儲存需求,然後提供每個類中的型別性質的更詳細的描述。概述有意簡化,更詳細的說明應該考慮到有關特定列型別的附加資訊,例如你能為其指定值的允 許格式。由mys...

mysql 中的資料型別

mysql 中的資料型別 2008 01 29 13 23 資料型別 描述位元組 推薦使用 smallint 整數,從 32000到 32000範圍 2儲存相對比較小的整數。比如 年紀,數量 int整數,從 2000000000 到 2000000000 範圍 4儲存中等整數 例如 距離 bigin...

MySQL中的資料型別

資料型別 描述 位元組 推薦使用 allint 整數,從 32000到 32000範圍 2 儲存相對比較小的整數。比如 年紀,數量 int 整數,從 2000000000 到 2000000000 範圍 4 儲存中等整數 例如 距離 bigint 不能用 allint 或 int描述的超大整數。8 ...