【MySQL】從零開始了解數據庫開發 --- 數據類型

在這里插入圖片描述

我不假思索地上路,
因為出發的感覺太好了,
世界突然充滿了可能性。
--- 杰克·凱魯亞克 ---

從零開始了解數據庫開發

  • MySQL中的數據類型
  • 數字類型
  • 字符串類型
  • 日期類型

MySQL中的數據類型

MySQL數據庫匯中,每一條數據都有其類型,主要分為三類:數字類型,字符串類型,日期時間類型。下面我們依次來介紹

數字類型

類型分類數據類型描述
數字類型INT整數類型,用于存儲整數。 有符號 -231 ~ 231-1
數字類型TINYINT小整數類型,用于存儲非常小的整數。有符號 -128 ~ 127
數字類型SMALLINT小整數類型,用于存儲較小的整數。 有符號 -215 ~ 215-1
數字類型MEDIUMINT中等大小整數類型,用于存儲中等大小的整數。
數字類型BIGINT大整數類型,用于存儲大整數。 有符號 -263 ~ 263-1
數字類型FLOAT[(M , D)]單精度浮點數類型,用于存儲單精度浮點數。 M指定長度,D指定小數位數
數字類型DOUBLE [(M , D)]雙精度浮點數類型,用于存儲雙精度浮點數。
數字類型DECIMAL [(M , D)]定點數類型,用于存儲精確的小數。
數字類型BIT(M)位類型。M指定位數,默認值1 ,范圍1-64

數字類型分為了整型,浮點型,位類型。創建表時可以選擇合適的數據類型進行儲存

我們先來看整型:我們創建這樣一個表在這里插入圖片描述
我們插入一下age這個數據:在這里插入圖片描述
可以看到對于tinyint類型,超出其范圍的數據是不能被插入到數據表中的。如果是unsigned tinyint類型呢
在這里插入圖片描述
對于無符號的,返回就是0~255,超出范圍的數據就不能被儲存。對于其他整型類型也是一樣的。
在這里插入圖片描述
這個對于非法數據插入時的保持攔截是mysql的一個重要特性,在c/c++中,出現這種超出范圍的存儲char c = 123546,編譯器不一定會報錯,可能會優化進行截斷,c儲存的值就不是我們賦予的值。如果數據庫也這么處理,那么數據庫中的數據將變得不可信!所以這種攔截可以保證插入到數據庫中的數據一定是合法的!所以:數據類型本身也是一種約束

注意:盡量不使用unsigned,對于int類型可能存放不下的數據,int unsigned同樣可能存放不下,與其如此,還不如設計時,將int類型提升為bigint類型 但是也一定要注意使用合適的類型,對于數據庫龐大的數據,每一個都浪費一點,那么會造成很大的資源浪費!

再來看字節類型BIT(M),我們創建一個表:在這里插入圖片描述
在這里插入圖片描述
可以看到超出1位的數值不能被插入。

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

創建一張這個表
在這里插入圖片描述
我們插入幾行數據在這里插入圖片描述
通過這個插入可以發現,對于整數部分超出M-d位的是不能被存儲的,如果小數部分超出,則會進行四舍五入保值。注意四舍五入后如果超出范圍,也會被攔截。對于浮點型的無符號類型,是對儲存類型直接去掉負數,儲存的上限不會變。

當把數據類型改為float時,如果數值超出其儲存范圍,會出現損失精度的現象:
在這里插入圖片描述
對于float無法儲存的數據,這里建議使用decimal。
在這里插入圖片描述
我們建立一個這樣的表,插入同樣的數據:

在這里插入圖片描述
decimal的精度顯然更高!

decimal整數最大位數m為65。支持小數最大位數d是30。如果d被省略,默認為0.如果m被省略,默認是10。
建議:如果希望小數的精度高,推薦使用decimal。

字符串類型

類型分類數據類型描述
字符串類型VARCHAR變長字符串類型,用于存儲可變長度的字符串。 最多只能是65535
字符串類型CHAR定長字符串類型,用于存儲固定長度的字符串。 最多只能是255
字符串類型TEXT文本類型,用于存儲長文本。
字符串類型TINYTEXT微型文本類型,用于存儲非常短的文本。
字符串類型MEDIUMTEXT中等長度文本類型,用于存儲中等長度的文本。
字符串類型LONGTEXT長文本類型,用于存儲非常長的文本。
字符串類型BLOB二進制大對象類型,用于存儲二進制數據。
字符串類型TINYBLOB微型二進制大對象類型,用于存儲非常小的二進制數據。
字符串類型MEDIUMBLOB中等長度二進制大對象類型,用于存儲中等長度的二進制數據。
字符串類型LONGBLOB長二進制大對象類型,用于存儲非常長的二進制數據。
字符串類型ENUM枚舉類型,用于存儲枚舉值,即一組預定義的字符串。
字符串類型SET集合類型,用于存儲一組預定義的字符串,可以包含多個值。

字符串類型最典型的就是 char與varchar。我們先來看char,這是一個固定長度的字符串,我們的插入必須是小于等于其長度。
在這里插入圖片描述
這里發現漢字和英語字母都是最大插入三個,但是utf8編碼中漢字是占3個字節,所以:mysql中的字符與c/c++中不同 ,字符可以是字母或漢字。c/C++中字符就是一個字節,mysql不是!

再來看varchar(L): 可變長度字符串,L表示字符長度,最大長度65535個字節。
在這里插入圖片描述
這里性質與char一致,大于其長度的無法插入。
再來看這樣一個現象,當我們想要修改varchar的儲存長度為65535時,會出現一個報錯:
在這里插入圖片描述
提升我們不能擴展到65535,而只能到16383。這里是因為根據字符集的規定,中文字符可能會使用不同的字節數:

  • 如果你使用的是utf8mb4字符集(MySQL推薦使用的完整UTF-8編碼),每個中文字符確實占用4個字節
  • 如果是utf8字符集,每個中文字符占用3個字節
  • 如果是latin1字符集,每個中文字符可能無法正常存儲

所以對于utf8mb4字符集字符集65535個字節最多只能儲存16383個中文字符!

varchar(len)與編碼密切相關!varchar長度可以指定為0到65535之間的值,但是有1 - 3 個字節用于記錄數據大小,所以說有效字節數是65532

在這里插入圖片描述
如果儲存的長度過長,建議使用大文本儲存。

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

  1. 如果數據確定長度都一樣,就使用定長(char),比如:身份證,手機號,md5
  2. 如果數據長度有變化,就使用變長(varchar), 比如:名字,地址,但是你要保證最長的能存的進去。
  3. 定長的磁盤空間比較浪費,但是效率高。
  4. 變長的磁盤空間比較節省,但是效率低。
  5. 定長的意義是,直接開辟好對應的空間
  6. 變長的意義是,在不超過自定義范圍的情況下,用多少,開辟多少
  7. 兩者的關系與 c/c++中的 char[ ] 與 string 很相似

日期類型

類型分類數據類型描述
日期類型DATE日期類型,用于存儲日期值(年-月-日)。
日期類型TIME時間類型,用于存儲時間值(時:分:秒)。
日期類型DATETIME日期時間類型,用于存儲日期和時間值(年-月-日 時:分:秒)。
日期類型TIMESTAMP時間戳類型,用于存儲時間戳值,表示自1970-01-01 00:00:00 UTC以來的秒數。

常用的日期有如下三個:

  1. date :日期 ‘yyyy-mm-dd’ ,占用三字節。記錄需要儲存的時間日期
  2. datetime :時間日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范圍從 1000 到 9999 ,占用八字節。記錄需要儲存的時間日期
  3. timestamp :時間戳,從1970年開始的 yyyy-mm-dd HH:ii:ss 格式和 datetime 完全一致,占用四字節。一個表中可以有多個TIMESTAMP字段,但只有一個可以設置為DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP。這個是記錄數據的創建/修改時間。

在這里插入圖片描述

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

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

相關文章

mybatis vs mybatis-plus

??核心關系:?? MyBatis-Plus ??不是?? MyBatis 的替代品,而是構建在 MyBatis ??之上??的一個強大的??增強工具包??。它完全兼容原生 MyBatis,并在其基礎上提供了大量開箱即用的功能,極大地簡化了開發,…

2025膠水分裝機服務商技術解析:聚焦高精度、智能化應用

膠水作為電子組裝、新能源電池、醫療器械、消費類電子產品等關鍵環節中的核心材料,其生產、儲存與分裝過程對精度、潔凈度和一致性的要求日益嚴苛。在這一背景下,膠水分裝機及分裝服務商正從傳統的設備供應商向“工藝裝備數據服務”的綜合解決方案提供者…

v-model是怎么實現的,語法糖到底是什么

1&#xff1a;作用在表單元素上實際上就是2&#xff1a;作用在自定義組件上&#xff0c;vue2和vue3不同 vue2&#xff1a; v-model相當于名為value 的 prop和名為 input 的事件 在父組件中 <child v-model"message"></child> //相當于&#xff1a; <…

學習筆記:Javascript(5)——事件監聽(用戶交互)

事件監聽&#xff1a;用戶交互的核心機制在前端開發中&#xff0c;事件監聽是處理用戶交互的基礎機制。它允許我們檢測用戶的操作&#xff08;如點擊、輸入、滾動等&#xff09;并執行相應的代碼&#xff0c;讓網頁從靜態變為動態。一、事件與事件監聽的基本概念事件&#xff0…

在Linux系統中清理大文件的方法

在Linux系統的日常運維管理過程中&#xff0c;磁盤空間問題是一個非常常見且棘手的難題。隨著系統運行時間的增加&#xff0c;日志文件、臨時文件、緩存文件以及用戶產生的數據會不斷增長。如果缺乏及時的監控和清理&#xff0c;大文件往往會迅速占滿磁盤&#xff0c;導致系統性…

使用x64dbg分析調試windows可執行程序

引言 當我們僅有一個C/C等編譯的可執行程序&#xff08;windows 上的 exe 文件&#xff09;&#xff0c;而沒有源碼時我們應該怎么分析調試該可執行程序呢&#xff1f;我們可以通過動態分析或靜態分析的方式達成我們的目的&#xff0c;當然比較有效的方案當然是靜態分析結合動態…

在Windows 11上配置Cursor IDE進行Java開發

前言 Cursor IDE是一款基于VSCode的AI編程助手&#xff0c;集成了強大的AI功能&#xff0c;能夠顯著提升Java開發效率。本文詳細介紹如何在Windows 11系統上安裝和配置Cursor IDE&#xff0c;使其成為高效的Java開發環境。 1. Windows 11上安裝Cursor IDE 1.1 下載和安裝步驟…

字符串-43.字符串相乘-力扣(LeetCode)

一、題目解析 1、計算乘積后&#xff0c;將結果也按字符串返回 2、字符串長度在[1&#xff0c;200] 二、算法原理 為了方便字符串計算&#xff0c;我們將其逆置&#xff0c;符合我們的計算需求&#xff0c;"123"將變為"321" 解法1&#xff1a;模擬小學…

鴻蒙HAP包解包、打包、簽名及加固全流程解析

在鴻蒙應用開發過程中&#xff0c;HAP&#xff08;HarmonyOS Ability Package&#xff09;包的解包、打包、簽名以及加固是開發者們繞不開的重要環節。今天&#xff0c;就讓我們深入探討這一全流程&#xff0c;幫助大家更好地理解和掌握相關操作。 一、HAP解包 解包是分析和修…

PyTorch之張量創建與運算

PyTorch 主要有以下幾個基礎概念&#xff1a;張量&#xff08;Tensor&#xff09;、自動求導&#xff08;Autograd&#xff09;、神經網絡模塊&#xff08;nn.Module&#xff09;、優化器&#xff08;optim&#xff09;等。張量&#xff08;Tensor&#xff09;&#xff1a;PyTo…

數據 儲存

文件儲存 網頁版爬蟲數據庫 &#xff1a; https://spidertools.cn/#/crypto TEXT 文本儲存 可以使用記事本打開 r #讀取。 r #讀寫&#xff0c;文件指針放在文件的開頭。 w #寫入&#xff0c;覆蓋原文件。 w #讀寫&#xff0c;覆蓋原文件。 a #附加。 a #讀寫&…

Flask 博客系統(Flask Blog System)

目標&#xff1a;零基礎也能從頭搭建一個支持文章管理、評論、分類標簽、搜索、用戶登錄的博客系統 技術棧&#xff1a;Flask SQLite SQLAlchemy Jinja2 HTML/CSS Flask-Login 開發工具&#xff1a;VSCode 學習重點&#xff1a;MVC 模式、數據庫操作、會話管理、表單處理一…

基于RFID技術的寵物自動喂食器方案

一、背景 寵物已經成為現代人生活中不可或缺的一部分&#xff0c;隨著養寵物的人越來越多&#xff0c;寵物的數量也越來越多&#xff0c;有些家庭甚至養了兩只以上的貓狗或者貓狗混養&#xff0c;寵物間的管理問題也越來越突出&#xff0c;如寵物之間的搶食行為&#xff0c;易…

conda常見問題

文章目錄run "conda init" before "conda activate"打開PowerShell自動進入base環境&#xff08;cmd沒有這個問題&#xff09;run “conda init” before “conda activate” 在使用conda命令創建env后使用conda activate命令&#xff0c;出現"run ‘…

第5章 HTTPS與安全配置

5.1 HTTPS概述 5.1.1 為什么需要HTTPS 數據加密:保護傳輸中的敏感數據 身份驗證:確認服務器身份的真實性 數據完整性:防止數據在傳輸過程中被篡改 SEO優勢:搜索引擎優先排名HTTPS網站 瀏覽器要求:現代瀏覽器對HTTP網站顯示不安全警告 合規要求:許多行業標準要求使用HTTP…

Java入門級教程17——利用Java SPI機制制作驗證碼、利用Java RMI機制實現分布式登錄驗證系統

目錄 1.制作驗證碼——java SPI機制 1.1 類所屬包情況 1.2 具體實現 1.2.1 核心接口&#xff1a;ICode 1.2.2 接口實現類&#xff1a;驗證碼的具體生成邏輯 1.2.3 服務工廠類&#xff1a;CodeServiceFactory&#xff08;核心&#xff1a;SPI 服務發現&#xff09; 1.2.…

ES6筆記5

1. Promise相當于一個容器&#xff0c;保存著未來才要結束的事件&#xff08;異步操作&#xff09;的一個結果&#xff0c;各種異步操作都可以用同樣方法處理 axios特點&#xff1a;對象的狀態不受外界影響&#xff0c;處理異步操作&#xff0c;3個狀態&#xff0c;Pending&…

解決idea2021maven依賴導入后還是找不到包,爆紅無法導入

1.依賴導入后pom.xml文件以及Maven,此兩處代碼還是爆紅 2.解決方法 由技術大佬同事幾分鐘解決,他記憶深刻之前搞過很久,一看就知道哪里出問題了 我之前是配過Maven的本地倉庫的但是沒有用,這次出問題之后長教訓了,技術大佬說盡量用自己的本地倉庫,不要用idea的Maven倉庫,容易…

【硬件-筆試面試題-81】硬件/電子工程師,筆試面試題(知識點:詳細講講同步時鐘與異步時鐘通信)

題目匯總版--鏈接&#xff1a; 【硬件-筆試面試題】硬件/電子工程師&#xff0c;筆試面試題匯總版&#xff0c;持續更新學習&#xff0c;加油&#xff01;&#xff01;&#xff01;-CSDN博客 【硬件-筆試面試題-81】硬件/電子工程師&#xff0c;筆試面試題&#xff08;知識點…

php計算一個模擬增長過程函數

private function calculateGrowth($progress) {// 使用多個增長階段模擬不均勻性if ($progress < 0.3) {// 前30%時間&#xff1a;緩慢增長 30 %return pow($progress / 0.3, 0.7) * 0.3;} elseif ($progress < 0.7) {// 中間40%時間&#xff1a;快速增長 50%return 0.3…