2Python全棧之路系列之MysQl基本數據類型

Python全棧之路系列之MySQL基本數據類型


MySQL中定義數據字段的類型對你數據庫的優化是非常重要的。

MySQL支持多種類型,大致可以分為三類:

  1. 數字類型

  2. 日期和時間類型

  3. 字符串類型


數字類型

類型大小用途
BIT-二進制
TINYINT1字節小整數值
INT or INTEGER4字節大整數值
BIGINT8字節極大整數值
DECIMAL對DECIMAL(M,D) ,如果M>D,為M+2否則為D+2小數值
FLOAT4字節單精度浮點數值
DOUBLE8字節雙精度浮點數值
BOOL, BOOLEAN-布爾值
  • BIT[(M)]

二進制位(101001),m表示二進制位的長度(1-64),默認m=1

  • TINYINT[(M)] [UNSIGNED] [ZEROFILL]

小整數,數據類型用于保存一些范圍的整數數值范圍:

范圍(有符號)范圍(無符號)
-128 to 1270 to 255

特別的: MySQL中無布爾值,使用tinyint(1)構造。

  • INT[(M)] [UNSIGNED] [ZEROFILL]

整數,數據類型用于保存一些范圍的整數數值范圍:

范圍(有符號)范圍(無符號)
-2147483648 to 21474836470 to 4294967295

整數類型中的m僅用于顯示,對存儲范圍無限制。例如:?int(5),當插入數據2時,select時數據顯示為:00002

  • BIGINT[(M)] [UNSIGNED] [ZEROFILL]

大整數,數據類型用于保存一些范圍的整數數值范圍:

范圍(有符號)范圍(無符號)
-9223372036854775808 to 92233720368547758070 to 18446744073709551615
  • DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

準確的小數值,m是數字總個數(負號不算),d是小數點后個數。 m最大值為65,d最大值為30。

特別的:對于精確數值計算時需要用此類型decaimal能夠存儲精確值的原因在于其內部按照字符串存儲。

  • FLOAT[(M,D)] [UNSIGNED] [ZEROFILL]

單精度浮點數(非準確小數值),m是數字總個數,d是小數點后個數。

  • 無符號:
    -3.402823466E+38 to -1.175494351E-38,
    0
    1.175494351E-38 to 3.402823466E+38

  • 有符號:
    0
    1.175494351E-38 to 3.402823466E+38

數值越大,越不準確

  • DOUBLE[(M,D)] [UNSIGNED] [ZEROFILL]

雙精度浮點數(非準確小數值),m是數字總個數,d是小數點后個數。

  • 無符號:
    -1.7976931348623157E+308 to -2.2250738585072014E-308
    0
    2.2250738585072014E-308 to 1.7976931348623157E+308

  • 有符號:
    0
    2.2250738585072014E-308 to 1.7976931348623157E+308

數值越大,越不準確

  • BOOL, BOOLEAN

這些類型是TINYINT的同義詞。零值被認為是假的。非零值被認為是正確的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
mysql>?SELECT?IF(0,?'true',?'false');
+------------------------+
|?IF(0,?'true',?'false')?|
+------------------------+
|?false??????????????????|
+------------------------+
1?row?in?set?(0.00?sec)
mysql>?SELECT?IF(1,?'true',?'false');
+------------------------+
|?IF(1,?'true',?'false')?|
+------------------------+
|?true???????????????????|
+------------------------+
1?row?in?set?(0.00?sec)
mysql>?SELECT?IF(2,?'true',?'false');
+------------------------+
|?IF(2,?'true',?'false')?|
+------------------------+
|?true???????????????????|
+------------------------+
1?row?in?set?(0.00?sec)

然而,真假的值僅僅是為了分別為1和0,別名,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
mysql>?SELECT?IF(0?=?FALSE,?'true',?'false');
+--------------------------------+
|?IF(0?=?FALSE,?'true',?'false')?|
+--------------------------------+
|?true???????????????????????????|
+--------------------------------+
1?row?in?set?(0.01?sec)
mysql>?SELECT?IF(1?=?TRUE,?'true',?'false');
+-------------------------------+
|?IF(1?=?TRUE,?'true',?'false')?|
+-------------------------------+
|?true??????????????????????????|
+-------------------------------+
1?row?in?set?(0.00?sec)
mysql>?SELECT?IF(2?=?TRUE,?'true',?'false');
+-------------------------------+
|?IF(2?=?TRUE,?'true',?'false')?|
+-------------------------------+
|?false?????????????????????????|
+-------------------------------+
1?row?in?set?(0.00?sec)
mysql>?SELECT?IF(2?=?FALSE,?'true',?'false');
+--------------------------------+
|?IF(2?=?FALSE,?'true',?'false')?|
+--------------------------------+
|?false??????????????????????????|
+--------------------------------+
1?row?in?set?(0.00?sec)

時間類型

表示時間值的日期和時間類型為DATETIME、DATE、TIMESTAMP、TIME和YEAR。
每個時間類型有一個有效值范圍和一個”零”值,當指定不合法的MySQL不能表示的值時使用”零”值。

類型大小(字節)格式用途
DATE3YYYY-MM-DD日期值
DATETIME8YYYY-MM-DD HH:MM:SS混合日期和時間值
TIMESTAMP8YYYYMMDD HHMMSS混合日期和時間值,時間戳
TIME3HH:MM:SS時間值或持續時間
YEAR1YYYY年份值
類型范圍
DATE'1000-01-01' to '9999-12-31'
DATETIME'1000-01-01 00:00:00.000000' to '9999-12-31 23:59:59.999999'
TIMESTAMP'1970-01-01 00:00:01.000000' UTC to '2038-01-19 03:14:07.999999'
TIME'-838:59:59.000000' to '838:59:59.000000'
YEAR1901 to 2155

字符串類型

類型大小(字節)用途
CHAR(M)0 to 255固定長度的字符串,即使數據小于M長度,也會占用M長度
VARCHAR(M)0 to 65535一個可變長度的字符串,M表示在字符的最大列長度
TEXT[(M)]0 to 65535長文本列
MEDIUMTEXT0 to 16777215中等長度文本列
LONGTEXT4294967295 or 4GB極大文本列
ENUM('value1','value2',...)
枚舉類型
SET('value1','value2',...)
集合類型
  • VARCHAR(M)注

雖然VARCHAR(M)使用起來較為靈活,但是從整個系統的性能角度來說,CHAR(M)數據類型的處理速度更快,有時甚至可以超出VARCHAR(M)處理速度的50%。因此,用戶在設計數據庫時應當綜合考慮各方面的因素,以求達到最佳的平衡

  • ENUM('value1','value2',...)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE?TABLE?shirts?(
????name?VARCHAR(40),
????size?ENUM('x-small',?'small',?'medium',?'large',?'x-large')
);
INSERT?INTO?shirts?(name,?size)?VALUES?('dress?shirt','large'),?('t-shirt','medium'),
??('polo?shirt','small');
???
mysql>?SELECT?name,?size?FROM?shirts?WHERE?size?=?'medium';
+---------+--------+
|?name????|?size???|
+---------+--------+
|?t-shirt?|?medium?|
+---------+--------+
1?row?in?set?(0.00?sec)
UPDATE?shirts?SET?size?=?'small'?WHERE?size?=?'large';
COMMIT;
  • SET('value1','value2',...)

SET是一個字符串對象,它可以有0更多個值,每個值均必須選自一個允許值列表中,該列表在表創建時被指定。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
mysql>?CREATE?TABLE?myset?(col?SET('a',?'b',?'c',?'d'));
Query?OK,?0?rows?affected?(0.01?sec)
mysql>?INSERT?INTO?myset?(col)?VALUES?('a,d'),?('d,a'),?('a,d,a'),?('a,d,d'),?('d,a,d');
Query?OK,?5?rows?affected?(0.01?sec)
Records:?5??Duplicates:?0??Warnings:?0
mysql>?SELECT?col?FROM?myset;
+------+
|?col??|
+------+
|?a,d??|
|?a,d??|
|?a,d??|
|?a,d??|
|?a,d??|
+------+
5?rows?in?set?(0.00?sec)









本文轉自 Edenwy? 51CTO博客,原文鏈接:http://blog.51cto.com/edeny/1925859,如需轉載請自行聯系原作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/540174.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/540174.shtml
英文地址,請注明出處:http://en.pswp.cn/news/540174.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

[轉載] JAVA筆記_(Day04,Day05)函數數組

參考鏈接: 了解Java中的數組IndexOutofbounds異常 文章目錄 函數定義練習誤區重載(overload)重載選擇題練習函數的內存調用問題 數組定義數組的內存圖解數組的常見問題應用求和最大值將數組轉成字符串查表法轉十六進制查表版(十六…

VDI序曲二 RemotoAPP部署

首先,我們需要準備如下角色:沿用VDI序曲一的2臺物理服務器以及角色我們在物理服務器1的hyper-v上,我們利用之前我介紹的“服務器虛擬化之準備母盤VHD”的方法再創建如下虛擬機:WIN-RDAPP;WIN-RDWA;WIN-RDCB…

[轉載] Java ArrayList toArray(T[] a) 解惑

參考鏈接&#xff1a; Java中的Array vs ArrayList 先看一個小的代碼片段 ArrayList<Integer> arrayList new ArrayList<>(); Collections.addAll(arrayList, 11, 21, 31, 41, 51); Integer[] a new Integer[0]; Integer[] b new Integer[arrayList.size()]; …

CentOS7使用firewalld打開關閉防火墻與端口(轉載)

1、firewalld的基本使用 啟動&#xff1a; systemctl start firewalld 查看狀態&#xff1a; systemctl status firewalld 停止&#xff1a; systemctl disable firewalld 禁用&#xff1a; systemctl stop firewalld 2.systemctl是CentOS7的服務管理工具中主要的工具&#xff…

多任務管理類 MutilTaskManager

計算和計算所需的數據能被較為平均的非配到若干task的時候&#xff0c;下面的任務管理類可以提供在大數據大計算量的情況下非精確的控制task的執行數量來限制計算量和內存占用量.下面是代碼&#xff08;非線程安全版本&#xff09;&#xff1a; public class MutilTaskManager{…

[轉載] Scanner和bufferreader讀取控制臺字符的區別

參考鏈接&#xff1a; Java中Scanner和BufferReader類之間的區別 從開始學習Java就用了scanner&#xff0c;因為比較簡單每當遇到空格鍵或者換行鍵則讀取下一個字符&#xff0c;一般用法 while(input.hasNextInt()){ int n input.nextInt(); int t input.nextInt(); int c …

Node.js meitulu圖片批量下載爬蟲1.051

原有1.05版程序沒有斷點續傳模式&#xff0c;現在在最近程序基礎上改寫一版1.051. // // meitulu圖片批量下載爬蟲1.051 // 用最近的斷點續傳框架改寫原有1.05版程序 // 2017年11月21日 //// 內置https模塊 var httpsrequire("https");// 內置http模塊 var httprequi…

[轉載] Java實現歸并排序(超詳細,新手請進)

參考鏈接&#xff1a; Java中將數組合并為的新數組 歸并排序 大家好&#xff0c;這是我第一次在CSDN上寫東西&#xff0c;因為我一直覺得有需要就去找別人的blog看看就好&#xff0c;但我發現自己寫出來的東西確實能加深記憶。我半路出家&#xff0c;屬實是個菜鳥&#xff0…

centos6設置靜態IP

#編輯配置文件,添加修改以下內容 vim /etc/sysconfig/network-scripts/ifcfg-eth0 BOOTPROTOstatic #啟用靜態IP地址 ONBOOTyes #開啟開機自動啟用網絡連接 IPADDR192.168.21.129 #設置IP地址 NETMASK255.255.255.0 #設置子網掩碼 GATEWAY192.168…

[轉載] 1022 D進制的A+B (20分)【java題解】【80ms】

參考鏈接&#xff1a; Java流Stream 題解 使用 toUnsignedString&#xff08;&#xff09;即可 我有仔細讀過toUnsignedString&#xff08;&#xff09;&#xff0c;有興趣可以看看 第3章 java的基本程序設計結構【補缺學習】【注釋與數據類型】【核心技術卷I】 impor…

mysql 5.6.4以上版本innodb支持全文索引的測試

對于mysql 5.6.4以上版本innodb支持全文索引的測試 在mysql官網&#xff0c;innodb引擎在5.6.4版本提供了對全文索引的支持&#xff0c;筆者對此做了測試&#xff0c;發現對中文全文檢索的支持依然不理想&#xff0c;但卻確實提供了對英文的全文支持。 12.9.5 Full-Text Restri…

[轉載] Java字符串分割方法

參考鏈接&#xff1a; Java中的StringTokenizer方法的示例 2 [sizemedium]1.用split()方法進行分割&#xff0c;分割開的子字符串放入數組&#xff0c;然后進行處理。 示例代碼如下&#xff1a; public class SplitTest { /** * param args * author colin */ …

[轉載] Java StringBuilder StringJoiner

參考鏈接&#xff1a; 何時在StringBuilder上使用StringJoiner 1. StringBuilder Java編譯器對String做了特殊處理&#xff0c;使得我們可以直接用拼接字符串。 雖然可以直接拼接字符串&#xff0c;但是&#xff0c;在循環中&#xff0c;每次循環都會創建新的字符串對象&a…

EMC VMAX的磁盤構成,fast policy(重要)

首先是流程&#xff0c; 不同種類的磁盤&#xff08;sata&#xff0c;fc&#xff0c;flah&#xff09;->disk group->raid->DATA volume->thin pool->TDEV and BCVDEV (lun) 然后細看&#xff1a; 1&#xff09; 不同種類的磁盤叫做disk&#xff0c;這是可見的物…

[轉載] Java反射是什么?看這篇絕對會了!

參考鏈接&#xff1a; Java中的util.Arrays與Reflection.Array的示例 作者&#xff1a;火星十一郎 https://www.cnblogs.com/hxsyl 一.概念 反射就是把Java的各種成分映射成相應的Java類。 Class類的構造方法是private&#xff0c;由JVM創建。 反射是java語言的一個特性…

[精講-3]Offline Domain Join

從windows 2008 ,windows 7開始起就具備脫機加入域的功能,就是它們在未連接DC的情況下,也可以加入域. 假如環境lab.com ,一臺已加入域的PC (WIN7Client) 和即將加入域的PC(win7-2) 在win7client上run下面這個命令 DC已作了一次預先的動作:創建了computer object 在win7-2上,用本…

[轉載] Java——toArray,集合轉換為數組

參考鏈接&#xff1a; 從ArrayList到Java的Array數組轉換&#xff1a;toArray()方法 package day04; import java.util.ArrayList; import java.util.Collection; /** * 集合轉換為數組 * Collection中定義了兩個方法 * Object[] toArray * <T>Y[] toArray(T[] array) …

c#匿名方法

//以下示例和說明都源于《visual c# 2005 技術內幕》 //匿名函數就是沒有名字的函數&#xff0c;是專用于委托的函數。 using System; using System.Collections.Generic; using System.Text; namespace 匿名方法 { public delegate void DelegateClass(); public dele…

[轉載] JAVA8 創建流的5種方式

參考鏈接&#xff1a; 用Java創建流的10種方法 java8中的流式操作是一個很重要的內容 1、通過 stream 方法把 List 或數組轉換為流&#xff0c;如Arr.stream()&#xff1b; //通過stream方法把List或數組轉換為流 Arrays.asList("a1", "a2", "a3&…