天天看點

mysql——資料庫設計中int與varchar中的長度含義一、int中的長度二、varchar中的長度

一、int中的長度

提問:

MySQL的字段,unsigned int(3), 和unsinged int(6), 能存儲的數值範圍是否相同。如果不同,分别是多大?

回答:

不同,int(3)最多顯示3位無符号整體,int(6)最多顯示6位無符号數。 

如果你的答案和上面的一緻,恭喜你和我犯了一樣的錯誤。

真實情況:

我們建立下面這張表:

CREATE TABLE `test` (
    `id` int() unsigned NOT NULL AUTO_INCREMENT,
    `i1` int() unsigned zerofill DEFAULT NULL,
    `i2` int() unsigned zerofill DEFAULT NULL,
    PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8           
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

插入一些資料後 

mysql——資料庫設計中int與varchar中的長度含義一、int中的長度二、varchar中的長度

發現,無論是int(3), int(6), 都可以顯示6位以上的整數。但是,當數字不足3位或6位時,前面會用0補齊。

查下手冊,解釋是這樣的: 

mysql還支援選擇在該類型關鍵字後面的括号内指定整數值的顯示寬度(例如,INT(4))。該可選顯示寬度規定用于顯示寬度小于指定的列寬度的值時從左側填滿寬度。顯示寬度并不限制可以在列内儲存的值的範圍,也不限制超過列的指定寬度的值的顯示。 

也就是說,int的長度并不影響資料的存儲精度,長度隻和顯示有關,為了讓大家看的更清楚,我們在上面例子的建表語句中,使用了zerofill。

結論:

無論是unsigned int(3)或 unsiend int(6),存儲的都是4位元組無符号整數, 也就是0~2^32。

二、varchar中的長度

首先 mysql 5.X 以上的版本的 定義中 表示的字元長度,如上varchar(20)你既可以添加20個英文字元,也可以添加二十個中文字元。 表示的字元長度

mysql 4.X 的版本表示的是位元組長度,會根據字元集轉變 内容位元組長度存儲。