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长度知识总结相关推荐

  1. MySQL学习笔记_上(select查询)

      上次整理了一些练习发到博客上了,也说要发基础的,整理了一下午才算是把查询那块的勉强整理完,下次再整理其他的,另外还在写设计模式和数据结构的草稿,写的差不多会慢慢发的,这两项算是副线发展,主线还是按 ...

  2. MySQL学习笔记 04、MySQL进阶(索引、事务、锁)

    文章目录 前言 一.MySQL的目录结构 1.1.认识目录文件 1.2.配置文件设置 windows平台下设置 linux环境下设置 二.MySQL的系统架构 2.1.MySQL系统的逻辑架构: 2. ...

  3. MySQL学习笔记 02、MySQL基础(覆盖基本知识点)

    文章目录 前言 一.Mysql介绍 1.1.了解Mysql 1.2.认识Socket 1.3.查看设置变量(以及全局) 二.SQL 2.1.DCL(数据控制语言) 2.2.DDL(数据定义语言)重要 ...

  4. 【狂神说】MySQL学习笔记01----初识MySQL

    狂神说MySQL系列连载课程,通俗易懂,基于MySQL5.7.19版本,欢迎各位狂粉转发关注学习. 狂神说B站MySQL视频教程请点这里 1.初识MySQL JavaEE:企业级Java开发.Web ...

  5. mysql初体验学习笔记_【MySQL】mycli初体验

    早就听说mycli很好用,今天打算在本地测试机上装一下体验一把. 安装方法很是简单: 一.安装依赖: yum install python-pip python-devel 二.安装mycli pip ...

  6. 高性能mysql总结笔记_高性能MySQL第三本笔记总结(上)

    无论何时,只要有多个查询需要在同一个时刻修改数据时,就会有并发问题.MySql主要在服务器层与存储引擎层进行并发控制. 假设数据库中国一张邮箱表,每个邮件都是一条记录.如果某个客户正在读取邮箱,同时其 ...

  7. MySQL学习笔记10:MySQL图形化管理工具 navicat 和 Workbench

    MySQL图形化管理工具1:navicat for MySQL navicat for mysql视频介绍: http://www.imooc.com/video/3193/0 navicat for ...

  8. pandas学习笔记:某一列字符类型转换为离散的数值标签;将某一列数值类型转换成独热码

    文章目录 将字符串变成离散的数值 将离散的数值变量变成独热码 import pandas as pd 将字符串变成离散的数值 整个"性别"列只有男和女 df = pd.DataFr ...

  9. MySQL 学习笔记②

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru 资料链接 ...

最新文章

  1. 盘点2020年10个最难忘的数据泄露事件
  2. 解决文字与下划线重叠的问题
  3. python 计时器 timeit 报错:ValueError: stmt is neither a string nor callable
  4. 数据库ORA-03113排查
  5. plsql 中的记录型变量和引用型变量
  6. 从 +new Date 说起,Javascript的一元操作符
  7. 电子邮件收发原理和实现(POP3, SMTP)
  8. idea创建maven程序_使用Maven程序集创建漏洞评估工件
  9. 路由器在多个OSPF进程下的路由学习问题
  10. 智能会议系统(30)---WebRTC学习之一:开篇
  11. Hibernate继承映射
  12. Asp.Net细节性问题精萃
  13. oracle的exp程序,数据库expimp迁移的整个过程,及注意事项
  14. 2010 模板下载 罗斯文_选择并使用 Access 模板
  15. 定时器控制交通指示灯
  16. PNG alpha transparency: AlphaImageLoader filter flaws
  17. 计算机网络——IPV6基础知识
  18. Windows自带输入法中文符号或全角半角切换
  19. 高仿马蜂窝旅游头像泡泡动画
  20. H5实现拨打电话功能

热门文章

  1. python中方法调用方法_Python中实现结构相似的函数调用方法
  2. 运行android程序时显示stop,Android系统.应用程序关闭时WorkManager是否正在运行?
  3. 一句话概括自动装箱/拆箱
  4. 西安邮电大学卓越班c语言面试题,西安邮电大学C语言实验报告.docx
  5. 查看mysql日志post_(转)MySQL 日志组提交
  6. java - 人员分配组合
  7. laravel 任务队列_laravel队列-让守护进程处理耗时任务
  8. python基础入门(1)
  9. mxnet深度学习(KVS)
  10. 零窗口探测怎么抓包_Linux服务器下的HTTP抓包分析