mysql中char、varchar、nvarchar数据类型的用法区别
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了mysql中char、varchar、nvarchar数据类型的用法区别,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4823字,纯文字阅读大概需要7分钟。
内容图文
![mysql中char、varchar、nvarchar数据类型的用法区别](/upload/InfoBanner/zyjiaocheng/544/c9acc0ab49da46518991e84d3d34ece0.jpg)
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数据类型的用法区别全部内容,希望文章能够帮你解决mysql中char、varchar、nvarchar数据类型的用法区别所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。