分析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);可以看出,id的顯示寬度為3,不足的左邊補0,資料長度超過的則原樣輸出。如果沒有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)
(3)float、double和decimal的長度指的是全部數字(包括小數點後面的),例如decimal(4,1)指的是全部位數為4,小數點後1位,如果插入1234,則查詢的資料是999.9。過程如下
mysql> alter table test add realnum decimal(4,1);附錄 常見mysql資料型別(留作備忘)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)
類 型大 小
描 述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 此儲存方式為主機位元組儲...