mySQL字符串字段区别_MySQL类型之(字符串列类型区分、数据类型区分)

1.首先CHAR, VARCHAR, TEXT和BINARY, VARBINARY, BLOB的区别:

CHAR, VARCHAR, TEXT称为:      非二进制字符串;

BINARY, VARBINARY, BLOB称为:二进制字符串;

非二进制字符串和二进制字符串的区别是:

非二进制字符串包含的是字符字符串,可以定义字符集,排序和比较是根据字母顺序进行;

二进制字符串包含的是字节字符串,不可以定义字符集,排序和比较基于列值字节的数值值;

BINARY类似与CHAR类型,但是保存二进制字符串而不是非二进制字符串;

VARBINARY类似与VARCHAR类型,但是保存二进制字符串而不是非二进制字符串;

同样类似的BLOB对应TEXT类型(相应的有TINYBLOB、BLOB、MEDIUMBLOB和LONGBLOB和TINYTEXT、TEXT、MEDIUMTEXT和LONGTEXT)

2.CHAR和VARCHAR相同之处:

都可以定义字符串的长度,如CHAR(M), VARCHAR(M);

不同之处:

CHAR(M)定义的列的长度为固定的,M取值可以为0~255之间,当保存CHAR值时,在它们的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除掉。在存储或检索过程中不进行大小写转换。

VARCHAR(M)定义的列的长度为可变长字符串,M取值可以为0~65535之间,(VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节)。VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(如果列声明的长度超过255,则使用两个字节)。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。

注意:MySQL 数据库的varchar类型在4.1以下的版本中的最大长度限制为255,其数据范围可以是0~255或1~255(根据不同版本数据库来定)。在 MySQL5.0以上的版本中,varchar数据类型的长度支持到了65535,也就是说可以存放65532个字节的数据,起始位和结束位占去了3个字 节,也就是说,在4.1或以下版本中需要使用固定的TEXT或BLOB格式存放的数据可以使用可变长的varchar来存放,这样就能有效的减少数据库文 件的大小。

CHAR和VARCHAR最大的不同就是一个是固定长度,一个是可变长度。由于是可变长度,因此实际存储的时候是实际字符串再加上一个记录字符串长度的字节(如果超过255则需要两个字节)

如果分配给CHAR或VARCHAR列的值超过列的最大长度,则对值进行裁剪以使其适合。如果被裁掉的字符是空格,则会产生一条警告。如果裁剪非空格字符,则会造成错误(而不是警告)并通过使用严格SQL模式禁用值的插入。

由于BINARY和VARBINARY分别与CHAR和VARCHAR对应,因此两者的区别也和CHAR和VARCHAR的区别类似。

但是注意VARBINARY定义的M值范围为0<=M<=255

3. VARCHAR和TEXT类型的区别:

TEXT类型不需要指定M值,其他方面与VARCHAR都类似:比如存储的是可变长度,即不够的部分不需要右边空格填充;等等。

TEXT与VARCHAR类似,实际需要保存字符串本身外加两个字节保存字符串的实际长度。

看下表容易理解上面讲述的区别:

字符串类型的存储需求(M为最大长度,L实际存储字符串的长度)

列类型

存储需求

CHAR(M)

M个字节,0 <= M <= 255 (L为固定的=255,不够补空格)

VARCHAR(M)

L+1个字节,其中L <= M且0 <= M <= 65535(参见下面的注释)(MySQL5.0之前都是最大255)

BINARY(M)

M个字节,0 <= M <= 255

VARBINARY(M)

L+1个字节,其中L <= M且0 <= M <= 255

TINYBLOB, TINYTEXT

L+1个字节,其中L < 28(256)

BLOB, TEXT

L+2个字节,其中L < 216(65536)

MEDIUMBLOB, MEDIUMTEXT

L+3个字节,其中L < 224

LONGBLOB, LONGTEXT

L+4个字节,其中L < 232

ENUM('value1','value2',...)

1或2个字节,取决于枚举值的个数(最多65,535个值)

SET('value1','value2',...)

1、2、3、4或者8个字节,取决于set成员的数目(最多64个成员)

解释:

CHAR(M)为固定长度,而且M必须要在0~255之间;

VARCHAR(M)保存可变长度,M定义了最大长度,M取值0~65535之间;

TINYTEXT不需要定义长度M值,长度范围不超过28(256);

TEXT不需要定义长度M值,长度范围不超过216(65536);

下面类似。。。

对于二进制字符串形式:BINARY(M),VARBINARY(M),TINYBLOB,BLOB等类似。

更详细的信息参考如下链接:

4.其他一些参考信息:

1、CHAR。CHAR存储定长数据很方便,CHAR字段上的索引效率级高,比如定义char(10),那么不论你存储的数据是否达到了10个字节,都要占去10个字节的空间,不足的自动用空格填充。

2、VARCHAR。存储变长数据,但存储效率没有CHAR高。如果一个字段可能的值是不固定长度的,我们只知道它不可能超过10个字符,把它定义为 VARCHAR(10)是最合算的。VARCHAR类型的实际长度是它的值的实际长度+1。为什么“+ 1”呢?这一个字节用于保存实际使用了多大的长度。从空间上考虑,用varchar合适;从效率上考虑,用char合适,关键是根据实际情况找到权衡点。

3.NCHAR、NVARCHAR、NTEXT。这三种从名字上看比前面三种 多了个“N”。它表示存储的是Unicode数据类型的字符。我们知道字符中,英文字符只需要一个字节存储就足够了,但汉字众多,需要两个字节存储,英文 与汉字同时存在时容易造成混乱,Unicode字符集就是为了解决字符集这种不兼容的问题而产生的,它所有的字符都用两个字节表示,即英文字符也是用两个 字节表示。nchar、nvarchar的长度是在1到4000之间。和char、varchar比较起来,nchar、nvarchar则最多存储 4000个字符,不论是英文还是汉字;而char、varchar最多能存储8000个英文,4000个汉字。可以看出使用nchar、nvarchar 数据类型时不用担心输入的字符是英文还是汉字,较为方便,但在存储英文时数量上有些损失。

所以一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar

MySQL数字类型中的三种常用种类

以下的文章主要讲述的是MySQL数字类型的三种常用种类,我们大家都知道,不管是微小免费的MySQL数据库空间,还是比较大型的电子商务网站,对于相关的数据库来说其合理的相关设计表结构、充分利用空间都是十分必要的。

这就要求我们对数据库系统的常用数据类型有充分的认识和合理的应用。下面我们将给大家介绍一点心得体会希望能帮助你在建库的时候能考虑的更加合理。

数字类型

MySQL数字类型按照我的分类方法分为三类:整数类、小数类和数字类。

MySQL数字类型之一我所谓的“数字类”

就是指 DECIMAL 和 NUMERIC,它们是同一种类型。它严格的说不是一种数字类型,因为他们实际上是将数字以字符串形式保存的;他的值的每一位 (包括小数点) 占一个字节的存储空间,因此这种类型耗费空间比较大。但是它的一个突出的优点是小数的位数固定,在运算中不会“失真”,所以比较适合用于“价格”、“金额”这样对精度要求不高但准确度要求非常高的字段。

MySQL数字类型之二小数类

即浮点数类型,根据精度的不同,有 FLOAT 和 DOUBLE 两种。它们的优势是精确度,FLOAT 可以表示绝对值非常小、小到约 1.17E-38 (0.000...0117,小数点后面有 37 个零) 的小数,而 DOUBLE 更是可以表示绝对值小到约 2.22E-308 (0.000...0222,小数点后面有 307 个零) 的小数。

FLOAT 类型和 DOUBLE 类型占用存储空间分别是 4 字节和 8 字节。如果需要用到小数的字段,精度要求不高的,当然用 FLOAT 了。可是说句实在话,我们“民用”的数据,哪有要求精度那么高的呢?这两种类型至今我没有用过――我还没有遇到适合于使用它们的事例。

MySQL数字类型之三整数类

用的最多的,最值得精打细算的,是整数类型。从只占一个字节存储空间的 TINYINT 到占 8 个字节的 BIGINT,挑选一个“够用”并且占用存储空间最小的类型是设计数据库时应该考虑的。TINYINT、SMALLINT、MEDIUMINT、INT 和 BIGINT 占用存储空间分别为 1 字节、2 字节、3 字节、4 字节和 8 字节,就无符号的整数而言,这些类型能表示的最大整数分别为 255、65535、16777215、4294967295 和 18446744073709551615。

如果用来保存用户的年龄 (举例来说,数据库中保存年龄是不可取的),用 TINYINT 就够了;九城的《纵横》里,各项技能值,用 SMALLINT 也够了;如果要用作一个肯定不会超过 16000000 行的表的 AUTO_INCREMENT 的 IDENTIFY 字段,当然用 MEDIUMINT 不用 INT,试想,每行节约一个字节,16000000 行可以节约 10 兆多呢。

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

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

相关文章

mysql 社区版密码如何修改_如何用优雅的方法修改MySQL root密码

搭噶好&#xff0c;我系小编&#xff0c;我好久没发文章了啊&#xff0c;今天发文章的原因是&#xff0c;我竟然忘了我的MySQL root密码。。本来想找RAKsmart客服直接重置啥的&#xff0c;后来想想还是自己搞吧&#xff0c;还能长知识。然后&#xff0c;我发现一个事情&#xf…

python全局变量赋值_Python全局变量和局部变量

python中&#xff0c;对于变量作用域的规定有些不一样。在诸如C/C、java等编程语言中&#xff0c;默认在函数的内部是能够直接訪问在函数外定义的全局变量的&#xff0c;可是这一点在python中就会有问题。以下是一个样例。test.py:#!/usr/bin/pythonCOUNT1def func():COUNT CO…

mysql dos入门_在dos上操作mysql的基本?

2安装:A,双击运行“mysql-5.5.27-win32.msi”B,MySQL安装向导启动C,按“Next”继续3配置&#xff1a;MySQL是现在流行的关系数据库中其中的一种&#xff0c;相比其它的数据库管理系统(DBMS)来说&#xff0c;MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健…

python读取api接口频率_Python基础(API接口测试)

importflask,json,pymysqlfrom flask importrequest, jsonify, Responsefrom datetime importdatetimefrom flask_cors importCORSdbpymysql.Connect(hostlocalhost,port3306,userroot,passwd24576946,dbschool,)cursordb.cursor()server flask.Flask(__name__)#允许跨域访问CO…

mysql初始化脚本建表_mysql新建表修改表sql脚本

新建表语句&#xff1a;-- ------------------------------------------------- 全量脚本-- ------------------------------------------------- 创建表 compet_info(大赛信息)的当前表SELECT Create Table compet_info-大赛信息...;DROP TABLE IF EXISTS compet_info;CREATE …

中countif函数_Count系列函数-Count、Counta、Countblank、Countif、Countifs

统计函数在我们的日常工作中也会经常使用。常见的有Count、Counta、Countblank、Countif、Countifs五个。Count用于统计数据类型的单元格个数&#xff0c;Counta用于统计非空单元格的个数&#xff0c;Countblank用于统计空单元格的个数&#xff0c;而Countif、Countifs用于条件…

labview实例_手把手以实例教你学LabVIEW编程,条件结构编程方法

LabVIEW又称为G语言&#xff0c;简单易学、形象直观&#xff0c;采用图形化的编程方式&#xff0c;是专为测试、测量和控制应用而设计的系统工程软件。在上篇文章(请参考&#xff1a;顺序结构编程)中已经讲了顺序结构的编程方法&#xff0c;下面通过具体例子演示条件结构的编程…

mysql数据变化通通知机制_深入理解Notification机制

先贴上这些源码里面相关的文件&#xff1a;framework/base/core/java/android/app/NotificationManager.javaframework/base/services/java/com/android/server/NotificationManagerService.java{hide} extends INotificationManager.Stubframework/base/services/java/com/and…

python与h5结合实例_使用h5py合并所有h5文件

您需要的是文件中所有数据集的列表。我认为这里需要的是recursive function的概念。这将允许您从一个组中提取所有的“数据集”&#xff0c;但是当其中一个看起来是组本身时&#xff0c;递归地执行相同的操作&#xff0c;直到找到所有数据集为止。例如&#xff1a;/|- dataset1…

vfp 调用 mysql uft-8 connstring_(最全的数据库连接字符串)connectionstring

PS:如果不是太稳定的数据库&#xff0c;最好使用connection lifetime10来限制连接池内连接的生存日期Standard Security:"Driver{SQL Server};ServerAron1;Databasepubs;Uidsa;Pwdasdasd;"Trusted connection:"Driver{SQL Server};ServerAron1;Databasepubs;Tru…

python3ide手机端怎么样_各大Python IDE的优缺点,看看哪种最适合你?

写 Python 代码最好的方式莫过于使用集成开发环境(IDE)了。它们不仅能使你的工作更加简单、更具逻辑性&#xff0c;还能够提升编程体验和效率。每个人都知道这一点。而问题在于&#xff0c;如何从众多选项中选择最好的 Python 开发环境。初级开发者往往面临这个问题。本文将概述…

八大算法python实现_python实现协同过滤推荐算法完整代码示例

测试数据协同过滤推荐算法主要分为&#xff1a;1、基于用户。根据相邻用户&#xff0c;预测当前用户没有偏好的未涉及物品&#xff0c;计算得到一个排序的物品列表进行推荐2、基于物品。如喜欢物品A的用户都喜欢物品C&#xff0c;那么可以知道物品A与物品C的相似度很高&#xf…

用递归与分治策略求解网球循环赛日程表_算法设计:分治法(比赛日程安排)...

一、算法思路1、思路分治算法的思想是&#xff1a;对于一个规模位N的问题&#xff0c;若该问题可以容易解决(比如规模N较小)&#xff0c;则直接解决&#xff0c;否则将其分解为M个规模较小的子问题&#xff0c;这些子问题互相独立&#xff0c;并且与原问题形式相同&#xff0c;…

python请编写程序、生成随机密码_利用Python如何生成随机密码

本位实例为大家分享了Python生成随机密码的实现过程&#xff0c;供大家参考&#xff0c;具体内容如下写了个程序&#xff0c;主要是用来检测MySQL数据库的空密码和弱密码的&#xff0c;在这里&#xff0c;定义了三类弱密码&#xff1a;1. 连续数字&#xff0c;譬如123456&#…

centos6.5装mysql好难_centos 6.5装mysql5.7

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼报错er-5.7.17-1.el7.i686 需要--> 处理依赖关系 libc.so.6(GLIBC_2.17)&#xff0c;它被软件包 mysql-community-server-5.7.17-1.el7.i686 需要--> 完成依赖关系计算错误&#xff1a;Package: mysql-community-client-5.7.…

聚类算法 距离矩阵_谱聚类

比起传统的K-means算法&#xff0c;谱聚类对数据分布的适应性更强&#xff0c;计算量也要小很多。1. 谱聚类概述谱聚类是从图论中演化出来&#xff0c;主要思想是吧所有的数据看作空间中的点&#xff0c;这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低&#…

core mysql 延迟加载_mybatis延迟加载及实例讲解

延迟加载基本概念上面我们已经知道使用association、collection可以实现一对一及一对多映射&#xff0c;association、collection还有另外一个延迟加载的功能。延迟加载(lazy load)是关联对象默认的加载方式&#xff0c;延迟加载机制是为了避免一些无谓的性能开销而提出来的&am…

mysql忘记i密码_Mysql忘记密码处理过程

最近项目用到了Mysql&#xff0c;项目里面没有运维人员&#xff0c;项目经理吩咐我在Linux下搭基础环境&#xff0c;其中遇到各种坑&#xff0c;现在记录一下&#xff0c;方便以后使用。以下内容是从网上摘抄过了的&#xff0c;若有侵权&#xff0c;请联系本人删除。1.mysql5.7…

vlan划分不能上网_VLAN工作原理

什么是VLANVLAN(Virtual LAN)&#xff0c;翻译成中文是“虚拟局域网”。可以看做是在一个物理局域网络上搭建出几个逻辑上分离的几个局域网。举个例子来说&#xff0c;如果一个交换机划分为两个VLAN&#xff0c;则相当于这台交换机逻辑上划分为两个交换机。VLAN的一个简单直观说…

mysql查询条件是小数 查不到6.28_28.mysql数据库之查询

1.查询语句mysql 多表关系 查询语句 索引1.添加数据补充:将一个查询结果插入到另一张表中create table student(name char(10),gender int);insert into student values("jack",1);insert into student values("rose",0);create table student_man(name ch…