1、VARCHAR (50) 中的 50 到底是能存 50 个字还是50 个字节

mysql root@(none):imooc_mysql_interview> create varchar_test(clo_1 varchar(8));
mysql root@(none):imooc_mysql_interview> insert into varchar_test values("123456789")
(1406, "Data too long for column 'clo_1' at row 1")
mysql root@(none):imooc_mysql_interview> insert into varchar_test values("12345678")
Query OK, 1 row affected
Time: 0.006s
mysql root@(none):imooc_mysql_interview> insert into varchar_test values("数一数是不是八个");
Query OK, 1 row affected
Time: 0.005s

从上述实验的结果可知,显然是能存 8 个字符而不是 8 个字节,也就是说 VARCHAR 的括号中的数字代表的是字符。

2、CHAR (50) 和 VARCHAR (50) 有什么区别?

首先要说明的一点, CHAR 和 VARCHAR 在存储方式上存在着差异: CHAR是定长字符, MySQL 数据库会根据建表时定义的长度给它分配相应的存储空间。
而 VARCHAR 是可变长度字符的数据类型,在存储时只使用必要的空间。

举个例子,假如一张表上有两列,分别是 CHAR (20) 和 VARCHAR (20),我们插入一个字符串 “abcd”,在数据库中存储时, CHAR 会使用全部的 20 个字符
的长度,不足的部分用空格填充,而 VARCHAR 仅仅就只使用 4 个字符的长度。

其次,由于 CHAR 数据类型的这个特性,在将数据写入表中时, 如果字符串尾部存在空格,会被自动删除,而 VARCHAR 数据类型会保留这个空格。在一些
特殊场景中要注意这个问题。所以推荐你使用 CHAR 数据类型存储一些固定长度的字符串,比如身份证号、手机号、性别等。

最后, CHAR 和 VARCHAR 的存储长度不同。 CHAR 数据类型可定义的最大长度是 255 个字符,而 VARCHAR 根据所使用的字符集不同,最大可以使用65535 个字节

mysql root@(none):imooc_mysql_interview> alter table varchar_test add col_2 char(256) NULL DEFAULT '';
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
(1074, "Column length too big for column 'col_2' (max = 255); use BLOB or TEXT instead")
mysql root@(none):imooc_mysql_interview> alter table varchar_test add col_2 varchar(65535) NULL DEFAULT '';
You're about to run a destructive command.
Do you want to proceed? (y/n): y
Your call!
(1074, "Column length too big for column 'col_2' (max = 16383); use BLOB or TEXT instead")

可以看出,char数据类型可定义的最大长度是 255 个字符。超过255系统会提示错误。varchar数据类型最大可以使用65535 个字节,常用中文字符用utf-8编码占用3个字节(大约2万多字),但超大字符集中的更大多数汉字要占4个字节(在unicode编码体系中,U+20000开始有5万多汉字),65535/4=16383

3、VARCHAR 数据类型优化

虽然使用 VARCHAR (50) 和 VARCHAR (1000) 存储‘abcd’的存储空间开销是一样的,但是当你在读取数据时,把这些数据读取到内存的过程中, MySQL 数
据库需要分配相应大小的内存空间来存放数据。

所以更大的 VARCHAR 列在读取时要使用更大的内存空间,即使它实际上只存储了一丁点数据。并且在操作这个表的过程中,如果遇到一些聚合(GROUP BY)或排序(ORDERBY)的操作,需要调用内存临时表或磁盘临时表时,性能会更加糟糕。

因此, 在保留一定冗余的前提下,只给 VARCHAR 分配恰到好处的空间使用

4、INT、 INT (1)、和 INT (20)

INT 定义中的数字只是表示显示宽度,它并不限制 MySQL 的实际存储空间。因此在开发工作中不要把 INT (1) 当初 TINYINT 来用,也千万不要把 INT (20)
当成 BIGINT 用。

对于 UNSIGNED 这个属性,最适合的场景就是主键自增值,或者一些不允许出现负数的应用中。在使用时要注意带有 UNSIGNED 的字段,在做计算时如果出
现负数可能会报错

数据库字段类型CHAR和INT相关推荐

  1. [oracle]数据库字段类型char(n)的问题

    情景描述:给一个公司修改他们做的系统门户.需要通过用户id读取用户所属部门名称.数据库用的oracle,有两张表,一个是用户表,里面有一个部门编号字段类型为char[12],一个是关联表可通过部门编号 ...

  2. 数据库字段类型——char

    直奔主题,例如表字段如下: create table test_tab( type char(3) ) 如果我们在前端传值,type给的值为"1",那么保存在数据库中此条记录typ ...

  3. java中常见数据库字段类型与java.sql.Types的对应

    转自:http://blog.csdn.net/hbzyaxiu520/article/details/5457225 常见数据库字段类型与java.sql.Types的对应 Oracle与java. ...

  4. java.sql.Types,数据库字段类型,java数据类型的对应关系

    原文地址为: java.sql.Types,数据库字段类型,java数据类型的对应关系 以下转自:http://kummy.itpub.net/post/17165/172850 本文在原文基础上有增 ...

  5. 数据库字段类型、JDBC类型、Java类型映射关系

    数据库字段类型:指的就是数据库字段设置的类型. JDBC类型:java database connector的缩写. 不同的数据库为了能让Java 程序链接并使用数据库, 各个数据库厂商自己提供的驱动 ...

  6. 数据库字段类型、实体类字段类型、mapper文件jdbcType三者对应关系

    数据库字段类型.实体类字段类型.mapper文件jdbcType三者对应关系: 数据库字段类型 实体类字段类型 mapper文件jdbcType bigint Long JdbcType.BIGINT ...

  7. golang xorm框架对应pg数据库字段类型参照表

    1.左边是golang字段类型,右边是pg数据库字段类型 int integer time.Time timestamp int8 smallint float64 numeric(8,3) (只要是 ...

  8. mysql中数据库字段类型详解

    mysql中数据库字段类型详解 1,blob字段 mysql中blob是一个二进制大型对象,是一个可以储存大量数据的容器,它能容纳不同大小的数据. mysql中blob的四种类型除了存储数据的大小有区 ...

  9. 实体类与数据库字段类型

    实体类 /*实体类*/ @Column(precision = 12, scale = 3) private BigDecimal rate; //数据库字段类型 rate decimal(12,3) ...

最新文章

  1. 你是如何自学 Python 的?
  2. Java ConcurrentModificationException异常原因和解决方法
  3. 如此架构,泛滥架构,疯狂架构
  4. 病毒周报(081110至081116)
  5. 详解.NET中容易混淆的委托与接口
  6. ensp路由器无法启动_品胜云路由器Breed刷入详细教程,技巧和注意事项,功能大增...
  7. 《CCNA学习指南:Cisco网络设备互连(ICND1)(第4版)》——1.10节本章小结
  8. 创建多个虚拟环境 windows python Anacoda tensorflow
  9. NumPy Cookbook 带注释源码 十一、NumPy 的底牌
  10. Linux c实现一个tcp文件服务器和客户端
  11. 1061 判断题 (15 分)—PAT (Basic Level) Practice (中文)
  12. Unity3D学习 ④ Unity导入商店资源,实现基本的奔跑、攻击动作切换与交互
  13. Linux终端删除文件夹命令
  14. Python爬虫5-API和爬虫
  15. 一个互联网研发团队的标准配置
  16. C盘扩容好帮手——傲梅分区助手
  17. 基于单片机的智能台灯设计
  18. 计数排序 | Counting Sort
  19. Python爬虫入门9:BeautifulSoup快速查找HTML内容
  20. 得意不张狂失败不气妥

热门文章

  1. [LQR简要快速入门]+[一级倒立摆的LQR控制]
  2. 容器编排工具—Kubernetes
  3. VS Code C++ 代码格式化方法(clang-format)
  4. dst发育筛查有意义吗_Dst发育筛查是什么?
  5. java 迭代器的hasnext,在Python迭代器中具有hasNext?
  6. 用html实现模糊效果,纯html css实现动态高斯模糊效果(第二弹),实现导航条动态模糊内容...
  7. 【docker】出现segmentation fault,如何导出转储
  8. swap函数中的交换 【指针】 学习笔记
  9. RN8209C单相电量计量芯片调试记录
  10. HTTPSConnectionPool(host=‘files.pythonhosted.org‘, port=443): Read timed out.