mysql數值型資料列舉 MySQL資料型別

2021-10-22 08:12:03 字數 3448 閱讀 9558

/* 資料型別(列型別) */ ------------------

1. 數值型別

-- a. 整型 ----------

型別            位元組        範圍(有符號位)

tinyint        1位元組    -128 ~ 127        無符號位:0 ~ 255

smallint    2位元組    -32768 ~ 32767

mediumint    3位元組    -8388608 ~ 8388607

int            4位元組

bigint        8位元組

int(m)    m表示總位數

- 預設存在符號位,unsigned 屬性修改

- 顯示寬度,如果某個數不夠定義欄位時設定的位數,則前面以0補填,zerofill 屬性修改

例:int(5)    插入乙個數'123',補填後為'00123'

- 在滿足要求的情況下,越小越好。

- 1表示bool值真,0表示bool值假。mysql沒有布林型別,通過整型0和1表示。常用tinyint(1)表示布林型。

-- b. 浮點型 ----------

型別                位元組        範圍

float(單精度)        4位元組

double(雙精度)    8位元組

浮點型既支援符號位 unsigned 屬性,也支援顯示寬度 zerofill 屬性。

不同於整型,前後均會補填0.

定義浮點型時,需指定總位數和小數字數。

float(m, d)        double(m, d)

m表示總位數,d表示小數字數。

m和d的大小會決定浮點數的範圍。不同於整型的固定範圍。

m既表示總位數(不包括小數點和正負號),也表示顯示寬度(所有顯示符號均包括)。

支援科學計數法表示。

浮點數表示近似值。

-- c. 定點數 ----------

decimal    -- 可變長度

decimal(m, d)    m也表示總位數,d表示小數字數。

儲存乙個精確的數值,不會發生資料的改變,不同於浮點數的四捨五入。

將浮點數轉換為字串來儲存,每9位數字儲存為4個位元組。

2. 字串型別

-- a. char, varchar ----------

char    定長字串,速度快,但浪費空間

varchar    變長字串,速度慢,但節省空間

m表示能儲存的最大長度,此長度是字元數,非位元組數。

不同的編碼,所占用的空間不同。

char,最多255個字元,與編碼無關。

varchar,最多65535字元,與編碼有關。

一條有效記錄最大不能超過65535個位元組。

utf8 最大為21844個字元,gbk 最大為32766個字元,latin1 最大為65532個字元

varchar 是變長的,需要利用儲存空間儲存 varchar 的長度,如果資料小於255個位元組,則採用乙個位元組來儲存長度,反之需要兩個位元組來儲存。

varchar 的最大有效長度由最大行大小和使用的字符集確定。

最大有效長度是65532位元組,因為在varchar存字串時,第乙個位元組是空的,不存在任何資料,然後還需兩個位元組來存放字串的長度,所以有效長度是64432-1-2=65532位元組。

例:若乙個表定義為 create table tb(c1 int, c2 char(30), c3 varchar(n)) charset=utf8; 問n的最大值是多少? 答:(65535-1-2-4-30*3)/3

-- b. blob, text ----------

blob 二進位制字串(位元組字串)

tinyblob, blob, mediumblob, longblob

text 非二進位制字串(字元字串)

tinytext, text, mediumtext, longtext

text 在定義時,不需要定義長度,也不會計算總長度。

text 型別在定義時,不可給default值

-- c. binary, varbinary ----------

類似於char和varchar,用於儲存二進位制字串,也就是儲存位元組字串而非字元字串。

char, varchar, text 對應 binary, varbinary, blob.

3. 日期時間型別

一般用整型儲存時間戳,因為php可以很方便的將時間戳進行格式化。

datetime    8位元組    日期及時間        1000-01-01 00:00:00 到 9999-12-31 23:59:59

date        3位元組    日期            1000-01-01 到 9999-12-31

timestamp    4位元組    時間戳        19700101000000 到 2038-01-19 03:14:07

time        3位元組    時間            -838:59:59 到 838:59:59

year        1位元組    年份            1901 - 2155

datetime    「yyyy-mm-dd hh:mm:ss」

timestamp    「yy-mm-dd hh:mm:ss」

「yyyymmddhhmmss」

「yymmddhhmmss」

yyyymmddhhmmss

yymmddhhmmss

date        「yyyy-mm-dd」

「yy-mm-dd」

「yyyymmdd」

「yymmdd」

yyyymmdd

yymmdd

time        「hh:mm:ss」

「hhmmss」

hhmmss

year        「yyyy」

「yy」

yyyy

yy4. 列舉和集合

-- 列舉(enum) ----------

enum(val1, val2, val3...)

在已知的值中進行單選。最大數量為65535.

列舉值在儲存時,以2個位元組的整型(smallint)儲存。每個列舉值,按儲存的位置順序,從1開始逐一遞增。

表現為字串型別,儲存卻是整型。

null值的索引是null。

空字串錯誤值的索引值是0。

-- 集合(set) ----------

set(val1, val2, val3...)

create table tab ( gender set('男', '女', '無') );

insert into tab values ('男, 女');

最多可以有64個不同的成員。以bigint儲存,共8個位元組。採取位運算的形式。

當建立表時,set成員值的尾部空格將自動被刪除。

MYSQL資料型別 數值型

1 整數型 建立整型表 create table my int int 1 tinyint int 2 smallint int 3 int int 4 bigint charset utf8 插入資料 insert into my int values 100 100 100 100 有效資料 i...

mysql 整型 字元型 列舉型字段操作

bit m 位欄位型別。m表示每個值的位數,範圍為從1到64。如果m被省略,預設為1。tinyint m unsigned zerofill 很小的整數。帶符號的範圍是 128到127。無符號的範圍是0到255。bool,boolean 是tinyint 1 的同義詞。zero值被視為假。非zero...

通過反射,如何將數值型列舉值賦值給列舉型別的屬性

處理可空列舉型別 原理它是值型別,原始寫法是nullable,泛型可以有多個型別引數,但資料庫的乙個欄位只會有乙個型別,所以判斷第乙個型別引數是否是列舉 if prop.propertytype.isvaluetype prop.propertytype.isgenerictype prop.pro...