MySQL數據類型

文章目錄

  • MySQL數據類型
    • 1. 數據類型分類
    • 2. 數值類型
      • 2.1 tinyint類型
      • 2.2 bit類型
      • 2.3 小數類型
        • 2.3.1 float
        • 2.3.2 decimal
      • 2.4 字符串類型
        • 2.4.1 char
        • 2.4.2 varchar
        • 2.4.3 char和varchar比較
      • 2.5 日期和時間類型
      • 2.6 enum和set

MySQL數據類型

1. 數據類型分類

紅色標注是我主要講解的內容

在這里插入圖片描述

2. 數值類型

在這里插入圖片描述

2.1 tinyint類型

tinyint有符號數據范圍測試:

首先創建一個數據庫,進入

在這里插入圖片描述

進入后,創建一張表,表當中包含一個tinyint類型的列,默認其為有符號類型

注意: 在MySQL表中建立屬性列,列名稱在前,屬性在后

列名稱, 屬性

在這里插入圖片描述

由于tinyint的取值范圍是-128~127, 邊界和范圍內的數據可以插入

在這里插入圖片描述

在此范圍之外的數據無法插入

在這里插入圖片描述

說明:

  • 在MySQL中,整型可以指定是有符號的和無符號的,默認是有符號的。
  • 可以通過UNSIGNED來說明某個字段是無符號的

tinyint無符號數據范圍測試:

創建t2表,并且指定為無符號類型

在這里插入圖片描述

無符號tinyint范圍是0~255,一旦越界則無法插入

在這里插入圖片描述

注意:

  • 我們平時在語言上賦值超過范圍時(比如 char a =1234567),可能會發生截斷后賦值,但是我們向MySQL特定的類型中插入不合法的數據,MySQL一般都是直接攔截我們,不讓我們做對應的操作!

  • 反過來,如果MySQL我們已經有數據被成功插入到MySQL中了,一定在插入的時候是合法的!

  • 所以,MySQL中,一般而言,數據類型本身也是一種:約束

  • 這樣做的目的是: 倒逼程序員,讓程序員盡可能進行正確的插入,約束的是: 使用者,另外若果你不是一個很好的使用者,MySQL也能保證數據插入的合法性;進而就能數據庫中的數據是可預期,完整的

2.2 bit類型

基本語法

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

先創建一張表,表當中包含一個int類型和bit類型的列

在這里插入圖片描述

bit是一種位類型,一個bit位只允許插入0或1,并且超過位數的值是無法插入的

在這里插入圖片描述

直接查看發現是不顯示的,因為bit類型在顯示時,是按照ASCII碼對應的值進行顯示的,有些字符是不可顯示的

在這里插入圖片描述

強轉成16進制顯示

在這里插入圖片描述

修改表,改成 bit(10)

在這里插入圖片描述

向表中插入’a’和97,最后顯示都是’a’,再次驗證了是按ASCII碼對應的值進行存儲

在這里插入圖片描述

bit(M),如果超過M最大值64,創建表就會失敗

在這里插入圖片描述

直接創建表,不指定bit中M的長度,默認值是1

在這里插入圖片描述

2.3 小數類型

2.3.1 float

語法:

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

創建一個表,包含一個float(4,2)類型的列,默認其為有符號類型

在這里插入圖片描述

float(4,2)表示的范圍是-99.99 ~ 99.99,在該范圍內可以插入數據,超過范圍報錯

在這里插入圖片描述

在這里插入圖片描述

嘗試插入一些,超過小數位數的值,下面會成功插入,因為這些四舍五入后會變成99.99

在這里插入圖片描述

而這些無法插入,因為四舍五入后會變成100.00超過了范圍

在這里插入圖片描述

說明:MySQL在插入值時會進行四舍五入

創建一個無符號的表,還是一樣的列屬性

在這里插入圖片描述

向其中中插入一些數據,發現負數和超過范圍的數據是無法插入的

在這里插入圖片描述

說明: 無符號類型的float取值范圍是0~99.99

在這里插入圖片描述

還有一個問題要注意,float類型會精度丟失問題

在這里插入圖片描述

2.3.2 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表示的精度不一樣

創建表,兩個列類型分別是 float 和 decimal,長度和小數點位數都相同,向兩列中插入同樣高精度的值,float則會存在一定的精度損失,decimal則沒有

在這里插入圖片描述

說明:float表示的精度大約是7位。

  • decimal整數最大位數m為65。支持小數最大位數d是30。如果d被省略,默認為0.如果m被省略,默認是10。

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

2.4 字符串類型

2.4.1 char

語法:

char(L): 固定長度字符串,L是可以存儲的長度,單位為字符,最大長度值可以為255
  • L代表一個字符,在MySQL里一個漢字也是一個字符

  • 在不同編碼中,一個字符所占的字節個數是不同的,比如utf8中一個字符占3個字節,而gbk中一個字符占2個字節

先創建一張表

在這里插入圖片描述

向其中插入一些字符,一旦字符數超過固定的長度則不會插入

在這里插入圖片描述

也可插入漢字

在這里插入圖片描述

2.4.2 varchar

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

L代表字節

先創建表

在這里插入圖片描述

插入數據,varchar在這與char沒什么區別

在這里插入圖片描述

說明:
關于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字節)。

在這里插入圖片描述

2.4.3 char和varchar比較

在這里插入圖片描述

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

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

2.5 日期和時間類型

常用的日期有如下三個:

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

先創建一張包含著3個類型的數據表

在這里插入圖片描述

查看表的具體屬性

在這里插入圖片描述

如果向表中插入數據,t3會自動更新到最新時間(無需手動插入)

在這里插入圖片描述

修改一下t1的時間,同時發現t3時間也更新了

在這里插入圖片描述

那么t3這種字段究竟有什么用呢?

假設一種場景,現在有一個論壇,大家在里評論,t3會記錄某人最新評論的時間

我們創建這樣一個表,兩列屬性分別代表用戶的評論內容和評論時間

在這里插入圖片描述

現在我發表了評論,t3記錄了我當前的時間

在這里插入圖片描述

過了一會,我又重新發表了評論,則t3會更新,記錄我最新發表評論的時間

在這里插入圖片描述

2.6 enum和set

語法:

  • enum:枚舉,“單選”類型;
enum('選項1','選項2','選項3',...);

該設定只是提供了若干個選項的值,最終一個單元格中,實際只存儲了其中一個值;而且出于效率考慮,這些值實際存儲的是“數字”,因為這些選項的每個選項值依次對應如下數字:1,2,3,…最多65535個;當我們添加枚舉值時也 可以添加對應的數字編號。

  • set:集合,“多選”類型;
set('選項值1','選項值2','選項值3', ...);

該設定只是提供了若干個選項的值,最終一個單元格中,設計可存儲了其中任意多個值;而且出于效率考慮,這些值實際存儲的是“數字”,因為這些選項的每個選項值依次對應如下數字:1,2,4,8,16,32,…最多64個。

說明:不建議在添加枚舉值,集合值的時候采用數字的方式,因為不利于閱讀。

創建表,分別設置列數據類型為enum和set

在這里插入圖片描述

以選擇屬性的形式插入性別和愛好,在范圍內可成功插入

在這里插入圖片描述

以數字的形式插入性別,枚舉是從1開始的,則1代表’男’, 2代表’女’, 在這兩個之外的數無法插入

在這里插入圖片描述

以選擇屬性的形式插入愛好,在范圍內可成功插入,如有多組值可逗號隔開插入

在這里插入圖片描述

如果只插入username這一個,則其他兩個默認為NULL

在這里插入圖片描述

set是一個位圖結構,比特位的0/1代表有無,比如上面hobby中的選項就可以這樣表示

在這里插入圖片描述

hobby選項插入為0則代表空串,插入1就是將代碼的比特位置1

在這里插入圖片描述

將上面hobby選項全部置為1則為數字31,則插入31就代表插入所有選項

在這里插入圖片描述

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

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

直接去篩選發現是一種精確匹配,會將屬性只為羽毛球的顯示

在這里插入圖片描述

使用find_ in_ set函數,會將屬性有羽毛球的顯示

在這里插入圖片描述

篩選出屬性有羽毛球和代碼的

在這里插入圖片描述

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

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

相關文章

【QT】 QFileQFileInfo文件操作

很高興在雪易的CSDN遇見你 ,給你糖糖 歡迎大家加入雪易社區-CSDN社區云 前言 本文分享QT對文件的操作技術,希望對各位小伙伴有所幫助! 感謝各位小伙伴的點贊關注,小易會繼續努力分享,一起進步! 你的點…

linux中profile.d和profile的區別

profile.d在profile中加載 profile文件 PATH"/bin:/sbin:/usr/bin:/usr/sbin:/opt/bin:/opt/scripts:/soc/bin:/soc/scripts" LD_LIBRARY_PATH"/usr/local/lib:/usr/lib:/opt/lib:/soc/lib" export SSL_LDPATH/usr/local/lib/ export ZLIB_LDPATH/usr/lo…

appium默認60秒關閉應用的問題

問題:appium默認啟動一個應用的session過期時間是60秒到時間會自動停了剛啟動的應用,工作臺打印:info: [debug] We shut down because no new commands came in的日志 分析:--command-timeout 60 The default command timeout fo…

商城-學習整理-高級-全文檢索-ES(九)

目錄 一、ES簡介1、網址2、基本概念1、Index(索引)2、Type(類型)3、Document(文檔)4、倒排索引機制4.1 正向索引和倒排索引4.2 正向索引4.3 倒排索引 3、相關軟件及下載地址3.1 Kibana簡介3.2 logstash簡介…

【C++深入淺出】初識C++上篇(關鍵字,命名空間,輸入輸出,缺省參數,函數重載)

目錄 一. 前言 二. 什么是C 三. C關鍵字初探 四. 命名空間 4.1 為什么要引入命名空間 4.2 命名空間的定義 4.3 命名空間使用 五. C的輸入輸出 六. 缺省參數 6.1 缺省參數的概念 6.2 缺省參數的分類 七. 函數重載 7.1 函數重載的概念 7.2 函數重載的條件 7.3 C支…

ChatGPT在智能家居控制和環境管理中的應用如何?

智能家居控制和環境管理是近年來在科技領域迅速發展的重要領域之一。智能家居技術通過將物聯網、人工智能和自動化技術相結合,實現了家居設備的智能化、自動化控制和遠程管理。ChatGPT作為強大的自然語言處理模型,在智能家居控制和環境管理方面具有廣泛的…

軟件測試項目實戰,電商業務功能測試點匯總(全覆蓋)

目錄:導讀 前言一、Python編程入門到精通二、接口自動化項目實戰三、Web自動化項目實戰四、App自動化項目實戰五、一線大廠簡歷六、測試開發DevOps體系七、常用自動化測試工具八、JMeter性能測試九、總結(尾部小驚喜) 前言 支付功能怎么測試…

Spring--BeanFactory和FactoryBean區別

BeanFactory 和 FactoryBean 是 Spring 框架中兩個不同的概念,它們在對象的管理和創建過程中具有不同的角色和功能。下面是它們之間的區別: BeanFactory: BeanFactory 是 Spring 框架的核心接口之一,它是一個對象容器&#xff0c…

C語言刷題訓練【第11天】

大家好,我是紀寧。 今天是C語言筆試刷題訓練的第11天,加油! 文章目錄 1、聲明以下變量,則表達式: ch/i (f*d – i) 的結果類型為( )2、關于代碼的說法正確的是( )3、已知有如下各變…

使用 Visual Studio GoogleTest編寫 C/C++ 單元測試——入門篇

入門教程 Visual Studio 新建 GoogleTest項目,一路選默認參數 pch.h #pragma once#include "gtest/gtest.h"int add(int a, int b);pch.cpp #include "pch.h"int add(int a, int b) {return a b; }test.cpp #include "pch.h"TES…

【廣州華銳視點】AR電力職業技能培訓系統讓技能學習更“智慧”

隨著科技的發展,教育方式也在不斷地進步和創新。其中,增強現實(AR)技術的出現,為教育領域帶來了全新的可能。AR電力職業技能培訓系統就是這種創新教學方法的完美實踐,它將虛擬與現實相結合,為學生提供了一個沉浸式的學…

【數據庫】Sql Server可視化工具SSMS條件和SQL窗格以及版本信息

2023年,第34周,第1篇文章。給自己一個目標,然后堅持總會有收貨,不信你試試! SQL SERVER 官方本身就有數據庫可視化管理工具SSMS,所以大部分都會使用SSMS。以前版本是直接捆綁, 安裝完成就自帶有…

Python多線程與線程池(python線程池ThreadPoolExecutor)concurrent.futures高級別異步執行封裝

文章目錄 Python多線程與線程池一、Python多線程1.1 線程簡介1.2 Python中的多線程1.3 GIL限制 二、線程池2.1 Python中的線程池 三、代碼分析四、參考資料 Python多線程與線程池 一、Python多線程 在進行復雜的計算或處理大量數據時,可以通過創建多個線程來同時執…

Sentinel規則持久化

首先 Sentinel 控制臺通過 API 將規則推送至客戶端并更新到內存中,接著注冊的寫數據源會將新的規則保存到本地的文件中。 示例代碼: 1.編寫處理類 //規則持久化 public class FilePersistence implements InitFunc {Value("spring.application:n…

云原生k8s---資源限制、探針

目錄 一:資源限制 1、資源限制原因 2、Pod 和 容器 的資源請求和限制 3、CPU 資源單位 4、內存 資源單位 5、事例 (1)事例一 (2)事例二 二:重啟策略 1、重啟策略模式 2、事例 三:探針…

Win10提醒事項如何打開?電腦上如何添加日程提醒?

有不少上班族表示自己在日常辦公時,經常會忘記一些重要的事情,例如領導安排給自己的任務、會議安排、項目截止日期等。為了避免自己忘記工作事項,很多人都想要在電腦上設置提醒事項或添加日程提醒。那么Win10提醒事項如何打開呢?P…

Golang 中的 archive/zip 包詳解(一):實現 ZIP 壓縮與解壓

Golang 中的 archive/zip 包用于處理 ZIP 格式的壓縮文件,提供了一系列用于創建、讀取和解壓縮 ZIP 格式文件的函數和類型,使用起來非常方便。 實現壓縮功能 1、首先需要創建一個 zip 文件。 zip 文件也是一個文件,首先需要創建一個基礎的…

[Leetcode] [Tutorial] 多維動態規劃(未完待續)

文章目錄 62. 不同路徑Solution 62. 不同路徑 一個機器人位于一個 m ? * ? n 網格的左上角 (起始點在下圖中標記為 “Start” )。 機器人每次只能向下或者向右移動一步。機器人試圖達到網格的右下角。 問總共有多少條不同的路徑? 示例…

【electron】electron項目創建的方式:

文章目錄 【1】npm init quick-start/electron(推薦)【2】 克隆倉庫,快速啟動【3】 通過腳手架搭建項目【4】 手動創建項目 【Electron官網】https://www.electronjs.org/zh/docs/latest/api/app 【1】npm init quick-start/electron&#xf…

Excelize Go語言操作 Office Excel文檔基礎庫

Excelize 是 Go 語言編寫的用于操作 Office Excel 文檔基礎庫,基于 ECMA-376,ISO/IEC 29500 國際標準。可以使用它來讀取、寫入由 Microsoft Excel? 2007 及以上版本創建的電子表格文檔。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多種文檔格式&#xf…