在本文中,您将会了解到关于mysql中的varchar的新资讯,同时我们还将为您解释100声明使用多少实际存储空间?的相关在本文中,我们将带你探索mysql中的varchar的奥秘,分析100声明使用
在本文中,您将会了解到关于mysql中的varchar的新资讯,同时我们还将为您解释100声明使用多少实际存储空间?的相关在本文中,我们将带你探索mysql中的varchar的奥秘,分析100声明使用多少实际存储空间?的特点,并给出一些关于CHAR()或VARCHAR()作为ISAM MySQL表中的主键?、mysql中char、varchar、nvarchar数据类型的用法区别、MySQL中char、varchar和nvarchar的区别、MySQL中int(10)和char(10)和varchar(10)的区别的实用技巧。
本文目录一览:- mysql中的varchar(100)声明使用多少实际存储空间?(mysql数据库varchar(10)占多少个字节)
- CHAR()或VARCHAR()作为ISAM MySQL表中的主键?
- mysql中char、varchar、nvarchar数据类型的用法区别
- MySQL中char、varchar和nvarchar的区别
- MySQL中int(10)和char(10)和varchar(10)的区别
mysql中的varchar(100)声明使用多少实际存储空间?(mysql数据库varchar(10)占多少个字节)
如果我有一个表,该表的字段声明为接受varchar(100),然后实际上插入单词“
hello”,那么在mysql服务器上将使用多少实际存储空间?即使声明了varchar(100),插入NULL也会导致不使用任何存储吗?
答案是什么,在不同的数据库实现中是否一致?
CHAR()或VARCHAR()作为ISAM MySQL表中的主键?
我需要一个简单的表,其中包含MySQL中的用户名和密码字段。由于用户名必须唯一,因此对我来说,将它们设置为主键是有意义的。
使用CHAR()
还是VARCHAR()
作为主键更好?
答案1
小编典典可能还只是使用用户ID索引,所以与vs / char /
varchar相比,连接要快得多。如果您不小心扩展了架构的功能,那么现在添加所需的两秒钟时间可以为您节省很多时间。
要考虑的一些陷阱:
- 说我们在将来的日期添加一些表,如果有人要更改用户名怎么办?
- 说应用程序比我们认为的更成功,我们必须考虑优化,您是否真的想在此时重做架构以减少varchar’ed索引的开销?
mysql中char、varchar、nvarchar数据类型的用法区别
mysql中char、varchar、nvarchar数据类型的用法区别 有需要的朋友可
说明:
1、char:
固定长度的非 Unicode 字符数据,最大长度为 8,000 个字符。
2、varchar:
可变长度的非 Unicode 数据,最长为 8,000 个字符。
3、nvarchar:
可变长度 Unicode 数据,其最大长度为 4,000 字符。
4、nchar
固定长度的 Unicode 数据,最大长度为 4,000 个字符。
5、char和varchar都是字符串类型的
用Unicode编码的字符串,结果是字符的整数值
如有以下数据结构:
工号 姓名 部门
———————–
1 张三 财务
2 李四 人事
3 王五 销售
……..
我们定义”姓名”为char(10)(静态)的时简单地用php代码表示:
简单地模拟底层数据存储链表$data
代码如下 | 复制代码 |
$col_num_len =1; //工号长度为1 $col_name_len=10; //姓名长度为10 $col_unit_len =4; //部门长度为4 $col_len=$col_num_len+$col_name_len+$col_unit_len+3; |
//表示每笔记录的总长度,包括3个分隔符
实现如下:
代码如下 | 复制代码 |
$data="1|张三 |财务|2|李四 |人事|3|王五 |销售|..."; //简单地模拟底层数据存储链表 //假设查找第2条记录的"姓名"字段数据 |
-----------
代码如下 | 复制代码 |
//假设更新第2条记录的"姓名"字段数据为"李小四" $update_info="李小四"; $data=substr_replace($data,$update_info,$col_name_start,$col_name_len); //更新字段,流程结束 而如果我们定义”姓名”字段为varchar(10)(动态)的时候情况则要复杂: 注意存储”姓名”的字段没有空格,这是char和varchar的存储区别 $col_num_len =1; //工号长度为1 $col_name_len=10; //姓名长度为10 $col_unit_len =4; //部门长度为4 $col_len=$col_num_len+$col_name_len+$col_unit_len+3; |
实现如下:
代码如下 | 复制代码 |
//动态存放数据行的起始位置,数据为更新时生成(重新) $data="1|张三|财务|2|李四|人事|3|王小明|销售|..."; //简单地模拟底层数据存储链表,注意存储"姓名"的字段没有空格 //假设查找第2条记录的"姓名"字段数据 //假设更新第2条记录的"姓名"字段数据为"李小四",这边比静态的复杂很多 //在此假设总记录数为n $data=substr_replace($data,$update_info,$col_name_start,0); |
文中直接使用”substr_replace”,而在数据量很大的时候,底层实现上的开销也是不小的,在mysql中表现为(Row Migration)现象,在此不作赘述
根据以上的粗略实现证明:
1、varchar类型在更新环节上的系统开销是远大于char类型的。
2、两者间查找搜索性能上是不相上下的。
3、两者间的存储数据量($data)环节上,char要显示大于varchar。
4、大数据量提取时varchar的磁盘IO消耗更低,意味着varchar综合查询性能会更好。
5、没有了。
实际应用中的结论(如在mysql中):
1、char适合字段频繁更新时的应用。
2、varchar更节省磁盘空间。
3、实际应用中大数据量(多行)查询返回,varchar的查询性能比起char来要好出不少。
4、选择char和varchar会改变整体数据结构的算法以及存储方式。在mysql应用中,如已存在varchar字段,那么其它所有的char字段将以varchar方式存储。
5、没有了。
(以上算法仅以PHP简单描述,欢迎更好的思路加以指教)
注:此文原作者的写作时间比较久远了,所以有些地方和现在的有些出入,体现在:
1.在innodb引擎中,char和varchar的实现已无异,效率上并没多大区别。
2.选择char和varchar并不会改变整体数据结构的算法以及存储方式。(我记得这是在MYSQL4里的特性,网上的老文章有讲述,到了MYSQL5实测已无此特性)
总结分析:
文字字段若长度固定,如:身分证号码,就不要用 varchar 或 nvarchar,应该用 char 或 nchar。
支持多语言的站点应考虑使用 Unicode nchar 或 nvarchar 数据类型以尽量减少字符转换问题
文字字段若长度不固定,如:地址,则该用 varchar 或 nvarchar。除了可节省存储空间外,存取硬盘时也会较有效率
MySQL中char、varchar和nvarchar的区别
一、char和varchar的区别
char是固定长度的,而varchar会根据具体的长度来使用存储空间,另外varchar需要用额外的1-2个字节存储字符串长度。
1). 当字符串长度小于255时,用额外的1个字节来记录长度
2). 当字符串长度大于255时,用额外的2个字节来记录长度
比如char(255)和varchar(255),在存储字符串"hello world"时,char会用一块255个字节的空间放那个11个字符;而varchar就不会用255个,它先计算字符串长度为11,然后再加上一个记录字符串长度的字节,一共用12个字节存储,这样varchar在存储不确定长度的字符串时会大大减少存储空间。
二、varchar和nvarchar的区别
1. varchar(n):长度为n个字节的可变长度且非Unicode的字符数据。n必须是一个介于1和8,000之间的数值。存储大小为输入数据的字节的实际长度
2. nvarchar(n):包含n个字符的可变长度Unicode字符数据。n的值必须介于1与4,000之间。字节的存储大小是所输入字符个数的两倍。所输入的数据字符长度可以为零。
三、char和varchar的使用场景
1. 从字符长度的角度考虑:
(1). 长度较短的字段,使用char。如门牌号:101,201,...
(2). 固定长度的字段,使用char。如性别、身份证号、手机号等。(因为数据都是固定长度,varchar根据长度动态存储的特性就没作用了,而且还要占一个字节来存储长度)
(3). 字段的长度是否相近,如果某个字段其长度虽然比较长,但是其长度总是近似的,如一般在90个到100个字符之间,甚至是相同的长度。此时比较适合采用CHAR字符类型。
2. 从碎片角度考虑:
使用CHAR时,由于存储空间都是一次性分配的。从这个角度来讲,不存在碎片的困扰。而使用varchar时,因为存储的长度是可变的,当数据长度在更改前后不一致时,就不可避免地会出现碎片的问题。故使用varchar时,数据库管理员要时不时的对碎片进行整理。如执行数据库导出导入作业来消除碎片。
3. 即使使用Varchar数据类型,也不能够太过于慷慨。
虽然varchar可以自动根据长度调整存储空间,但是varchar(100)和varchar(255)还是有区别的:
假设它们都存储了90个字符的数据,那么它们在磁盘上的存储空间是相同的(硬盘上的存储空间是根据实际字符长度来分配存储空间的)。但对于内存来说,则不是这样的,内存是使用varchar中定义的长度(这里为100或255)的内存块来保存值。
所以如果某些字段会涉及到文件排序或者基于磁盘的临时表时,分配VARCHAR的长度时仍然不能过于慷慨,需要评估实际需要的长度,然后设置一个合适的长度,不能随意设置长度。
四、varchar和nvarchar的使用场景
1. nvarchar适用中文和其他字符,其中N表示Unicode编码,可以解决多语言之间的转换问题
参考:https://www.jb51.net/article/55366.htm
MySQL中int(10)和char(10)和varchar(10)的区别
int(10)中的10表示的是显示数据的长度,而char(10)和varchar(10)中的10表示的是存储数据的大小。
关于mysql中的varchar和100声明使用多少实际存储空间?的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于CHAR()或VARCHAR()作为ISAM MySQL表中的主键?、mysql中char、varchar、nvarchar数据类型的用法区别、MySQL中char、varchar和nvarchar的区别、MySQL中int(10)和char(10)和varchar(10)的区别等相关知识的信息别忘了在本站进行查找喔。
本文标签: