程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> 《MySQL技術內幕——SQL編程》讀書筆記(二)——數據類型,java編程思想讀書筆記

《MySQL技術內幕——SQL編程》讀書筆記(二)——數據類型,java編程思想讀書筆記

編輯:MySQL綜合教程

《MySQL技術內幕——SQL編程》讀書筆記(二)——數據類型,java編程思想讀書筆記


對數據類型的選擇將影響與數據庫交互的應用程序的性能。

1、通常來說,如果一個頁內可以存放盡可能多的行,那麼數據庫的性能就越好,因此選擇一個正確的數據類型至關重要。

2、另一方面,如果在數據庫中創建表時選擇了錯誤的數據類型,那麼後期的維護成本可能非常大,用戶需要花大量時間進行ALTER TABLE 操作。

1. 數據類型

1. UNSIGNED

將數字類型無符號化。

例如:

INT 的類型范圍是 -2147483648 ~ 2147483647

INT UNSIGNED 的 類型范圍是 0 ~ 42967295

看起來很不錯的屬性 ,但會有一些負面作用。

 

CREATE TABLE t (a INT UNSIGNED,b INT UNSIGNED);
INSERT INTO t SELECT 1,2;
SELECT a - b FROM t;

執行最後一條sql後會報錯,如果沒有報錯得到的結果應該是4 294 967 295。

造成這種結果的原因是:

 

-1 的 16進制表示是:0xfff fff ff
4 294 967 295 的16進制表示是 : 0xfff fff ff
在MySQL數據庫中,對於UNSIGNED數的操作,其返回值都UNSIGNED的。

如果想要得到 - 1 這個值,只要對SQL_MODE這個參數進行設置即可:

SET sql_mode='NO_UNSIGNED_SUBTRACTION';

 

盡量不要使用UNSIGNED,INT 類型可能存放不了的數據,INT UNSIGNED 同樣可能存放不了,與其如此,還不如在數據庫設計階段將INT類型提升為BIGINT類型。

 

2、ZEROFILL

像是一個顯示的屬性。

 

ALTER TABLE t CHANGE COLUMN a a int(4) UNSIGNED ZEROFILL;

修改了a列後,搜索t表的數據,會出現不一樣的顯示:

 

SELECT a,b FROM t\G;
a: 0001
b:2

 

可以看到a的值由原來的1 變為 0001,這就是ZEROFILL屬性的作用,如果寬度小於設定的寬度,則自動填充 0。

注意:

 

在MySQL中實際存儲的還是1。可以用HEX函數檢查:

SELECT a,HEX(a) FROM t\G; 

 

在部分窗口可能看不到,mysql命令行可以看到。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved