char是固定长度类型

varchar是可变的长度类型

char和varchar类型相似,但是它们的存储和检索方式不同。在MySQL5.0.3,它们在最大长度和是否保留尾部空格也不相同。

char和varchar定义了字符串的最大长度。例如,char(30)可以放30个字符。

char列的长度在你建表的时候,就是你定义的固定长度。值的范围是0~255。char值存储的时候,右部以空格来填充到指定的长度。当检索char的时候,会自动去掉尾部的空格。

varchar列是变长的。在MySQL5.0.3之前可以定义的长度是0~255,之后可以定义到0~65535。在MySQL5.0.3及以后的版本中varchar列的有效长度,受行的最大值和使用的字符限制。

对比char,varchar,加上前缀的数据长度是当做一个字节还是两个字节存储。这个前缀的长度表明了值的字节数。如果值不超过255的话,这个列用一个字节的长度,如果这个值可能超过255个字节,那么就使用两个字节的长度。

如果严格的SQL模式没有启用,你分配了一个char或者varchar列超出了列的最大长度,那么这个值就会被截短以填充列,这时候就会产生一个警告。对于截短的非空格字符,你可以设置严格的SQL模式,来产生一个错误。

对于varchar列来说,SQL模式在启用的时候,大量的尾部空格在插入之前都会被截短,产生一个警告。对于char列来说,不管SQL模式是否被启用,都会静默地去掉插入值的过量的尾部空格。

varchar值存储的时候是不会填充的。如何处理尾部空格,取决于版本。在MySQL5.0.3中,当值存储和检索的时候,保留尾部空格,和标准的SQL保持一致。在MySQL5.0.3之前,值被保存到varchar列的时候,尾部空格会被剔除。这样也就意味着检索值的时候,也不存在这些空格。

在MySQL5.0.3之前,如果你需要一个不去掉尾部空格的数据类型的时候,要考虑BLOB或者TEXT类型。同样当你存储加密数据或者压缩数据的时候,也要使用BLOB列,而不是char或者varchar列,来避免需要改变值的时候,尾部空格的潜在问题。

下面的表格来说明char和varchar的存储方式和显示结果的差别。(假设列用的很简单的字符,使用latin1编码)

char varchar java_在数据库中varchar与char的区别相关推荐

  1. numeric转换varchar_数据库中varchar类型数据转换为numeric类型

    关于数据库中varchar/nvarchar类型数据的获取注意事项 当在页面后台获取数据库表中某字段的数据时,需注意该数据的类型.防止因实际数据的字符长度因达不到指定数据类型规定的字符长度而导致空格的 ...

  2. mysql 数据库中varchar的存储单位是什么

    一.先了解字节与字符 字节(Byte)是计量单位,表示数据量多少,是计算机信息技术用于计量存储容量的一种计量单位,通常情况下一字节等于八位. 字符(Character)计算机中使用的字母.数字.字和符 ...

  3. mysql id in set_mysql数据库中find_in_set()和in()用法区别

    mysql数据库中find_in_set()和in()用法区别 (2015-07-19 08:30:21) 标签: mysql数据库 find_in_set 在mysql中in可以包括指定的数字,而f ...

  4. 金仓数据库KingbaseES数据库中存储过程和函数的区别

    关键字:存储过程 函数 KingbaseES数据库中存储过程和函数的区别如下表所示: 存储过程 函数 1 用于在数据库中完成特定的操作或者任务(如插入.删除等)  用于特定的数据(如选择) 2 程序头 ...

  5. oracle中call用法,Oracle数据库中 call 和 exec的区别

    Oracle数据库中 call 和 exec的区别 今天发现了一个小东西,觉得很有意思,查找了一些资料,跟大家分享一下: 在sqlplus中: 在第三方提供的工具(如:plsqldev) 总结: ex ...

  6. 数据库中varchar类型 最大长度是多少?

    一. varchar存储规则: 4.0版本以下,varchar(20),指的是20字节,如果存放UTF8汉字时,只能存6个(每个汉字3字节)  5.0版本以上,varchar(20),指的是20字符, ...

  7. mysql的to char data_数据库中的to char

    Oralce中设置小数点位数 假如数据库中有一个字段为zdt8,是数值类型的,即使是数字0,也想显示成0.00,则使用to_char函数转换一下 to_char(NVL(zdt8,0.00),'fm9 ...

  8. mysql schema table_关于数据库中table与schema的区别详解

    什么是Database,什么是Schema,什么是Table,什么是列,什么是行,什么是User? 相关mysql视频教程推荐:<mysql教程> 我们可以把Database看作是一个大仓 ...

  9. 数据库中视图和表的区别

    数据库中的数据都是存储在表中的,而视图只是一个或多个表依照某个条件啊=组合而成的结果集,一般来说你可以用update,insert,delete等SQL语句修改表中的数据,而对视图只能进行select ...

最新文章

  1. Python判断文件、文件夹是否存在,不存在则创建
  2. 等比数列和的快速求法
  3. leetcode 202. 快乐数 思考分析(哈希集合与双指针解)
  4. SQL SERVER 2008的top增强
  5. NYOJ277 - 车牌号
  6. 10. 了解分配子(allocateor)的约定和限制
  7. cousera视频无法加载
  8. selenium元素模糊定位xpath contains、starts-with和ends-with
  9. 《滕王阁序》古文鉴赏
  10. 计算机病毒 笑话,轻松一刻:因为男生的电脑容易中病毒
  11. [redis]Redis ZSet排序问题(排名实现按时间顺序排布)
  12. kvm最多能管几台服务器,高效管理500台服务器的kvm切换器配置方案
  13. MinDoc 接口文档在线管理系统
  14. python 批量修改图片的名字
  15. ShareSDK iOS端微信如何获取authcode值
  16. selenium爬堆糖网壁纸
  17. 使用geotools构建特殊的多边形
  18. 24个好用到爆的Python实用技巧
  19. WPF基础笔记(5)画刷
  20. 不一样的表白方式!打开手机地图搜索它,就会出现心形!

热门文章

  1. 依赖注入在 dotnet core 中实现与使用:2 使用 Extensions DependencyInjection
  2. 程序员你写的代码,被人挖出了黑产
  3. 基于Masstransit实现Eventbus的功能
  4. Skywalking部署常见问题以及注意事项
  5. 微软全都要!Win10引入真Linux内核
  6. 我们为什么要搞长沙.NET技术社区(三)
  7. 直播视频发布:Windows上的Linux容器和Azure混合云中的Kubernetes(k8s)
  8. 使用Swashbuckle构建RESTful风格文档
  9. 物联网框架ServerSuperIO在.NetCore实现跨平台的实践路线
  10. Actor-ES框架:Actor编写-ESGrain与ESRepGrain