標籤:表示 命令 提升 符號 rac ffffff span weight 範圍
對資料類型的選擇將影響與資料庫互動的應用程式的效能。
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: 0001b:2
可以看到a的值由原來的1 變為 0001,這就是ZEROFILL屬性的作用,如果寬度小於設定的寬度,則自動填滿 0。
注意:
在MySQL中實際儲存的還是1。可以用HEX函數檢查:
SELECT a,HEX(a) FROM t\G;
在部分視窗可能看不到,mysql命令列可以看到。
《MySQL技術內幕——SQL編程》讀書筆記(二)——資料類型