《MySQL技術內幕——SQL編程》讀書筆記(二)——資料類型

來源:互聯網
上載者:User

標籤:表示   命令   提升   符號   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編程》讀書筆記(二)——資料類型

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.