mysql整型儲存位元組與最大長度設定

2021-08-11 12:01:27 字數 2904 閱讀 6244

分析mysql資料型別的長度

mysql有幾種資料型別可以限制型別的"長度",有char(length)、varchar(length)、tinyint(length)、smallint(length)、mediumint(length)、int(length)、bigint(length)、float(length, decimals)、double(length, decimals)和decimal(length, decimals)。

然而,這些資料型別的長度,並不是都指資料的大小。具體說就是:

(1)char、varcahr的長度是指字元的長度,例如char[3]則只能放字串"123",如果插入資料"1234",則從高位擷取,變為"123"。 varcahr同理。

(2)tinyint、smallint、mediumint、int和bigint的長度,其實和資料的大小無關!length指的是顯示寬度,舉個例子:

mysql> create table test(id int(3) zerofill);

query ok, 0 rows affected (0.09sec)

mysql> insert into test(id) values(1),(1234);

query ok, 2 rows affected (0.06sec)

records: 2 duplicates: 0 warnings: 0mysql> select * from test

;+------+

| id |

+------+

| 001|

| 1234|

+------+

2 rows in set (0.00 sec)

可以看出,id的顯示寬度為3,不足的左邊補0,資料長度超過的則原樣輸出。如果沒有zerofill,則看不出顯示寬度,沒有前導零。

(3)float、double和decimal的長度指的是全部數字(包括小數點後面的),例如decimal(4,1)指的是全部位數為4,小數點後1位,如果插入1234,則查詢的資料是999.9。過程如下

mysql> alter table test add realnum decimal(4,1);

query ok, 2 rows affected (0.03sec)

records: 2 duplicates: 0 warnings: 0mysql> insert into test(id,realnum) values(2,1234);

query ok, 1 row affected, 1 warning (0.05sec)

mysql> select * from test

;+------+---------+

| id | realnum |

+------+---------+

| 001| null |

| 1234| null |

| 002 | 999.9|

+------+---------+

3 rows in set (0.02 sec)

附錄 常見mysql資料型別(留作備忘)

類 型大 小

描 述cahr(length)

length位元組

定長字段,長度為0~255個字元

varchar(length)

string長度+1位元組或string長度+2位元組

變長字段,長度為0~65 535個字元

tinytext

string長度+1位元組

字串,最大長度為255個字元

text

string長度+2位元組

字串,最大長度為65 535個字元

mediumint

string長度+3位元組

字串,最大長度為16 777 215個字元

longtext

string長度+4位元組

字串,最大長度為4 294 967 295個字元

tinyint(length)

1位元組範圍:-128~127,或者0~255(無符號)

smallint(length)

2位元組範圍:-32 768~32 767,或者0~65 535(無符號)

mediumint(length)

3位元組範圍:-8 388 608~8 388 607,或者0~16 777 215(無符號)

int(length)

4位元組範圍:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(無符號)

bigint(length)

8位元組範圍:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(無符號)

float(length, decimals)

4位元組具有浮動小數點的較小的數

double(length, decimals)

8位元組具有浮動小數點的較大的數

decimal(length, decimals)

length+1位元組或length+2位元組

儲存為字串的double,允許固定的小數點

date

3位元組採用yyyy-mm-dd格式

datetime

8位元組採用yyyy-mm-dd hh:mm:ss格式

timestamp

4位元組採用yyyymmddhhmmss格式;可接受的範圍終止於2023年

time

3位元組採用hh:mm:ss格式

enum

1或2位元組

enumeration(列舉)的簡寫,這意味著每一列都可以具有多個可能的值之一

set1、2、3、4或8位元組

與enum一樣,只不過每一列都可以具有多個可能的值

從長整型資料取位元組

1 移位 佔記憶體,移植性一般 2 強制轉換 方便,移植性差 3 巨集定義 易讀,移植性好 define tobyte x,i char x i x表示資料,i表示位元組號 4 聯合體 union byte value 訪問時直接,方便,如value.dw,value.byte.b0等 5 聯合體 ...

整型資料的儲存與讀取

資料在計算機中是以二進位制補碼的形式儲存的。不同的資料型別有不同的補碼形式。下面分別就資料型別和資料的存放 讀取討論。一.資料的型別 資料型別分為原生資料型別和自定義資料型別。1 原生資料型別 內建型別 包括我們常用的int char short long float double.說明 整型家族有...

delphi integer 記憶體儲存與位元組轉換

一直不是很明白delphi中 integer 在記憶體中儲存方式。經實驗總結如下 integer記憶體儲存方式 高位元組在前,低位元組在後。如 12 34 56 78 在記憶體中為 78 56 34 12 即 3 78 120 2 56 86 1 34 52 0 12 18 此儲存方式為主機位元組儲...