当前位置: 首页 > news >正文

mysql blob类型_MySQL数据类型 字符串数据类型(1)

1.字符串数据类型语法 字符串数据类型有CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT、ENUM和SET。 在某些情况下,MySQL可能会将字符串列更改为不同于CREATE TABLE或ALTER TABLE语句中定义的类型。 对于字符字符串列(CHAR、VARCHAR和TEXT类型)的定义,MySQL以字符为单位计算长度。对于二进制字符串列(BINARY、VARBINARY和BLOB类型)的定义,MySQL以字节为单位计算长度。 字符字符串数据类型CHAR、VARCHAR、TEXT类型、ENUM、SET和任何同义词的列定义,可以指定列字符集和排序规则: ●CHARACTER SET指定字符集。如果需要,可以使用COLLATE属性和其他属性指定字符集的排序规则。例如: e77ed35bf292eb379d1bab61ccd9a07c.png 此表创建了一个名为c1的列,该列的字符集为utf8,使用该字符集的默认排序规则;创建一个名为c2的列,该列的字符集为latin1,并且使用区分大小写的(_cs)排序规则。 CHARSET和CHARACTER SET是同义词。 ●为字符字符串数据类型指定CHARACTER SET binary属性会导致将列创建为相应的二进制字符串数据类型:CHAR变为BINARY,VARCHAR变为VARBINARY,TEXT变为BLOB。对于ENUM和SET数据类型,不会发生这种情况;它们是按声明创建的。 假设您使用如下定义创建一个表: 646a5c1c71f793ebc1f0f9183bbed191.png 会得到如下所示结果表定义: 658acbf4e4dcdf0ff9315283a34b38f3.png ● BINARY属性是一个非标准的MySQL扩展,它是指定列字符集(如果未指定列字符集,则为表默认字符集)的二进制(_bin)排序规则的简写。在这种情况下,比较和排序基于数字字符代码值。 假设使用如下定义创建表: 4882bd1a10168f0e696188cdd82bca53.png 结果表具有以下定义: cf36c8790277dd58eb10f35e62510b1b.png 在MySQL 8.0中,BINARY属性的这种非标准用法会造成歧义,因为utf8mb4字符集有多个二进制排序规则。从MySQL 8.0.17开始,不推荐使用BINARY属性,在以后的MySQL版本中将不再支持它。应用程序应该调整为使用显式的_bin排序规则。 使用BINARY来指定数据类型或字符集保持不变。 ●ASCII属性是CHARACTER SET latin1的缩写。 ●UNICODE属性是CHARACTER SET ucs2的缩写。 字符列基于分配给该列的排序规则进行比较和排序。对于CHAR、VARCHAR、TEXT、ENUM和SET数据类型,可以使用binary(_bin)排序规则或BINARY属性声明列,以使比较和排序使用基础字符代码值,而不是词法顺序。 ● [NATIONAL] CHAR[( M )] [CHARACTER SET  charset_name ] [COLLATE  collation_name ] 固定长度的字符串,在存储时总是用空格从右侧开始填充到指定长度。M表示以字符为单位的列长度。M的范围是0到255。如果省略M,则长度为1。 注意: 检索CHAR值时将删除尾部空格,除非启用PAD_CHAR_TO_FULL_LENGTH SQL模式。 CHAR是CHARACTER的缩写。NATIONAL CHAR(或其等价的缩写,NCHAR)是定义CHAR列使用预定义字符集的标准SQL方式。MySQL使用utf8作为预定义字符集。 CHAR BYTE数据类型是BINARY数据类型的别名。这是一个兼容性功能。 MySQL允许创建CHAR(0)类型的列。当必须兼容旧有的应用程序,而旧程序依赖于一个列,但实际上又并不使用列的值,这时CHAR(0)非常有用。当您需要一个只能接受两个值的列时,CHAR(0)也很有用:定义为CHAR(0) NULL的列只占用一位,并且只能接受NULL和''(空字符串)的值。 ●[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name] 可变长度字符串。M表示以字符为单位的最大列长。M的范围是0到65535。VARCHAR的最大有效长度取决于最大行大小(65535字节,在所有列之间共享)和使用的字符集。例如,utf8字符每字符最多需要3个字节,因此使用utf8字符集的VARCHAR列可以最多声明21844个字符。 MySQL将VARCHAR值存储为1字节或2字节长度的前缀加上数据。长度前缀指示值中的字节数。如果值要求的字节数不超过255,则VARCHAR列使用一个长度字节;如果值要求的字节数可能超过255,则使用两个长度字节。 注意: MySQL遵循标准SQL规范,并且不从VARCHAR值中删除尾部空格。 VARCHAR是CHARACTER VARYING的缩写。NATIONAL VARCHAR是定义VARCHAR列使用预定义字符集的标准SQL方法。MySQL使用utf8作为预定义的字符集。NVARCHAR是NATIONAL VARCHAR的缩写。 ● BINARY[( M )] BINARY类型类似于CHAR类型,但存储的是二进制字节字符串而不是非二进制字符串。可选长度M表示以字节为单位的列长度。如果省略,M默认为1。 ● VARBINARY( M ) VARBINARY类型类似于VARCHAR类型,但存储的是二进制字节字符串而不是非二进制字符串。M表示以字节为单位的最大列长度。 ● TINYBLOB 最大长度为255(28 − 1)字节的BLOB列。每个TINYBLOB值都使用一个1字节长度的前缀来指示值中的字节数。 ● TINYTEXT [CHARACTER SET   charset_name ] [COLLATE  collation_name ] 最大长度为255(28-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TINYTEXT值都使用一个1字节长度的前缀来指示值中的字节数。 ● BLOB[( M )] 最大长度为65535(216-1)字节的BLOB列。每个BLOB值都使用一个2字节长度的前缀来指示值中的字节数。 对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M字节长的最小BLOB类型列。 ● TEXT[( M )] [CHARACTER SET  charset_name ] [COLLATE  collation_name ] 最大长度为65535(216-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度会减小。每个TEXT值都使用2字节长度的前缀指示值中的字节数。 对于这种类型,可以给出可选的长度M。如果这样做,MySQL将会创建大小足以容纳M个字符的最小TEXT类型列。 ● MEDIUMBLOB 最大长度为16777215(224-1)字节的BLOB列。每个MEDIUMBLOB值都使用一个3字节长度的前缀来存储值的字节数。 ● MEDIUMTEXT [CHARACTER SET   charset_name ] [COLLATE  collation_name ] 最大长度为16777215(224-1)个字符的TEXT列。如果值包含多字节字符,则有效最大长度减小。每个MEDIUMTEXT值都使用一个3字节长度的前缀来存储值的字节数。 ● LONGBLOB 最大长度为4294967295或4GB(232-1)字节的BLOB列。LONGBLOB列的有效最大长度取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGBLOB值都使用一个4字节长的前缀来存储值中的字节数。 ● LONGTEXT [CHARACTER SET   charset_name ] [COLLATE  collation_name ] 最大长度为4294967295或4GB(232-1)字符的TEXT列。如果值包含多字节字符,则有效最大长度减小。LONGTEXT列的有效最大长度还取决于客户机/服务器协议中配置的最大数据包大小和可用内存。每个LONGTEXT值都有一个4字节长的前缀,该前缀指示值中的字节数。 ● ENUM(' value1 ',' value2 ',...) [CHARACTER SET  charset_name ] [COLLATE  collation_name ] 枚举。只能从值列表'value1'、'value2'、…、NULL或特殊的''错误值中选一个值的字符串对象。ENUM值在内部表示为整数。 ENUM列最多可以有65535个不同元素。 单个ENUM元素的最大支持长度为M<=255,并且(M x w)<=1020,其中M是元素字面长度,w是字符集中最大长度字符所需的字节数。 ● SET(' value1 ',' value2 ',...) [CHARACTER SET  charset_name ] [COLLATE  collation_name ] 集合。一个字符串对象,可以有零个或多个值,每个值都必须从值'value1'、'value2'...的列表中选择。SET值在内部表示为整数。 一个SET列最多可以有64个不同的成员。 单个SET元素的最大支持长度为M<=255,并且满足(M x w)<=1020,其中M是元素字面长度,w是字符集中最大长度字符所需的字节数。 官方地址: https://dev.mysql.com/doc/refman/8.0/en/string-type-syntax.html

相关文章:

  • php 多层循环多数据_php程序内存优化之数组操作优化
  • python倒背如流_如何系统地自学 Python?
  • git desktop发布到gitee_MAC系统下利用gitee和Hexo建个人网站-各种坑各种填
  • python面试题与知识点_python技术面试题(一)
  • css覆盖规则_CSS元素选择器是怎样运作的?
  • bagging和时间序列预测_时间序列预测与指数平滑法
  • python领域驱动_浅谈“领域驱动设计”
  • http status 404 – 未找到_[SEO名词]网站404页面是什么?
  • pythonsqlite锁定_python – 可以在NFS文件系统上锁定sqlite文件吗?
  • python如何调用matlab_[Python-MATLAB] 在Python中调用MATLAB的API
  • 语料库与python应用_语料库与Python应用/语料库翻译学文库
  • 多个id如何用js_将多个MSA连超级高铁网络,如何用最少的轨道连接所有MSA?
  • python上传excel文件_利用django如何解析用户上传的excel文件
  • js悬浮二级菜单代码_纯CSS实现简单二级导航下拉效果
  • microbit python扩展_【micro:bit扩展】如何用慧编程扩展设计器为 micro:bit 编写扩展...
  • ----------
  • $translatePartialLoader加载失败及解决方式
  • 【Linux系统编程】快速查找errno错误码信息
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Angular 响应式表单 基础例子
  • emacs初体验
  • mongodb--安装和初步使用教程
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • use Google search engine
  • 动态规划入门(以爬楼梯为例)
  • 关于Flux,Vuex,Redux的思考
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 简单易用的leetcode开发测试工具(npm)
  • 今年的LC3大会没了?
  • 如何优雅地使用 Sublime Text
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 新手搭建网站的主要流程
  • Unity3D - 异步加载游戏场景与异步加载游戏资源进度条 ...
  • zabbix3.2监控linux磁盘IO
  • ​LeetCode解法汇总2583. 二叉树中的第 K 大层和
  • # C++之functional库用法整理
  • # 安徽锐锋科技IDMS系统简介
  • #ifdef 的技巧用法
  • #includecmath
  • #NOIP 2014#day.2 T1 无限网络发射器选址
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • (13)Hive调优——动态分区导致的小文件问题
  • (31)对象的克隆
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (Redis使用系列) Springboot 实现Redis消息的订阅与分布 四
  • (SpringBoot)第七章:SpringBoot日志文件
  • (顶刊)一个基于分类代理模型的超多目标优化算法
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (三分钟)速览传统边缘检测算子
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)平衡树
  • ******之网络***——物理***
  • .gitattributes 文件