MySQL中的數據類型 [數值型、字符串型、時間日期型]


MySQL中的數據類型 [數值型、字符串型、時間日期型]
MySQL中各數據類型
1. 數值類型(整型)
類型 數據大小 類型 (無符號:unsigned) 數據大小 存儲空間
tinyint -128 到 127 
tinyint unsigned
0  255 
1
smallint
-32768 到 32767 smallint unsigned
0  65535  2
mediumint
-8388608  8388607
mediumint  unsigned
0  16777215
3
int 或 integer
-2147483648  2147483647 int unsigned 或 integer unsigned 0  4294967295
4
bigint
-9223372036854775808 到 9223372036854775807 bigint unsigned
0  18446744073709551615  8
2. 時間和日期類型
類型 “ 零 ” 值 存儲空間
time '00:00:00' 3
date '0000-00-00' 3
datetime '0000-00-00 00:00:00'
8
year 0000
1
timestamp 0000000000000000 4
3. 字符串類型
char與varchar的區別:
char:固定長度字符串。長度可以指定為從0到255的任何值。當保存char值時,在它們的右邊填充空格以達到指定的長度。當檢索到char值時,尾部的空格被刪除掉。
varchar:可變長度字符串。長度可以指定為0到65,535之間的值。另外varchar需要用額外的1-2個字節存儲字符串長度 。當檢索到varchar值時,尾部的空格仍然保留。因此,VARCHAR列的有效最大長度為65,532字符。
  • varchar(M):1. 當字符串長度M小於255時,用額外的1個字節來記錄長度,存儲空間L+1。[L為值的長度]
                              2. 當字符串長度M大於255時,用額外的2個字節來記錄長度,存儲空間L+2。[L為值的長度]
       char(M):存儲空間 = 指定的長度 (0 <= M <= 255)
  • 比如:char(255)和varchar(255),在存儲字符串"hello world"時:
       char會用255個字節的空間放那個11個字符;
       varchar就不會用255個,它先計算字符串長度為11,然后再加上一個記錄字符串長度的字節,一共用12個字節存儲,這樣varchar在存儲不確定長度的字符串時會大大減少存儲空間。
  • 從效率上考慮,固定長度,存儲空間一次性分配,CHAR更好(長度較短的字段:門牌號等、固定長度的字段:性別、身份證號、手機號等)。
  • 從空間上考慮,可變長度,根據長度動態調整存儲空間,VARCHAR更好。
  • 下面的表顯示了將各種字符串值保存到CHAR(4)和VARCHAR(4)列后的結果,說明了CHAR和VARCHAR之間的差別:
char(4) 存儲空間 btyes varchar(4) 存儲空間 btyes
'' '    ' 4 '' 1
'ab' 'ab  ' 4 'ab ' 3
'abcd' 'abcd' 4 'abcd' 5
'abcdefgh' 'abcd' 4 'abcd' 5
另外:
1. varchar(n):為n個字節的可變長度,且非Unicode的字符數據。n的值必須介於1與8,000之間的數值。存儲大小是輸入數據的字節的實際長度
2. nvarchar(n):為n個字符的可變長度,且Unicode字符數據。n的值必須介於1與4,000之間的數值。存儲大小是所輸入字符個數的兩倍。所輸入的數據字符長度可以為零。
4. 數值類型的存儲空間
類型 存儲空間
tinyint 1
smallint 2
mediumint 3
int,integer 4
bigint 8
float(p) 如果0 <= p <= 24為4個字節,
如果25 <= p <= 53為8個字節
double 8
decimal(M,D),numeric(M,D) 變長
bit(M) 大約(M+7)/8個字節
decimal和numeric類型在MySQL中視為相同的類型。它們用於保存必須為確切精度的值, 並且要指定 標度和 精度,例如貨幣數據。
  • 實際上小數數值只有兩種數據類型:float 和 decimal,分別是近似數值和精確數值。
  • 其他小數類型,都可以使用float和decimal來替代,例如,雙精度(double precision)數據類型等價於 float(53),real等價於float(24)。
  • numeric是 decimal的同義詞,應該避免在程序中直接使用 double precision、real和numeric,而是用 float(24) 、float(53)和decimal 代替。
5. 字符串類型的存儲空間 [L為值的長度]
類型 存儲空間 (字節)
char(M) M,0 <= M <= 255
varchar(M) L+1 或 L+2,其中L <= M 且0 <= M <= 65532
binary(M) M,0 <= M <= 255
varbinary(M) L+1個字節,其中L <= M 且0 <= M <= 255
tinyblob
tinytext
L+1個字節,其中L < 28
blob,text L+2個字節,其中L < 216
mediumblob
mediumtext
L+3個字節,其中L < 224
longblob
longtext
L+4個字節,其中L < 232
enum('value1','value2',...) 1或2個字節,取決於枚舉值的個數(最多65,535個值)
set('value1','value2',...) 1、2、3、4或者8個字節,取決於set成員的數目(最多64個成員)
VARCHAR、BLOB和TEXT類是變長類型。每個類型的存儲需求取決於列值的實際長度(用前面的表中的L表示)。
varbinary、binary、char、varchar異同:
1.
binary 與 varbinary 類型和char與varchar類型是相似的,只是他們存儲的是二進制數據,也就是說他們是包含字節流而不是字符流,他們有二進制字符的集合和順序,他們的對比,排序是基於字節的數值進行的。
binary與varbinary的最大長度和char與varchar是一樣的,只不過他們是定義 字節長度,而char和varchar對應的是 字符長度
2.
存儲和取出時對尾部空格的處理:
  char(N)用來存儲非二進制字符串,插入時,對於少於N個字符的會自動在尾部加空格,查詢時,尾部的空格就會被丟棄掉
  vachar(N) 用來存儲非二進制字符串,插入時,對於少於N個字符的不填補空格,查詢時,尾部的空格不會被丟棄掉
  binary(N)存儲二進制字符串,插入進,少於N個字節的會自動在尾部加0x00,取出時,所有的字節都保留,返回定義長度的字節長度,在比較的時候,所有的字節都是有效的,並且0x00<space (space對應的是0x20)
  varbinary在插入不會去填補0x00字節,查詢的時候也不會丟棄任何字節,在比較的時候,所有的字節都是有效的,並且0x00<space (space對應的是0x20)
3.
大小比較時:
  char與varchar的字符比較中,是忽略大小寫與最后的空格的。
       binary及varbinary的字節比較中,所有的信息都不會被忽略。
 
參考文檔:
MySql中char、varchar和nvarchar的區別:https://www.cnblogs.com/zeroingToOne/p/9568687.html
MySql中bigint、int、mediumint、smallint 和 tinyint的取值范圍:https://blog.csdn.net/iteye_7932/article/details/82399758
數據庫中char, nchar,varchar, nvarchar的差異:https://jingyan.baidu.com/article/c85b7a645639ac003bac959a.html
SQL Server 小數類型(float 和 decimal):https://www.cnblogs.com/ljhdo/p/4910699.html
mysql中varbinary、binary、char、varchar異同:https://www.cnblogs.com/zejin2008/p/6606120.html
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

<wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM