MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结
一.VARCHAR存储和行长度限制
1.VARCHAR(N)中,N指的是字符的长度,VARCHAR类型最大支持65535,指的是65535个字节,但并不支持65535长度的varchar,65535中应该包含了所有字段的长度、变长字段长度标示位、NULL标示位的累计。其中内容开头用1到2个字节表示实际长度(长度超过255时需要2个字节)。所以还有别的开销,实际能存放的长度为65532.
(MySQL数据库的varchar类型在5.0.3以下的版本中的最大长度限制为255,其数据范围可以是0~255)
2.因为null标示位占用了一个字节,所以可以去掉not null限制。
3.MySQL要求一个行的定义长度不能超过65535 是指所有列的长度总和不能超过65535.如果列的长度总和超过这个长度,依然无法创建.
二.VARCHAR长度的编码限制
1.概述
字符类型若为gbk,每个字符最多占2个字节,最大长度不能超过32766;
字符类型若为utf8,每个字符最多占3个字节,最大长度不能超过21845。
若定义的时候超过上述限制,则varchar字段会被强行转为text类型,并产生warning。
2.举例
(1)若一个表只有一个varchar类型,如定义为
create table t4(c varchar(N)) charset=gbk;
则此处N的最大值为(65535-1-2)/2= 32766。
减1的原因是实际行存储从第二个字节开始’;
减2的原因是varchar头部的2个字节表示长度;
除2的原因是字符编码是gbk。
(2) 若一个表定义为
create table t4(c int, c2 char(30), c3 varchar(N)) charset=utf8;
则此处N的最大值为 (65535-1-2-4-30*3)/3=21812
减1和减2与上例相同;
减4的原因是int类型的c占4个字节;
减30*3的原因是char(30)占用90个字节,编码是utf8。
如果被varchar超过上述的b规则,被强转成text类型,则每个字段占用定义长度为11字节,当然这已经不是“varchar”了。
三.关于SQL模式
在MySQL中,SQL模式常用来解决下面几类问题:
1.通过设置SQL Mode,可以完成不同严格程度的数据校验,有效地保障数据准确性。
2.通过设置SQL Mode为ANSI模式,来保证大多数SQL符合标准的SQL语法,这样应用在不同数据库之间进行迁移时,则不需要对业务SQL进行较大的修改。
3.在不同数据库之间进行数据迁移之前,通过设置SQL Mode可以使MySQL上的数据更方便地迁移到目标数据库中。
查看当SQL模式
mysql>select @@sql_mode;
STRICT_TRANS_TABLES(严格模式) 实现数据的严格校验,使错误数据不能插入表中.
如果将sql_mode设为'',则可能会出现可以建立表,但是会有一条警告信息,
mysql>set session sql_mode='';
mysql>create table test4(a varchar(25000)) charset=utf8;
mysql>show warnings;
警告信息提示了,之所以可以创建,是因为MySQL自动将VARCHAR转换成了Text类型。
mysql>show create table test4;
附:
1.UTF8编码介绍
http://zh.wikipedia.org/wiki/UTF8
2.查看字符集方法:
(1)查看MySQL数据库服务器和数据库MySQL字符集。
show variables like '%char%';
(2)查看MySQL数据表(table)的MySQL字符集。
show table status from dbName where name='tableName';
(3)查看MySQL数据列(column)的MySQL字符集。
show full columns from tableName;
参考:http://dinglin.iteye.com/blog/914276
转载于:https://www.cnblogs.com/huligong1234/archive/2012/06/20/2556651.html
MySQL学习笔记_关于MySQL的字符类型VARCHAR长度知识总结相关推荐
- MySQL学习笔记_上(select查询)
上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...
- MySQL学习笔记 04、MySQL进阶(索引、事务、锁)
文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...
- MySQL学习笔记 02、MySQL基础(覆盖基本知识点)
文章目录 前言 一.Mysql介绍 1.1.了解Mysql 1.2.认识Socket 1.3.查看设置变量(以及全局) 二.SQL 2.1.DCL(数据控制语言) 2.2.DDL(数据定义语言)重要 ...
- 【狂神说】MySQL学习笔记01----初识MySQL
狂神说MySQL系列连载课程,通俗易懂,基于MySQL5.7.19版本,欢迎各位狂粉转发关注学习. 狂神说B站MySQL视频教程请点这里 1.初识MySQL JavaEE:企业级Java开发.Web ...
- mysql初体验学习笔记_【MySQL】mycli初体验
早就听说mycli很好用,今天打算在本地测试机上装一下体验一把. 安装方法很是简单: 一.安装依赖: yum install python-pip python-devel 二.安装mycli pip ...
- 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)
无论何时,只要有多个查询需要在同一个时刻修改数据时,就会有并发问题.MySql主要在服务器层与存储引擎层进行并发控制. 假设数据库中国一张邮箱表,每个邮件都是一条记录.如果某个客户正在读取邮箱,同时其 ...
- MySQL学习笔记10:MySQL图形化管理工具 navicat 和 Workbench
MySQL图形化管理工具1:navicat for MySQL navicat for mysql视频介绍: http://www.imooc.com/video/3193/0 navicat for ...
- pandas学习笔记:某一列字符类型转换为离散的数值标签;将某一列数值类型转换成独热码
文章目录 将字符串变成离散的数值 将离散的数值变量变成独热码 import pandas as pd 将字符串变成离散的数值 整个"性别"列只有男和女 df = pd.DataFr ...
- MySQL 学习笔记②
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...
最新文章
- 盘点2020年10个最难忘的数据泄露事件
- 解决文字与下划线重叠的问题
- python 计时器 timeit 报错:ValueError: stmt is neither a string nor callable
- 数据库ORA-03113排查
- plsql 中的记录型变量和引用型变量
- 从 +new Date 说起,Javascript的一元操作符
- 电子邮件收发原理和实现(POP3, SMTP)
- idea创建maven程序_使用Maven程序集创建漏洞评估工件
- 路由器在多个OSPF进程下的路由学习问题
- 智能会议系统(30)---WebRTC学习之一:开篇
- Hibernate继承映射
- Asp.Net细节性问题精萃
- oracle的exp程序,数据库expimp迁移的整个过程,及注意事项
- 2010 模板下载 罗斯文_选择并使用 Access 模板
- 定时器控制交通指示灯
- PNG alpha transparency: AlphaImageLoader filter flaws
- 计算机网络——IPV6基础知识
- Windows自带输入法中文符号或全角半角切换
- 高仿马蜂窝旅游头像泡泡动画
- H5实现拨打电话功能
热门文章
- python中方法调用方法_Python中实现结构相似的函数调用方法
- 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
- 一句话概括自动装箱/拆箱
- 西安邮电大学卓越班c语言面试题,西安邮电大学C语言实验报告.docx
- 查看mysql日志post_(转)MySQL 日志组提交
- java - 人员分配组合
- laravel 任务队列_laravel队列-让守护进程处理耗时任务
- python基础入门(1)
- mxnet深度学习(KVS)
- 零窗口探测怎么抓包_Linux服务器下的HTTP抓包分析