【MySQL篇】數據類型

目錄

前言:?

1,數據類型的分類

??編輯

?2 ,數值類型

2.1 tinyint類型

2.2??bit類型

?2.3 小數類型

2.3.1 float類型?

?2.3.2 decimal類型

?3,字符串類型

3.1 char

?3.2 varchar

3.3 char與varchar的比較

3.4日期和時間類型

?3.5 enum和set


前言:?

MySQL 是一個流行的開源關系型數據庫管理系統。它支持多種數據類型,用于存儲和管理數據。

MySQL提供了多種數據類型,合理選擇數據類型對存儲效率,查詢性能和數據 準確性至關重要,本篇對MySQL 支持的主要數據類型分類及詳細說明。

1,數據類型的分類

?

?

?

?2 ,數值類型

2.1 tinyint類型

tinyint大小為一個字節,無符號數的取值范圍在0~255,有符號數的取值范圍在-128~127。

使用示例:

  • 創建一個包含tinyint數據類型的表

create table if not exists t1( num tinyint);

  • ?向t1中插入數據

mysql> insert into t1 values(1);

Query OK, 1 row affected (0.01 sec)

?

mysql> insert into t1 values (-127);

Query OK, 1 row affected (0.01 sec)

?

mysql> insert into t1 values(-128);

Query OK, 1 row affected (0.00 sec)

  • 打印t1表中的信息?

select * from t1;

?

  • ?插入超出范圍的數字

mysql> insert into t1 values (-129);

ERROR 1264 (22003): Out of range value for column 'num' at row 1

?

mysql> insert into t1 values(128);

ERROR 1264 (22003): Out of range value for column 'num' at row 1

mysql>

?

將tiny設置為無符號類型,此時的數據范圍就是0~255。

create table if not exists t2(?num tinyint unsigned);

插入數據:

?

總結:?

MySQL中,整型可以指定符號的,默認是有符號的,通過unsigned可以來標識字段類型為無符號類型。

MySQL也不支持 插入超出數據類型范圍的數,否則直接攔截。所以 可以保證插入的時候數據一定是合法的。在MySQL中,數據類型本身就是一種約束,所以無論使用者是否可以熟練的使用MySQL,這種約束都可以很好的保證數據是可預期的,完整的,合法的。?

2.2??bit類型

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

  • 創建一個包含bit類型的數據表并插入數據

create table if not exists t3(id int,num bit);

insert into t3 values(1,0);

insert into t3 values(2,1);

insert into t3 values(3,2);//err,默認只能插入0或1

?

  • 創建一個大小為8的bit類型數據表?

create table if not exists t4( id int,num bit(8));

insert into t4 values(1,25);
insert into t4 values(2,100);

insert into t4 values(2,255);
insert into t4 values(2,256);//err,同樣不能越界?

?

?2.3 小數類型

?

2.3.1 float類型?

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

  • 創建一個長度為4,小數部分長度為2的小數的數據表?

create table if not exists t5(id int,num float(4,2));

注:float(4,2)表示的數據范圍是-99.99~99.99,MySQL在保存值時會四舍五入。?

  • 插入數據

insert into t5 values(1,-99.99);
insert into t5 values(2,0);
?insert into t5 values(3,99.99);
?insert into t5 values(3,99.991);
insert into t5 values(3,59.885);
insert into t5 values(3,100.00);//err

insert into t5 values(3,59.886);

?

?

同理,如果將float定義為unsigned無符號類型,那么float(4,2)的取值范圍時0~99.99.

?2.3.2 decimal類型

decimal[(m,d)][unsigned]:定點數m指定長度,d表示小數點的位數。

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

創建一個數據表,長度為10,小數部分為8,比較float和decimal。?

create table if not exists t6( num1 float(10,8), num2 decimaimal(10,8) );

insert into t6 values (23.12345612,23.12345612);

insert into t6 values (12.12345678,12.12345678);?

?

?我們看到在數據一樣的情況下,decimal的小數精度高于float。float表示的精度大約是7位。decimal整數最大位數m為65。支持小數最大位數d是30。如果d被省略,默認為0,如果m被省略,默認是10。?

?3,字符串類型

3.1 char

char[(L)]:固定長度字符串,L是可以存儲的長度,單位為字符,最大可以存儲255個字符 。

  • 創建包含長度為2的字符串的數據表?

create table if not exists t7(id int,name char(2));

  • 插入數據?

insert into t7 values(1,'張三');
insert into t7 values(2,'李四');
insert into t7 values(3,'王五');

?

char(2)表示可以存儲兩個字符,可以是字母或者漢字,但是不能超過255個 。?

?

?3.2 varchar

varchar[(L)]:可變長度字符,L表示字符長度,最大長度為65535個字節。

  • 創建一個長度為6的字符串的數據表

create table if not exists t8(id int,name varchar(6));

varchar(6)表示可以存儲6給字符。

  • 插入數據?

insert into t8 values(100,'hello');

insert into t8 values(100,'我愛你,中國');

insert into t8 values(100,'我愛敲代碼!!');//err

?

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

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

?

3.3 char與varchar的比較

?

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

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

3.4日期和時間類型

?常見的日期有如下三個:

  • date:日期'yyyy-mm-dd',占用3個字節
  • datetime:時間日期格式'yyyy-mm-dd HH:ii:ss',表示范圍從1000到9999,占用8個字節。
  • timestamp:時間戳,從1970年開始的yyyy-mm-dd HH:ii:ss格式和datetime完全一致,占用4個字節。表示現在 的時間。
  • ?創建帶時間的數據表

create table if not exists birthday(t1 date,t2 datetime,t3 timestamp);

  • ?插入數據

insert into birthday (t1,t2) values ('1997-7-1','2008-8-8 12:1:1');

?

?3.5 enum和set

enum:枚舉,單選類型

enum('選項1','選項2','選項3',...)

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

set:集合,多選類型

set(’選項值1‘,‘選項值2’,‘選項值3’,...)

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

  • 創建一個含有set的數據表?

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

  • 插入數據?

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

insert into votes values ('張三','登山,武術','男');
?insert into votes values ('李四','游泳','女');

insert into votes values ('趙六','籃球','2');
insert into votes values ('王五','足球','男');//err

?

集合查詢使用find_in_set函數?

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

select * from votes where find_in_set('登山',hobby);?

?

?

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

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

相關文章

nuxt常用組件庫html-validator應用解析

html-validator 主要用于自動驗證nuxt服務器呈現的HTML(SSR和SSG),以檢測可能導致水合錯誤的HTML常見問題,有助于減少水合錯誤,檢測常見的可訪問性錯誤。 安裝 npx nuxilatest module add html-validator配置 若自動更新nuxt.config.ts配置文…

智能圖像處理平臺:圖片管理

接著我們講圖片管理,先實現圖片基礎的增刪改查,再去考慮圖像處理。 主要是,我們需要完成查詢時,查詢的圖片的上傳者的角色等級小于等于我們當前登陸賬號。 后端controller: package com.llpp.controller;import cn.…

大模型知識蒸餾技術(8)——知識蒸餾應用場景

版權聲明 本文原創作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl1. 知識蒸餾概述 知識蒸餾是一種將大型復雜模型(教師模型)的知識遷移到小型簡單模型(學生模型)的技術。其核心原理是通過教師模型的輸出(通常是softmax后的概率分布)來指導學生模型的訓練,…

LeetCode:131. 分割回文串(DP Java)

目錄 131. 分割回文串 題目描述: 實現代碼與解析: 動態規劃 原理思路: 131. 分割回文串 題目描述: 給你一個字符串 s,請你將 s 分割成一些子串,使每個子串都是 回文串 。返回 s 所有可能的分割方案。…

INT202 Complexity of Algroithms 算法的復雜度

文章目錄 1. 前言1.1 算法(Algorithms)和數據結構(Data Structure)1.2 什么是好的算法?1.3 算法分析1.3.1 實驗分析(Experimental Analysis)1.3.2 理論分析1.3.2.1 偽代碼(Pseudo-co…

BDF報告翻譯簡介后:關于A φ方法criterion引理1如何由范數導出內積

關于A φ方法criterion 引理1 如何由范數導出內積 在數學中,特別是在泛函分析中,給定一個范數,可以定義一個與之相關的內積。這個過程不是總是可能的,但當一個賦范向量空間是完備的且滿足平行四邊形恒等式時,可以導出…

初識uniApp

詳細思考一下uniApp這個跨平臺開發框架。首先,我對uniApp還不是很了解,所以需要從基本概念開始,逐步深入。 什么是uniApp? 我記得uniApp是基于Vue.js的,可能是一個用來開發多個平臺的應用的框架。用戶可能想了解它是什…

olmOCR:使用VLM解析PDF

在PDF解析中,目前主流的開源工具包括Minuer、GOT OCR等。主要都是通過飛槳等OCR套件組裝的一套pipeline,或者直接通過VLM解析圖像。 #一、 olmOCR是使用VLM進行的端到端的PDF文檔解析 二、document-anchoring 與上述的不同在于,olmOCR使用…

Nginx 代理配置導致瀏覽器應用網頁頁面加載失敗的分析與解決

Nginx 代理配置導致應用頁面加載失敗的分析與解決 前期部署信息: 部署DM數據庫DEM時,配置了nginx代理,conf配置內容如下: charset utf-8;client_max_body_size 128M;listen 4567;server_name 192.168.1.156;root /opt/h5/;index…

Windows 11【1001問】查看Windows 11 版本的18種方法

隨著技術的飛速發展,操作系統作為連接硬件與軟件的核心橋梁,其版本管理和更新變得尤為重要。對于用戶而言,了解自己設備上運行的具體Windows 11版本不僅有助于優化系統性能,還能確保安全性和兼容性。然而,不同場景和需…

企業jsapi_ticket,java舉例

在企業微信開發中,使用 Java 獲取 jsapi_ticket 并生成簽名的步驟如下。以下是完整的 Java 示例代碼。 1. 獲取 jsapi_ticket 的流程 獲取 access_token。 使用 access_token 獲取 jsapi_ticket。 使用 jsapi_ticket 生成簽名(signature)。…

【Godot4.3】自定義簡易菜單欄節點ETDMenuBar

概述 Godot中的菜單創建是一個復雜的災難性工作,往往無從下手,我也是不止一次嘗試簡化菜單的創建。 從自己去年的發明“簡易樹形數據”用于簡化Tree控件獲得靈感,于是嘗試編寫了用于表示菜單數據的EasyMenuData類,以及對應的純文…

大數據與金融科技:革新金融行業的動力引擎

大數據與金融科技:革新金融行業的動力引擎 在今天的金融行業,大數據與金融科技的結合正在以驚人的速度推動著金融服務的創新與變革。通過精準的數據分析與智能化決策,金融機構能夠更高效地進行風險管理、客戶服務、資產管理等一系列關鍵操作…

二、IDE集成DeepSeek保姆級教學(使用篇)

各位看官老爺好,如果還沒有安裝DeepSeek請查閱前一篇 一、IDE集成DeepSeek保姆級教學(安裝篇) 一、DeepSeek在CodeGPT中使用教學 1.1、Edit Code 編輯代碼 選中代碼片段 —> 右鍵 —> CodeGPT —> Edit Code, 輸入自然語言可編輯代碼,點擊S…

Rohm發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮

Rohm震撼發布TOLL封裝650V GaN HEMT,引領汽車用GaN器件大規模生產新浪潮。在創新的TOLL(TO LeadLess)封裝技術的懷抱中,Rohm精心孕育出650V GaN HEMT這一瑰寶,此技術正如一股強勁東風,日益吹拂于高功率處理…

Spring Boot 3.x 基于 Redis 實現郵箱驗證碼認證

文章目錄 依賴配置開啟 QQ 郵箱 SMTP 服務配置文件代碼實現驗證碼服務郵件服務接口實現執行流程 依賴配置 <dependencies> <!-- Spring Boot Starter Web --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spr…

PHP的學習

PHP的基礎前提【HTML、CSS】 第一步先進行VS cood的下載&#xff1a;Visual Studio Code - Code Editing. Redefined 【選擇適合自己的電腦的版本eg:我就是64位的win】

XML 編輯器:全面指南與最佳實踐

XML 編輯器:全面指南與最佳實踐 引言 XML(可擴展標記語言)編輯器是處理XML文件的關鍵工具,對于開發人員、系統管理員以及任何需要處理XML數據的人來說至關重要。本文將全面介紹XML編輯器的概念、功能、選擇標準以及最佳實踐,旨在幫助讀者了解如何選擇和使用合適的XML編輯…

《Effective Objective-C》閱讀筆記(下)

目錄 內存管理 理解引用計數 引用計數工作原理 自動釋放池 保留環 以ARC簡化引用計數 使用ARC時必須遵循的方法命名規則 變量的內存管理語義 ARC如何清理實例變量 在dealloc方法中只釋放引用并解除監聽 編寫“異常安全代碼”時留意內存管理問題 以弱引用避免保留環 …

ORM Bee V2.5.2.x 發布,支持 CQRS; sql 性能分析;更新 MongoDB ORM分片

Bee, 一個具有分片功能的 ORM 框架. Bee Hibernate/MyBatis plus Sharding JDBC Jpa Spring data GraphQL App ORM (Android, 鴻蒙) 小巧玲瓏&#xff01;僅 940K, 還不到 1M, 但卻是功能強大&#xff01; V2.5.2 (2025?LTS 版) 開發中... **2.5.2.1 新年 ** 支持 Mong…