【数据库】mysql常用的数据类型

数据类型是指列、存储过程参数、表达式和局部变量的数据特征,它决定了数据的存储格式,代表了不同的信息类型。
有一些数据是要存储为数字的,数字当中有些是要存储为整数、小数、日期型等...
MySQL支持多种类型,大致可以分为四类:数值型、浮点型、日期/时间和字符串(字符)类型。

一、Text 类型(字符类型):
char(size):保存固定长度的字符串(可包含字母、数字以及特殊字符)
varchar(size):保存可变长度的字符串(可包含字母、数字以及特殊字符)
text:存放最大长度为 65,535 个字符的字符串。

1.1 字符与字节的区别
一个字符由于所使用的字符集的不同,会并存储在一个或多个字节中,所以一个字符占用多少个字节取决于所使用的字符集。
注意:char与varchar后面接的数据大小为存储的字符数,而不是字节数
在MySQL中,char、varchar和text类型的字段都可以用来存储字符类型的数据,char、varchar都可以指定最大的字符长度,但text不可以。
它们的存储方式和数据的检索方式也都不一样。
数据的检索效率是:char > varchar > text

1.2 存数据时的区别
char:char定义的是固定长度,长度范围为0-255,存储定长数据很方便,CHAR字段上的索引效率级高,必须在括号里定义长度,可以有默认值,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间(自动用空格填充),且在检索的时候后面的空格会隐藏掉,所以检索出来的数据不需要记得用什么trim之类的函数去过滤空格。
varchar:varchar是变长长度,长度范围为0-65535,但存储效率没有CHAR高,必须在括号里定义长度,可以有默认值。保存数据的时候,不进行空格自动填充,而且如果数据存在空格时,当值保存和检索时尾部的空格仍会保留。另外,varchar类型的实际长度是它的值的实际长度+1,这一个字节用于保存实际使用了多大的长度。
text:存储可变长度的非Unicode数据,最大长度为2^31-1个字符。text列不能有默认值,存储或检索过程中,不存在大小写转换,后面如果指定长度,不会报错误,但是这个长度是不起作用的,意思就是你插入数据的时候,超过你指定的长度还是可以正常插入。

1.3 取数据时的区别
数据库取char的数据时,会把后面的空格全部丢弃掉,也就是说,在char中的尾部存入空格时,最后取出来都会被丢弃;当然指定PAD_CHAR_TO_FULL_LENGTH时,在取数据时让尾部的空格保留。
而数据库在取varchar数据时,尾部空格会保留。

可以用上表来表示,当定义char时,不管你存入多少字符,都会占用到你定义的字符数,而用varchar时,则和你输入的字符数有关,会多一到两个字节来记录字节长度,当数据位占用的字节数小于255时,用1个字节来记录长度,数据位占用字节数大于255时,用2个字节来记录长度,还有一位来记录是否为nul值。

1.4 关于存储空间:
在使用UTF8字符集的时候,MySQL手册上是这样描述的:
基本拉丁字母、数字和标点符号使用一个字节;
大多数的欧洲和中东手写字母适合两个字节序列:扩展的拉丁字母(包括发音符号、长音符号、重音符号、低音符号和其它音符)、西里尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语言;
韩语、中文和日本象形文字使用三个字节序列。
mysql每一行的最大字节数为65535,当你使用utf8,一个字符有可能占用三个字节的时候,varchar如果定义允许空的话能定义的最大长度为(65535-1-2)/3=21844.
Mysql在对比char,varchar,text类型的数据时,是不会把尾部的空格考虑在内的,这对所有字符集都适用,但在这里是除了like比较符的。

1.5 结论:
1、经常变化的字段用varchar;
2、知道固定长度的用char;
3、超过255字节的只能用varchar或者text;
4、能用varchar的地方不用text;
5、能够用数字类型的字段尽量选择数字类型而不用字符串类型,这会降低查询和连接的性能,并会增加存储开销。这是因为引擎在处理查询和连接回逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了;

二、Number 类型(数字类型):
tinyint(3):-128 到127常规。0到255无符号*。在括号中规定最大位数。
smallint(3):-32768到32767常规。0到65535无符号*。在括号中规定最大位数。
mediumint(3):-8388608到8388607普通。0to16777215无符号*。在括号中规定最大位数。
int(3):-2147483648到2147483647常规。0到4294967295无符号*。在括号中规定最大位数。
bigint(10):-9223372036854775808到9223372036854775807 常规。0到18446744073709551615无符号*。在括号中规定最大位数。
float(size,d)):带有浮动小数点的小数字。在括号中规定最大位数。在d参数中规定小数点右侧的最大位数。
double(size,d):带有浮动小数点的大数字。在括号中规定最大位数。在d参数中规定小数点右侧的最大位数。
decimal(size,d):作为字符串存储的double类型,允许固定的小数点。

三、Date 类型(日期类型):
date():日期格式:YYYY-MM-DD;注释:支持的范围是从 '1000-01-01' 到 '9999-12-31'
datetime():日期和时间的组合。格式:YYYY-MM-DD HH:MM:SS;注释:支持的范围是从 '1000-01-01 00:00:00' 到 '9999-12-31 23:59:59'
timestamp():时间戳。TIMESTAMP 值使用 Unix 纪元('1970-01-01 00:00:00' UTC) 至今的描述来存储。格式:YYYY-MM-DD HH:MM:SS;注释:支持的范围是从 '1970-01-01 00:00:01' UTC 到 '2038-01-09 03:14:07' UTC
time():时间格式:HH:MM:SS 注释:支持的范围是从 '-838:59:59' 到 '838:59:59'
year():2位或4位格式的年。注释:4位格式所允许的值:1901到2155;2位格式所允许的值:70到69,表示从1970到2069。

4、BLOB (binary large object),用来存储二进制大对象的字段类型。
BLOB往往是一个大文件,典型的BLOB是一张图片、一个声音或一个视频文件,由于它们的尺寸,必须使用特殊的方式来处理(例如:上传、下载或者存放到一个数据库)。
处理BLOB的主要思想就是让文件处理器(如数据库管理器)不去理会文件是什么,而是关心如何去处理它。但也有专家强调,这种处理大数据对象的方法是把双刃剑,它有可能引发一些问题,如存储的二进制文件过大,会使数据库的性能下降。
MySQL中,BLOB是个类型系列,共包括四种BLOB类型:TinyBlob、Blob、MediumBlob、LongBlob,这几个类型之间的唯一区别是在存储文件的最大尺寸不同。

字段类型 最大长度(字节)    存储需求
TinyBlob 255    值的长度加上用于记录长度的1个字节(8位)
Blob 65K        值的长度加上用于记录长度的2个字节(16位)
MediumBlob 16M  值的长度加上用于记录长度的3个字节(24位)
LongBlob 4G     值的长度加上用于记录长度的4个字节(32位)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/568537.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python】base64模块对图片进行base64编码和解码

图片的base64编码就是可以将一副图片数据编码成一串字符串,使用该字符串代替图像地址。 这样做有什么意义呢?我们知道,我们所看到的网页上的每一个图片,都是需要消耗一个 http 请求下载而来的。 没错,不管如何&#xf…

Mysql错误2003 -Can't connect toMySQL server on 'localhost'(10061)解决办法

错误图片 昨天晚上还在用mysql来存储东西,而今天早上发现mysql数据库根本打不开,吓了我一大跳,本来就想重装mysql服务,但是我的数据库都没了,相当于大楼盖起来了,地基一下出现了裂缝,后来经过研究解决办法 如下 我发现mysql的服务一直无法启动如图 显示Cant connect toMySQL s…

【Python实战】使用python计算多种还款方式的还款计划

随着人们经济活动的增加,用钱的地方越来越多,不管是像买房这样的大额支出还是个人消费型支出,越来越多的人选择贷款来解决眼前的经济危机。 而申请贷款就涉及到选择不同的还款方式,所需要偿还的欠款综合也大有不同,那么…

echarts自定义showlading()样式和文本

1、首先引入echarts.js 2、在页面定义自己的echarts变量 var myChart echarts.init(document.getElementById(main)); 3、自定义showLoading()样式 myChart.showLoading(default, {text:统计中,请稍候...,maskColor: #404a59,textColor: #fff,}); text:文本内…

测试人员做到这几点,线上80%的BUG将落入你手,企业将避免重大风险

BUG事故给敲了很大的警钟,也给公司带来重大损失,作为测试人员,我们如何提现发现线上BUG并及时解决,避免落入用户手中,给企业带来无法挽回的损失。 案例1: 1月20日凌晨,拼多多App因技术漏洞&am…

解决$ is not define

今天写js的时候,发现怎么也没有效果。然后我前端调试的时候报这样的错 $ is not define 这个错误我以前也出现过。所以就这个错误的解决,我来总结一下。 1.首先,"$"这个符号是在jquery中定义的。所以你要看一下,你有没…

模拟导入系统通讯录5000+手机号 校验大量数据处理

模拟导入系统通讯录5000手机号 校验大量数据处理 之前再测试一个导入手机通讯录系统时,随机抽了几个人的手机进行了测试,都导入显示正常 当公司BD进行项目试用时,导入通讯录一直处于下图加载中 1、于是进行抓包查看日志进行定位&#xff0c…

Monkey随机性能压测初探(一)

Monkey介绍 Monkey程序由Android系统自带,是Android SDK提供的一个命令行工具, 可运行Android模拟器和实体设备上。Monkey会发送伪随机的用户事件流,通过Monkey程序模拟用户触摸屏幕、滑动、 按键等操作来对程序进行压力测试,检测…

【Java】使用前准备工作配置环境变量

我们要使用java前,必须先安装JDK并且配置相关的环境变量,如果我们未配置环境变量,那么我们在cmd命令中,输入javac,会提示“javac”不是内部或外部命令,这里主要介绍如何配置jdk的环境变量。 JDK官网下载&a…

Jmeter性能测试工具Timer定时器详解

jmeter提供了很多元件,帮助我们更好的完成各种场景的性能测试,其中,定时器(timer)是很重要的一个元件,jemter提供了9种定时器,下面一一介绍: 一、定时器的作用域 1、定时器是在每个…

【Maven】Java项目管理工具

一、为什么要Maven 在开发中经常需要依赖第三方的包,包与包之间存在依赖关系,版本间还有兼容性问题,有时还里要将旧的包升级或降级,当项目复杂到一定程度时包管理变得非常重要。 Maven是当前最受欢迎的Java项目管理构建自动化综合…

fiddler抓包工具配置详解

没有解决不了的问题,只是没有找到合适的方法 fiddler官网 https://www.progress.com/ 官网下载fiddler https://www.telerik.com/download/fiddler/fiddler4 fiddler插件下载 https://www.telerik.com/fiddler/add-ons 最近看到很多人都在问的一个问题&#xff0…

【Maven】Eclipse中的Maven项目安装与配置

上一篇文章我们了解到了Maven的基本信息和如何在电脑本地安装Maven,这篇文章主要介绍如何在Eclipse关联Maven的配置和本地仓储地址,并且如何创建一个Maven项目、关联依赖包等。 一、关联Eclipse和Maven 点击Windows菜单栏下的Preference,找…

python两个字典合并,两个list合并

python两个字典合并,两个list合并 1.两个字典:a{a:1,b:2,c:3} b {aa:11,bb:22,cc:33} 合并1:dict(a,**b) 操作如下: 合并2:dict(a.items()b.items()) 如下: 合并3:c {} c.update(a) c.up…

C++ 一个字符串只包含K和D。K表示杀人,D表示死亡。计算连续杀敌次数,阵亡则归零。

题&#xff1a; 首先笔者的第一思路是前后两个字符串比较。如果相同index。 #include<iostream> #include<stdio.h> #include<string> using namespace std; int main() {string s;cout << "6请输入字符串&#xff1a;" << endl;cin …

【业务办理】广州市户口市内迁移流程

一、申办条件 符合下列条件之一的本市户籍人员&#xff08;除学校学生集体户口外&#xff09;&#xff0c;可办理户口市内迁移。 1.迁入本人合法住宅房屋地址。 2.投靠直系亲属&#xff0c;迁入其合法住宅房屋地址&#xff0c;或迁入其家庭户内。 3.因离婚、房屋所有权发生转移…

【Python】pyCryptodome模块实现AES加密、解密

高级加密标准&#xff08;英语&#xff1a;Advanced Encryption Standard&#xff0c;缩写&#xff1a;AES&#xff09;&#xff0c;在密码学中又称Rijndael加密法&#xff0c;是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES&#xff0c;已经被多方分析且广…

jmeter环境部署

win环境下&#xff1a; 1、复制jmeter整个包到本地解压、安装jdk 2、jdk环境环境变量配置&#xff08;电脑-属性-高级系统设置-环境变量&#xff09; 系统变量JAVA_HOME 变量值C:\Program Files\Java\jdk1.8.0_101 用户变量path 变量值%JAVA_HOME%\bin cmd下输java或jav…

【Python】pdf2image模块+poppler将PDF转换为图片

有时我们需要将PDF转换成图片&#xff0c;今天我们主要说的是pdf2imagepoppler对PDF转换成图片格式。 pdf2image是个包装器&#xff0c;真正的转换工具是poppler GitHub地址&#xff1a;https://github.com/Belval/pdf2image &#xff0c;上面也有相关的配置说明。 1、安装pdf…

jmeter五种参数化方式之CSV Data Set Config参数化

一、用户定义的变量 一般会设置全局不变的参数&#xff0c;如host、账号、密码等 设置名称username&#xff0c;password 值王荔&#xff0c;123456 线程设置2次和循环设置2次&#xff0c;2次采样器传参和结果一样 二、用户参数 添加用户参数 设置3组参数 参数化 当线程设置…