【MySQL】 常見數據類型

MySQL常見數據類型
    • 1.整數類型
    • 2.浮點數類型
    • 3.定點數類型
    • 4.bit類型
    • 5.字符串類型
      • 5.1char和varchar類型
      • 5.2日期類型和時間類型
      • 5.3enum和set類型

1.整數類型

整數類型默認都是有符號整數

類型名稱

字節數

類型說明

tinyint

1

帶符號的范圍-128127,無符號范圍0255

smallint

2

帶符號的范圍-2^15 ~ 2^15 - 1,無符號 2^16 - 1

mediumint

3

帶符號的范圍-2^23 ~ 2^23 - 1,無符號 2^24 - 1

int

4

帶符號的范圍-2^31 ~ 2^31 - 1,無符號 2^32 - 1

bigint

8

帶符號的范圍-2^63 ~ 2^63 - 1,無符號 2^64 - 1

整數類型的可選屬性有三個:

  • M : 表示顯示寬度,M的取值范圍是(0, 255)。例如,int(6):當數據寬度小于6位的時候在數字前面需要用字符填滿寬度。該項功能需要配合“ ZEROFILL ”使用,表示用“0”填滿寬度,否則指定顯示寬度無效。
  • UNSIGNED : 無符號類型(非負),所有的整數類型都有一個可選的屬性UNSIGNED(無符號屬性),無符號整數類型的最小取值為0。所以,如果需要在MySQL數據庫中保存非負整數值時,可以將整數類型設置為無符號類型。
  • ZEROFILL : 0填充,(如果某列是ZEROFILL,那么MySQL會自動為當前列添加UNSIGNED屬性),如果指定了ZEROFILL只是表示不夠M位時,用0在左邊填充,如果超過M位,只要不超過數據存儲范圍即可。在 int(M) 中,M 的值跟 int(M) 所占多少存儲空間并無任何關系。 int(3)、int(4)、int(8) 在磁盤上都是占用 4 bytes 的存儲空間。也就是說,int(M),必須和UNSIGNED ZEROFILL一起使用才有意義。如果整數值超過M位,就按照實際位數存儲。只是無須再用字符 0 進行填充

使用示例:

創建test表

create table test(num int(6) zerofill);

插入數據:

insert into test values(22);

查看數據:

select num from test;

結果:

mysql> select num from test-> ;
+--------+
| num    |
+--------+
| 000022 |
+--------+
1 row in set (0.00 sec)

2.浮點數類型

浮點數和定點數類型的特點是可以處理小數 ,你可以把整數看成小數的一個特例,因此,浮點數和定點數的使用場景,比整數大多了。 MySQL支持的浮點數類型,分別是 FLOAT、DOUBLE、REAL

類型名稱

字節數

類型說明

float

4

表示單精度浮點數

double

8

表示雙精度浮點數

real

8/4

默認就是 double。如果把 SQL 模式設定為啟用“ REAL_AS_FLOAT ”,那么,MySQL 就認為real 是 float

使用示例:

語法:

float[(m, d)] [unsigned] : M指定顯示長度,d指定小數位數,占用空間4個字節

小數:有符號float(4,2)表示的范圍是-99.99 ~ 99.99,無符號的float(4,2)表示的范圍是0 ~ 99.99,MySQL在保存值時會進行四舍五入

#創建表
create table tt6(id int, salary float(4,2));
#插入數據
insert into tt6 values(100, -99.99);
insert into tt6 values(101, -99.991); #多的這一點被拿掉了
#查詢數據
select id, salary from tt6;
#結果
+------+--------+
| id | salary |
+------+--------+
| 100 | -99.99 |
| 101 | -99.99 |
+------+--------+
2 rows in set (0.00 sec)

3.定點數類型

MySQL中的定點數類型只有 DECIMAL 一種類型。

語法:

decimal(M, D) [unsigned] : 定點數M指定長度,D表示小數點的位數
  • decimal(5,2) 表示的范圍是 -999.99 ~ 999.99

  • decimal(5,2) unsigned 表示的范圍 0 ~ 999.99 decimal和float很像,但是有區別:float和decimal表示的精度不一樣

  • 0<=M<=65,0<=D<=30,D<M

DECIMAL(M,D)的最大取值范圍與DOUBLE類型一樣,但是有效的數據范圍是由M和D決定的。DECIMAL 的存儲空間并不是固定的,由精度值M決定,總共占用的存儲空間為M+2個字節。也就是說,在一些對精度要求不高的場景下,比起占用同樣字節長度的定點數,浮點數表達的數值范圍可以更大一些。定點數在MySQL內部是以 字符串 的形式進行存儲,這就決定了它一定是精準的。當DECIMAL類型不指定精度和標度時,其默認為DECIMAL(10,0)。當數據的精度超出了定點數類型的精度范圍時,則MySQL同樣會進行四舍五入處理

建議:如果希望小數的精度高,推薦使用decimal

4.bit類型

基本語法:

bit[(M)] : 位字段類型。M表示每個值的位數,范圍從1到64。如果M被忽略,默認為1

使用示例:

#創建表
create table tt4(id int, a bit(8));
#插入數據
insert into tt4 values(10, 10);
#查詢數據
select * from tt4; 
#結果
+------+------+
| id | a 	  |
+------+------+
| 10 | 		  |
+------+------+
1 row in set (0.00 sec)
#發現很怪異的現象,a的數據10沒有出現

bit使用的注意事項:

bit字段在顯示時,是按照ASCII碼對應的值顯示

#插入數據
insert into tt4 values(65, 65);
#查詢結果
select * from tt4;
+------+------+
| id | a      |
+------+------+
| 10 |    	  |
| 65 | A 	  |
+------+------+

5.字符串類型

5.1char和varchar類型

類型名稱

類型說明

char

固定長度字符串,L是可以存儲的長度,單位為字符,最大長度值可以為255

varchar

可變長度字符串,L表示字符長度,最大長度65535個字節

char語法:

char(L)

char使用示例:

#創建表
create table tt9(id int, name char(2));
#插入數據
insert into tt9 values(100, 'ab');
insert into tt9 values(101, '中國');
#查詢結果
mysql> select * from tt9;
+------+--------+
| id | name 	|
+------+--------+
| 100 | ab 		|
| 101 | 中國 	   |
+------+--------+

說明:

  • char(2) 表示可以存放兩個字符,可以是字母或漢字,但是不能超過2個, 最多只能是255

varchar語法:

varchar(L)

varchar使用示例:

#創建表
create table tt10(id int ,name varchar(6)); #表示這里可以存放6個字符
#插入數據
insert into tt10 values(100, 'hello');
insert into tt10 values(100, '我愛你,中國');
#查詢結果
mysql> select * from tt10;
+------+--------------------+
| id | name 				|
+------+--------------------+
| 100 | hello 				|
| 100 | 我愛你,中國 			|
+------+--------------------+

說明:

關于varchar(len),len到底是多大,這個len值,和表的編碼密切相關:

  • varchar長度可以指定為0到65535之間的值,但是有1 - 3 個字節用于記錄數據大小,所以說有效字節數是65532
  • 當我們的表的編碼是utf8時,varchar(n)的參數n最大值是65532/3=21844[因為utf中,一個字符占用3個字節],如果編碼是gbk,varchar(n)的參數n最大是65532/2=32766(因為gbk中,一個字符占用2字節)

如何選擇定長或變長字符串?

  1. 如果數據確定長度都一樣,就使用定長(char),比如:身份證,手機號,md5
  2. 如果數據長度有變化,就使用變長(varchar), 比如:名字,地址,但是你要保證最長的能存的進去。定長的磁盤空間比較浪費,但是效率高。
  3. 變長的磁盤空間比較節省,但是效率低。
  4. 定長的意義是,直接開辟好對應的空間
  5. 變長的意義是,在不超過自定義范圍的情況下,用多少,開辟多少
5.2日期類型和時間類型

常用的日期有如下三個:

  • date :日期 ‘yyyy-mm-dd’ ,占用三字節
  • datetime 時間日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范圍從 1000 到 9999 ,占用八字節
  • timestamp :時間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss 格式和 datetime完全一致,占用四字節

使用示例:

#創建表
create table birthday (t1 date, t2 datetime, t3 timestamp);
#插入數據
insert into birthday(t1,t2,t3) values('1997-7-1','2024-12-1 12:1:1','2024-12-1 12:1:1');
#查詢結果
mysql> select * from birthday;
+------------+---------------------+---------------------+
| t1         | t2                  | t3                  |
+------------+---------------------+---------------------+
| 1997-07-01 | 2024-12-01 12:01:01 | 2024-12-01 12:01:01 |
+------------+---------------------+---------------------+
1 row in set (0.00 sec)

TIMESTAMP類型通常占用4個字節的存儲空間,而DATETIME類型則需要8個字節。TIMESTAMP類型的精度可以指定,范圍從0到6,默認精度為6。這意味著TIMESTAMP可以存儲到微秒級別的時間戳,而DATETIME類型則不能指定精度

5.3enum和set類型

類型名稱

類型說明

enum:枚舉

單選類型

set:集合

多選類型

  • ENUM類型也叫作枚舉類型,ENUM類型的取值范圍需要在定義字段時進行指定。設置字段值時,ENUM類型只允許從成員中選取單個值,不能一次選取多個值。其所需要的存儲空間由定義ENUM類型時指定的成員個數決定。當ENUM類型包含1~255個成員時,需要1個字節的存儲空間;當ENUM類型包含256~65535個成員時,需要2個字節的存儲空間;ENUM類型的成員個數的上限為65535個

  • SET表示一個字符串對象,可以包含0個或多個成員,但成員個數的上限為 64 。設置字段值時,可以取取值范圍內的 0 個或多個值。當SET類型包含的成員個數不同時,其所占用的存儲空間也是不同的。SET類型在存儲數據時成員個數越多,其占用的存儲空間越大。注意:SET類型在選取成員時,可以一次選擇多個成員,這一點與ENUM類型不同

使用示例:

有一個調查表votes,需要調查人的喜好, 比如(登山,游泳,籃球,武術)中去選擇(可以多選),使用set類型,(男,女)[單選] ,使用enum類型

#創建表

create table votes(
username varchar(30),
hobby set('登山','游泳','籃球','武術'),
gender enum('男','女'));

#插入數據

insert into votes values('雷鋒', '登山,武術', '男');
insert into votes values('Juse','登山,武術',2);

#查詢

select * from votes where gender=2;

#查詢結果

+----------+---------------+--------+
| username | hobby 		   | gender |
+----------+---------------+--------+
| Juse 	   | 登山,武術       |女 	    |
+----------+---------------+--------+

假如表中有這些數據,想查找所有喜歡登山的人:

+-----------+---------------+--------+
| username  | hobby         | gender |
+-----------+---------------+--------+
| 雷鋒       | 登山,武術      | 男     |
| Juse      | 登山,武術       | 女     |
| LiLei     | 登山           | 男     |
| LiLei     | 籃球           | 男     |
| HanMeiMei | 游泳           | 女     |
+-----------+---------------+--------+

使用如下查詢語句:

select * from votes where hobby='登山';

結果:

+----------+--------+--------+
| username | hobby  | gender |
+----------+--------+--------+
| LiLei    | 登山    | 男     |
+----------+--------+--------+

可以發現并不能查詢出所有喜歡登山的人

集合查詢使用find_ in_ set函數:

語法:

find_in_set(sub,str_list) :如果 sub 在 str_list 中,則返回下標;如果不在,返回0,str_list 用逗號分隔的字符串

查詢愛好登山的人:

mysql> select * from votes where find_in_set('登山', hobby);
+----------+---------------+--------+
| username | hobby         | gender |
+----------+---------------+--------+
| 雷鋒 	  | 登山,武術      |  男     |
| Juse     | 登山,武術       | 女     |
| LiLei    | 登山           | 男     |
+----------+---------------+--------+

MySQL的常用數據類型,就分享到這里了,如有錯誤還望指出,886!!!

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

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

相關文章

DeepSeek 部署中的常見問題及解決方案

DeepSeek 作為一款智能語義搜索框架&#xff0c;其本地化部署在實際操作中可能因環境配置、權限管理、硬件資源等因素遇到多種問題。本文結合當前市面上的實踐經驗&#xff0c;整合了部署中的常見問題及解決方案&#xff0c;幫助用戶高效排查和優化部署流程。 一、權限不足問題…

《機器學習數學基礎》補充資料:求解線性方程組的克拉默法則

《機器學習數學基礎》中并沒有將解線性方程組作為重點&#xff0c;只是在第2章2.4.2節做了比較完整的概述。這是因為&#xff0c;如果用程序求解線性方程組&#xff0c;相對于高等數學教材中強調的手工求解&#xff0c;要簡單得多了。 本文是關于線性方程組的拓展&#xff0c;供…

Jenkins介紹

什么是Jenkins Jenkins 是一個開源的自動化服務器&#xff0c;主要用于持續集成和持續交付&#xff08;CI/CD&#xff09;。它幫助開發團隊自動化構建、測試和部署軟件&#xff0c;從而提高開發效率和軟件質量。 如果一個系統是前后端分離的開發模式&#xff0c;在集成階段會需…

module ‘cv2.dnn‘ has no attribute ‘DictValue‘解決辦法

module ‘cv2.dnn‘ has no attribute ‘DictValue‘解決辦法 pip install opencv-python4.7.0.72 -i https://pypi.tuna.tsinghua.edu.cn/simple 測試&#xff1a; python -c"import cv2"

【全棧】SprintBoot+vue3迷你商城-細節解析(2):分頁

【全棧】SprintBootvue3迷你商城-細節解析&#xff08;2&#xff09;&#xff1a;分頁 往期的文章都在這里啦&#xff0c;大家有興趣可以看一下 后端部分&#xff1a; 【全棧】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全棧】SprintBootvue3迷你商城&#xff08;…

kubeadm拉起的k8s集群證書過期的做法集群已奔潰也可以解決

kubeadm拉起的k8s集群證書過期的做法 這個是很久之前遇到的了&#xff0c;今天有空&#xff08;心血來潮&#xff09;就都回憶回憶寫在這里為愛發光&#xff0c;部分內容來自arch先生&#xff08;死黨&#xff09;的幫助。有時候有很多部門提了建k8s的需求&#xff0c;有些是臨…

Webpack 基礎入門

一、Webpack 是什么 Webpack 是一款現代 JavaScript 應用程序的靜態模塊打包工具。在 Web 開發中&#xff0c;我們的項目會包含各種類型的文件&#xff0c;如 JavaScript、CSS、圖片等。Webpack 可以將這些文件打包成一個或多個文件&#xff0c;以便在瀏覽器中高效加載。它就像…

torchsparse安裝過程的問題

1、項目要求torchsparse githttps://github.com/mit-han-lab/torchsparse.gitv1.4.0 2、torch1.8.1cu111 nvcc--version&#xff1a;11.1 這個版本的cuda匹配的gcc、g經常是7.5。設置為7.5. &#xff08;這個gcc、g版本修改不一定&#xff0c;可以先進行后面的&#xff0c…

嵌入式音視頻開發(二)ffmpeg音視頻同步

系列文章目錄 嵌入式音視頻開發&#xff08;零&#xff09;移植ffmpeg及推流測試 嵌入式音視頻開發&#xff08;一&#xff09;ffmpeg框架及內核解析 嵌入式音視頻開發&#xff08;二&#xff09;ffmpeg音視頻同步 嵌入式音視頻開發&#xff08;三&#xff09;直播協議及編碼器…

iOS App的啟動與優化

App的啟動流程 App啟動分為冷啟動和熱啟動 冷啟動&#xff1a;從0開始啟動App熱啟動&#xff1a;App已經在內存中&#xff0c;但是后臺還掛著&#xff0c;再次點擊圖標啟動App。 一般對App啟動的優化都是針對冷啟動。 App冷啟動可分為三個階段&#xff1a; dyld&#xff1a…

oppo,湯臣倍健,康冠科技25屆春招內推

oppo&#xff0c;湯臣倍健&#xff0c;康冠科技25屆春招內推 ①康冠科技25屆春招 【職位】算法、軟件、硬件、技術&#xff0c;結構設計&#xff0c;供應鏈&#xff0c;產品&#xff0c;職能&#xff0c;商務 【一鍵內推】https://sourl.cn/2Mm9Lk 【內推碼】EVBM88 ②湯臣倍健…

centos 9 時間同步服務

在 CentOS 9 中&#xff0c;默認的時間同步服務是 chrony&#xff0c;而不是傳統的 ntpd。 因此&#xff0c;建議使用 chrony 來配置和管理時間同步。 以下是使用 chrony 配置 NTP 服務的步驟&#xff1a; 1. 安裝 chrony 首先&#xff0c;確保系統已安裝 chrony。 在 CentOS…

解鎖 Python 導入系統:從基礎到進階的深度指南

本文全面解讀 Python 導入系統&#xff0c;從導入機制的基礎概念&#xff0c;如模塊、包的導入方式&#xff0c;到查找、加載模塊的詳細過程&#xff0c;再到導入系統的高級特性和應用場景&#xff0c;通過豐富示例、直觀圖表和對比分析&#xff0c;助你深入理解并熟練運用導入…

DDoS技術解析

這里是Themberfue 今天我們不聊別的&#xff0c;我們聊聊著名的網絡攻擊手段之一的 DDoS&#xff0c;看看其背后的技術細節。 DoS 了解 DDoS 前&#xff0c;先來講講 DoS 是什么&#xff0c;此 DoS 而不是 DOS 操作系統啊。1996年9月6日&#xff0c;世界第三古老的網絡服務提供…

docker安裝kafka,并通過springboot快速集成kafka

目錄 一、docker安裝和配置Kafka 1.拉取 Zookeeper 的 Docker 鏡像 2.運行 Zookeeper 容器 3.拉取 Kafka 的 Docker 鏡像 4.運行 Kafka 容器 5.下載 Kafdrop 6.運行 Kafdrop 7.如果docker pull wurstmeister/zookeeper或docker pull wurstmeister/kafka下載很慢&#x…

C++ 與 Java 的對比分析:除法運算中的錯誤處理

博客主頁&#xff1a; [小????????] 本文專欄: Java 文章目錄 &#x1f4af;前言&#x1f4af;C中的除法錯誤處理&#x1f4af;Java中的除法錯誤處理&#x1f4af;C與Java錯誤處理的對比&#x1f4af;錯誤處理的優化和實踐&#x1f4af;小結 &#x1f4af;前言 在…

LLM之循環神經網絡(RNN)

在人工智能的領域中&#xff0c;神經網絡是推動技術發展的核心力量。今天&#xff0c;讓我們深入探討循環神經網絡&#xff08;RNN&#xff09; 一、神經網絡基礎 &#xff08;1&#xff09;什么是神經網絡 神經網絡&#xff0c;又稱人工神經網絡&#xff0c;其設計靈感源于人…

SQL sever數據導入導出實驗

1.創建數據庫TCP-H &#xff08;1&#xff09;右鍵“數據庫”&#xff0c;點擊“新建數據庫”即可 &#xff08;2&#xff09;用sql語言創建&#xff0c;此處以創建數據庫DB_test為例&#xff0c;代碼如下&#xff1a; use master;go--檢查在當前服務器系統中的所有數據里面…

讓編程變成一種享受-明基RD320U顯示器

引言 作為一名有著多年JAVA開發經驗的從業者&#xff0c;在工作過程中&#xff0c;顯示器的重要性不言而喻。它不僅是我們與代碼交互的窗口&#xff0c;更是影響工作效率和體驗的關鍵因素。在多年的編程生涯中&#xff0c;我遇到過各種各樣的問題。比如&#xff0c;在進行代碼…

計算機網絡(涵蓋OSI,TCP/IP,交換機,路由器,局域網)

一、網絡通信基礎 &#xff08;一&#xff09;網絡通信的概念 網絡通信是指終端設備之間通過計算機網絡進行的信息傳遞與交流。它類似于現實生活中的物品傳遞過程&#xff1a;數據&#xff08;物品&#xff09;被封裝成報文&#xff08;包裹&#xff09;&#xff0c;通過網絡…