mysql string 列类型
CHAR和VARCHAR
CHAR和VARCHAR类型声明的长度表示你想要保存的最大字符数
char 0~255 尾部填充空格到指定长度,检索时自动去掉空格。
varchar 0~65535
VARCHAR值保存时只保存需要的字符数,另加一个字节来记录长度(,则使用两个字节)。
不进行空格填充
注意
受限于mysql单行最大字节(InnoDB,65535),考虑到编码
如果为latin1,则varchar最大为 65535-2-1=65532(null标志位占用一个字节,长度最大占用两个字节)
如果为utf-8,则varchar最大为 65532/3 = 21844,虽然理论值为 65535/3=21845
综上,如果varchar的数值过大,应该采用text类型,该类型可以存储65535个字符。
参考:
https://stackoverflow.com/questions/332798/equivalent-of-varcharmax-in-mysql
https://dev.mysql.com/doc/refman/5.7/en/column-count-limit.html
所有MySQL校对规则属于PADSPACE类。
这说明在MySQL中的所有CHAR和VARCHAR值比较时不需要考虑任何尾部空格
BINARY和VARBINARY
没有字符集,并且排序和比较基于列值字节的数值值
BINARY和VARBINARY允许的最大长度一样
长度是字节长度而不是字符长度
binary:填充值是0x00(零字节),插入填充,取出不剪裁
varbinary:不填充、不剪裁
如果检索的值必须与指定进行存储而没有填充的值相同,最好使用BLOB数据类型。
BLOB和TEXT类型
BLOB 列被视为二进制字符串(字节字符串)。
BLOB列没有字符集,并且排序和比较基于列值字节的数值值。
TEXT列被视为非二进制字符串(字符字符串)。
TEXT列有一个字符集,并且根据字符集的 校对规则对值进行排序和比较。
在大多数方面,可以将BLOB列视为能够足够大的VARBINARY列。同样,可以将TEXT列视为VARCHAR列
BLOB和TEXT在以下几个方面不同于VARBINARY和VARCHAR:
当保存或检索BLOB和TEXT列的值时不删除尾部空格。(这与VARBINARY和VARCHAR列相同)。
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
BLOB和TEXT列不能有 默认值。
排序时也要指定参与排序的长度。(max_sort_length)
对于BLOB和TEXT列的索引,必须指定索引前缀的长度。对于CHAR和VARCHAR,前缀长度是可选的。
BLOB和TEXT类需要 、2、3或者4个字节来记录列值的长度,取决于该类的最大可能的长度
列类型存储需求
MyISAM表中行的最大大小为65,534字节(innodb 65535)。至9个字节
要想计算用于保存具体CHAR、VARCHAR或者TEXT列值的字节数,需要考虑该列使用的字符集。
字符串类型的存储需求
|
列类型 |
存储需求 |
|
CHAR(M) |
M个字节,0 <= M <= 255 |
|
VARCHAR(M) |
L+1个字节,其中L <= M 且0 <= M <= 65535(参见下面的注释) |
|
BINARY(M) |
M个字节,0 <= M <= 255 |
|
VARBINARY(M) |
L+1个字节,其中L <= M 且0 <= M <= 255 |
|
TINYBLOB, TINYTEXT |
L+1个字节,其中L < 28 |
|
BLOB, TEXT |
L+2个字节,其中L < 216 |
|
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个成员) |
VARCHAR、BLOB和TEXT类是变长类型。每个类型的存储需求取决于列值的实际长度(用前面的表中的L表示),而不是该类型的最大可能的大小。例如,VARCHAR(10)列可以容纳最大长度为10的字符串。实际存储需求是字符串(L)的长度,加上一个记录字符串长度的字节。对于字符串'abcd',L是4,存储需要5个字节。
对于CHAR、VARCHAR和TEXT类型,前面的表中的值L和M应解释为字符数目,并且列定义中的这些类型的长度表示字符数目。例如,要想保存一个TINYTEXT值需要L字符+ 1个字节。
要想计算用于保存具体CHAR、VARCHAR或者TEXT列值的字节数,需要考虑该列使用的字符集。在具体情况中,当使用Unicode时,必须记住所有Unicode字符使用相同的字节数。为了细分用于不同类Unicode字符使用的存储,参见10.5节,“Unicode支持”。
注释:VARCHAR列的有效最大长度为65,532字符。
参考
mysql手册 列类型-string类型章节
http://www.cnblogs.com/gomysql/p/3615897.html
mysql string 列类型的更多相关文章
- 如何正确选择MySQL数据列类型
MySQL数据列类型选择是在我们设计表的时候经常会遇到的问题,下面就教您如何正确选择MySQL数据列类型,供您参考学习. 选择正确的数据列类型能大大提高数据库的性能和使数据库具有高扩展性.在选择MyS ...
- mysql 基础,列类型
- MySql学习 (一) —— 基本数据库操作语句、三大列类型
注:该MySql系列博客仅为个人学习笔记. 在使用MySql的时候,基本都是用图形化工具,如navicat.最近发现连最基本的创建表的语法都快忘了... 所以,想要重新系统性的学习下MySql,为后面 ...
- MySQL服务 - MySQL列类型、SQL模式、数据字典
MySQL列类型的作用: 列类型可以简单理解为用来对用户往列种存储数据时做某种范围"限定",它可以定义数据的有效值(字符.数字等).所能占据的最大存储空间.字符长度(定长或变长). ...
- mysql列类型
mysql三大列类型 整型 tinyint(占据空间:1个字节 存储范围 有符号 -128-127 无符号 0-255) smallint mediumint int big ...
- Django一对一查询,列类型及参数
一对一查询 表的创建 # 通过 OneToOneField 创建一对一的关系 from django.db import models # Create your models here. class ...
- MySQL支持的列类型
MySQL支持大量的列类型,它可以被分为3类:数字类型.日期和时间类型以及字符串(字符)类型.本节首先给出可用类型的一个概述,并且总结每个列类型的存储需求,然后提供每个类中的类型性质的更详细的描述. ...
- mysql修改表名,列名,列类型,添加表列,删除表列
alter table test rename test1; --修改表名 ); --添加表列 alter table test drop column name; --删除表列 ) --修改表列类型 ...
- mysql修改列名和列类型
MySQL中修改列名或列的数据类型 (2012-04-03 08:59:25) 转载▼ 标签: mysql 修改列名 修改列数据类型 it 分类: 数据库 参考下面链接中的语法 http://dev. ...
随机推荐
- 进程,线程,协程,io多路复用 总结
并发:要做到同时服务多个客户端,有三种技术 1. 进程并行,只能开到当前cpu个数的进程,但能用来处理计算型任务 ,开销最大 2. 如果并行不必要,那么可以考虑用线程并发,单位开销比进程小很多 线程: ...
- hive参数配置及任务优化
一.hive常用参数 0.常用参数 --@Name: --@Description: --@Type:全量加载 --@Author:--- --@CreateDate: --@Target: --@S ...
- SORT--不要仅限于题目中
输入n,m 表示输入n个数输出前m个最大的数 Input The input file contains many test cases. Each case has 2 lines. The fir ...
- HDU 5536 Chip Factory (暴力+01字典树)
<题目链接> 题目大意: 给定一个数字序列,让你从中找出三个不同的数,从而求出:$\max_{i,j,k} (s_i+s_j) \oplus s_k$的值. 解题分析:先建好01字典树,然 ...
- springboot整合视图层之jsp
在springboot中不推荐视图层使用jsp展示,但是人们以前已经习惯使用jsp,所以对jsp也有支持,但是是解耦性的.也就是说并没有像其他组件一样直接集成到启动器中,所以像jsp引擎之类的需要额外 ...
- 在Java中,关于.Class()与.getCalss与.getClass().getName()的区别
** * Java反射 *所谓反射,可以理解为在运行时期获取对象类型信息的操作. *传统的编程方法要求程序员在编译阶段决定使用的类型,但是在反射的帮助下, *编程人员可以动态获取这些信息,从而编写更加 ...
- 搭建vue脚手架---vue-cli
vue-cli作为一款mvvm框架语言(vue)的脚手架,集成了webpack环境及主要依赖,对于项目的搭建.打包.维护管理等都非常方便快捷.我们在开发项目时尤其需要这样一个快速构建项目的工具. 以下 ...
- Centos6.5部署Rsyslog+LogAnalyzer收集网络及系统日志
1. 介绍 Rsyslog是比syslog功能更强大的日志记录系统,可以将日志输出到文件,数据库和其它程序.可以使用rsyslog替换系统自带的syslog. LogAnalyzer 是一个 sysl ...
- JavaScript—异步提交表单的6种方式
FormData的详细介绍及使用请点击此处,那里对FormData的方法和事件已经表述的非常清楚,这里就不再浪费时间在介绍一遍了.本文主要针对FormData对象的使用以及异步文件上传进行详细的说明. ...
- 潭州课堂25班:Ph201805201 django 项目 第四十一课 后台 轮播图管理功能讲解,文档管理功能 实现 (课堂笔记)
在进入轮播图管理页面时,要把轮播图显示在页面上,所以后台要向前台返回: 图片路由,:image_url 优先级: priority def get(self, request): # priority ...