MySQL中字段類型與合理的選擇字段類型;int(11)最大長度是多少?varchar最大長度是多少?

字段類型

數值

MySQL 的數值數據類型能夠大體劃分爲兩個類別,一個是整數,另外一個是浮點數或小數。
許多不一樣的子類型對這些類別中的每個都是可用的,每一個子類型支持不一樣大小的數據,而且 MySQL 容許咱們指定數值字段中的值是否有正負之分(UNSIGNED)或者用零填補(ZEROFILL)。mysql

clipboard.png

MySQL 以一個可選的顯示寬度指示器的形式對 SQL 標準進行擴展(如 INT(6),6便是其寬度指示器,該寬度指示器並不會影響int列存儲字段的大小,也就是說,超過6位它不會自動截取,依然會存儲,只有超過它自己的存儲範圍纔會截取;此處寬度指示器的做用在於該字段是否有zerofill,若是有就未知足6位的部分就會用0來填充),這樣當從數據庫檢索一個值時,能夠把這個值加長到指定的長度。例如,指定一個字段的類型爲 INT(6),就能夠保證所包含數字少於 6 個的值從數據庫中檢索出來時可以自動地用空格填充。須要注意的是,使用一個寬度指示器不會影響字段的大小和它能夠存儲的值的範圍。
萬一咱們須要對一個字段存儲一個超出許可範圍的數字,MySQL 會根據容許範圍最接近它的一端截短後再進行存儲。還有一個比較特別的地方是,MySQL 會在不合規定的值插入表前自動修改成 0。sql

字符串類型

MySQL 提供了 8 個基本的字符串類型,能夠存儲的範圍從簡單的一個字符到巨大的文本塊或二進制字符串數據。數據庫

一個英文字符 佔用一個字節;
漢字:
字符類型若爲gbk,每一個字符最多佔2個字節;
字符類型若爲utf8,每一個字符最多佔3個字節。
  • CHAR 和 VARCHAR 類型

CHAR 類型用於定長字符串,而且必須在圓括號內用一個大小修飾符來定義。這個大小修飾符的範圍從 0-255。比指定長度大的值將被截短,而比指定長度小的值將會用空格做填補。性能

CHAR 類型的一個變體是 VARCHAR 類型。它是一種可變長度的字符串類型,而且也必須帶有一個範圍指示器。優化

CHAR 和 VARCHGAR 不一樣之處在於 MYSQL 數據庫處理這個指示器的方式:CHAR 把這個大小視爲值的大小,不長度不足的狀況下就用空格補足。而 VARCHAR 類型把它視爲最大值而且只使用存儲字符串實際須要的長度(增長一個額外字節來存儲字符串自己的長度)來存儲值。因此短於指示器長度的 VARCHAR 類型不會被空格填補,但長於指示器的值仍然會被截短。編碼

由於 VARCHAR 類型能夠根據實際內容動態改變存儲值的長度,因此在不能肯定字段須要多少字符時使用 VARCHAR類型能夠大大地節約磁盤空間、提升存儲效率。但若是確切知道字符串長度,好比就在50~55之間,那就用 CHAR 由於 CHAR
類型因爲自己定長的特性使其性能要高於 VARCHAR;

時間類型

clipboard.png

int(11)最大長度是多少?

  在SQL語句中int表明你要建立字段的類型,int表明整型,11表明字段的長度
  這個11表明顯示寬度,整數列的顯示寬度與mysql須要用多少個字符來顯示該列數值,與該整數須要的存儲空間的大小都沒有關係,好比,無論設定了顯示寬度是多少個字符,bigint都要佔用8個字節。
  int是整型,(11)是指顯示字符的長度,但要加參數的,最大爲255,好比它是記錄行數的id,插入10筆資料,它就顯示00000000001 ~~~00000000010,當字符的位數超過11,它也只顯示11位,若是你沒有加那個讓它未滿11位就前面加0的參數,它不會在前面加0
  聲明整型數據列時,咱們能夠爲它指定個顯示寬度M(1~255),如INT(5),指定顯示寬度爲5個字符,若是沒有給它指定顯示寬度,MySQL會爲它指定一個默認值。顯示寬度只用於顯示,並不能限制取值範圍和佔用空間,如:INT(3)會佔用4個字節的存儲空間,而且容許的最大值也不會是999,而是 INT整型所容許的最大值。
在整型數據列後加上UNSIGNED屬性能夠禁止負數,取值從0開始spa

varchar最大長度是多少?

一. varchar存儲規則:
  4.0版本如下,varchar(20),指的是20字節,若是存放UTF8漢字時,只能存6個(每一個漢字3字節)
5.0版本以上,varchar(20),指的是20字符,不管存放的是數字、字母仍是UTF8漢字(每一個漢字3字節),均可以存放20個,最大大小是65532字節
Mysql4中最大也不過是20個字節,可是Mysql5根據編碼不一樣,存儲大小也不一樣。 code

在varchar(M)類型的數據列裏,每一個值只佔用恰好夠用的字節再加上一個用來記錄其長度的字節(即總長度爲L+1字節).blog

varchar最大長度是多少?
  這不是一個固定的數字。先簡要說明一下限制規則。
  一、限制規則
  字段的限制在字段定義的時候有如下規則:
  a) 存儲限制
  varchar 字段是將實際內容單獨存儲在聚簇索引以外,內容開頭用1到2個字節表示實際長度(長度超過255時須要2個字節),所以最大長度不能超過65535。
  b) 編碼長度限制
  字符類型若爲gbk,每一個字符最多佔2個字節,最大長度不能超過32766;
  字符類型若爲utf8,每一個字符最多佔3個字節,最大長度不能超過21845。
  若定義的時候超過上述限制,則varchar字段會被強行轉爲text類型,併產生warning。
  c) 行長度限制
  致使實際應用中varchar長度限制的是一個行定義的長度。 MySQL要求一個行的定義長度不能超過65535。若定義的表長度超過這個值,則提示
  ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. You have to change some columns to TEXT or BLOBs。
  二、計算例子
  舉兩個例說明一下實際長度的計算。
  a) 若一個表只有一個varchar類型,如定義爲
  create table t4(c varchar(N)) charset=gbk;
  則此處N的最大值爲(65535-1-2)/2= 32766。
  減1的緣由是實際行存儲從第二個字節開始’;
  減2的緣由是varchar頭部的2個字節表示長度;
  除2的緣由是字符編碼是gbk。索引

字段類型總結

1.關於手機號,推薦用char(11),char(11)在查詢上更有效率,由於手機號是一個活躍字段參與邏輯會不少。

合理的選擇數據類型

  • 選擇合理範圍內最小的

咱們應該選擇最小的數據範圍,由於這樣能夠大大減小磁盤空間及磁盤I/0讀寫開銷,減小內存佔用,減小CPU的佔用率

  • 選擇相對簡單的數據類型

數字類型相對字符串類型要簡單的多,尤爲是在比較運算時,因此咱們應該選擇最簡單的數據類型。

  • 列屬性儘可能爲NOT NULL

爲何這麼說呢,由於MYSQL對NULL字段索引優化不佳,增長更多的計算難度,同時在保存與處理NULL類形時,也會作更多的工做,因此從效率上來講,不建議用過多的NULL。有些值他確實有可能沒有值,怎麼辦呢?解決方法是數值弄用整數0,字符串用空來定義默認值便可

相關文章
相關標籤/搜索