1. 程式人生 > 實用技巧 >30例 | 一文搞懂python日期時間處理

30例 | 一文搞懂python日期時間處理

int的長度並不影響資料的儲存精度,長度只和顯示有關int(M) 在integer 資料型別中,M 表示最大顯示寬度。在 int(M) 中,M 的值跟 int(M) 所佔多少儲存空間並無任何關係。 int(3)、int(4)、int(8) 在磁碟上都是佔用 4 btyes 的儲存空間。說白了,除了顯示給使用者的方式有點不同外,int(M) 跟 int 資料型別是相同的。
如果int的值為10int(10)顯示結果為0000000010int(3)顯示結果為010就是顯示的長度不一樣而已 都是佔用四個位元組的空間

根據個人的實驗並結合資料
1、長度跟可以使用的值的範圍無關,值的範圍僅跟型別對應的儲存位元組數和是否unsigned有關;

型別佔用位元組數有符號取值範圍無符號取值範圍
TINYINT1-128 ~ 1270 ~ 255
SMALLINT2-32768 ~ 327670 ~ 65535
MEDIUMINT3-8388608 ~ 83886070 ~ 16777215
INT4-2147483648 ~ 21474836470 ~ 4294967295
BIGINT8-2^63 ~ 2^63-10 ~ 2^64-1

2、長度指的是顯示寬度,比如,指定3位int,那麼id為3和id為300的值,在顯示的時候怎麼對齊呢?按照手冊的說法,是預設用“空格”在左邊填充。比如

CREATE TABLE `inttest` (
  `id` int(3) unsigned NOT NULL AUTO_INCREMENT,
  `value` varchar(2) NOT NULL,
  PRIMARY KEY (`id`)
) EN

現在分別插入id長度為2,3,4,5位的資料,執行查詢以後得到顯示如下:

MariaDB [mytest]> select * from inttest;
+-------+-------+
| id    | value |
+-------+-------+
|    13 | a     |
|   111 | b     |
|  1000 | c     |
| 10000 | d     |
+-------+-------+
4 rows in set (0.00 sec)

如果我們改成ZEROFILL,

CREATE TABLE `inttest` (
  `id` int(3) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `value` varchar(2) NOT NULL,
  PRIMARY KEY (`id`)
) EN

再次查詢的結果如下:

MariaDB [mytest]> select * from inttest;
+-------+-------+
| id    | value |
+-------+-------+
|   013 | a     |
|   111 | b     |
|  1000 | c     |
| 10000 | d     |
+-------+-------+
4 rows in set (0.00 sec)

我們會發現,不足3位長度的值會被自動填充,而超過3位長度的值就不會被填充了。

以下是mysql官網對於設定寬度的解釋:

“MySQL還支援選擇在該型別關鍵字後面的括號內指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用於顯示寬度小於指定的列寬度的值時從左側填滿寬度。顯示寬度並不限制可以在列內儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。“也就是說,int的長度並不影響資料的儲存精度,長度只和顯示有關

“當結合可選擴充套件屬性ZEROFILL使用時, 預設補充的空格用零代替。例如,對於宣告為INT(5) ZEROFILL的列,值4檢索為00004。請注意如果在整數列儲存超過顯示寬度的一個值,當MySQL為複雜聯接生成臨時表時會遇到問題,因為在這些情況下MySQL相信資料適合原列寬度。