Mysql表的数据类型

2023-12-16

数据类型

https://www.sjkjc.com/mysql/varchar/
MySQL 中的数据类型包括以下几个大类:

字符串类型
数字类型
日期和时间类型
二进制类型
地理位置数据类型
JSON 数据类型

MySQL 字符串数据类型

VARCHAR:纯文本字符串,字符串长度是可变的。
CHAR: 纯文本字符串,字符串长度是固定的。当实际字段内容小于定义的长度时,MySQL 会用空白空白符好补足。
VARBINARY:二进制字符串,字符串长度是可变的。
BINARY:二进制字符串,字符串长度是固定的。
TINYTEXT:二进制字符串,最大为 255 个字节。
TEXT:二进制字符串,最大为 65K。
MEDIUMTEXT:二进制字符串,最大为 16M。
LONGTEXT:二进制字符串,最大为 4G。
ENUM:枚举;每个列值可以分配一个 ENUM 成员
SET:集合;每个列值可以分配零个或多个 SET 成员

MySQL 数字数据类型

数字又是一个常用的数据类型。如果我们要存储年龄、金额等,需要用到数字数据类型。MySQL 支持 SQL 标准中所有的数字类型,包括整数和小数。
下表显示了 MySQL 中数字相关的数据类型:
TINYINT:一个非常小的整数,最大为 1 个字节。
SMALLINT:一个小整数,最大为 2 个字节。
MEDIUMINT:一个中等大小的整数,最大为 3 个字节。
INT:标准整数,最大为 4 个字节。
BIGINT:一个大整数,最大为 8 个字节。
DECIMAL:一个定点数。
FLOAT:单精度浮点数,最大为 4 个字节。
DOUBLE:双精度浮点数,最大为 8 个字节。
BI:按位存储。

MySQL 日期和时间数据类型

MySQL 提供了丰富的日期和时间类型,这包括日期(DATE)、时间(TIME)、日期和时间(DATETIME)、时间戳(TIMESTAMP)、年份(YEAR)。其中时间戳(TIMESTAMP)数据类型,可以用于跟踪表中一行的变化。
DATE:CCYY-MM-DD 格式的日期值
TIME:hh:mm:ss 格式的时间值
DATETIME:CCYY-MM-DD hh:mm:ss 格式的日期和时间值
TIMESTAMP:CCYY-MM-DD hh:mm:ss 格式的时间戳值
YEAR:CCYY 或 YY 格式的年份值

MySQL 二进制数据类型

MySQL 还支持存储二进制的数据,比如图片文件等。如果要存储文件,就要用到 BLOB 类型。 BLOB 是 binary large object 的缩写,意思是二进制大对象。
TINYBLOB:最大为 255 个字节。
BLOB:最大为 65K。
MEDIUMBLOB:最大为 16M。
LONGBLOB:最大为 4G。

MySQL 空间数据类型

GEOMETRY:任何类型的空间值
POINT:使用横坐标和纵坐标表示的一个点
LINESTRING:一条曲线(一个或多个 POINT 值)
POLYGON:一个多边形
GEOMETRYCOLLECTION:GEOMETRY 值的集合
MULTILINESTRING:LINESTRING 值的集合
MULTIPOINT:POINT 值的集合
MULTIPOLYGON:POLYGON 值的集合

JSON 数据类型

MySQL 从 5.7.8 版本开始支持 JSON 数据类型,允许您更有效地存储和管理 JSON 文档。与 JSON 格式的字符串相比,原生 JSON 数据类型提供有如下的优点:

自动验证。MySQL 会对存储在 JSON 列中的 JSON 文档进行自动验证,无效的文档会产生错误。
最佳存储格式。MySQL 会将存储在 JSON 列中的 JSON 文档转换为允许快速读取文档元素的内部格式。

MySQL 布尔数据类型

MySQL 没有内置布尔数据类型。但是,MySQL 支持 BOOLEAN 或 BOOL 关键字,MySQL 会将 BOOLEAN 或 BOOL 类型转换为 TINYINT(1)。当我们插入 TRUE 或者 FALSE 时,MySQL 会存储为 1 或者 0。

常用的类型解析

VARCHAR 语法

当我们使用 VARCHAR 数据类型时,我们需要指定一个最大的长度。其语法如下:
VARCHAR(max_length)
其中 max_length 是一个数值,它指示了此列的最大字符数。如果我们不指定此值,则默认值是 255。也就是说 VARCHAR 等同于 VARCHAR(255)。 VARCHAR 最多长度为 65535 个字节。
MySQL 存储 VARCHAR 数值时,会将最前的 1 或者 2 个字节存储为实际字符串内容的长度。如果列的值少于 255 个字节,则长度前缀为 1 个字节,否则为 2 个字节。

int用法

MySQL INT 类型使用起来简单,如下:
INT [UNSIGNED]
这里: UNSIGNED 属性标识了此数据类型为无符号整数。
有符号取值范围为-2147483648~2147483647
无符号:0~4294967295

DECIMAL 类型介绍

DECIMAL 数据类型是定点数数据类型,用来存储精确的树枝,比如账务金额等。底层实现上,MySQL 使用二进制形式存储该类型的值
为了存储精确的数值,我们需要为 DECIMAL 数据类型指定总位数和小数位数。这里是 DECIMAL 数据类型的语法:
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]
这里:
M 是总的位数,不包含小数点和正负号。
D 是小数部分的位数。如果 D 为 0 则表示没有小数部分。当 D 省略时,默认值为 0。
UNSIGNED 属性表示数值是无符号的。无符号的数字不能是负数。
ZEROFILL 属性表示当整数部分位数不足时,用整数的左侧用 0 填充。带有 ZEROFILL 的列将自动具有 UNSIGNED 属性。这和 INT 数据类型一样。
比如,我们定义了如下一个列:
amount DECIMAL(9, 4);
那么 amount 列的值的范围是从 -99999.9999 到 99999.9999。

text类型

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql表的数据类型 的相关文章

  • 更新或插入 MySQL Python

    如果记录已存在 我需要更新一行 如果不存在 我需要创建一个新记录 我理解 ON DUPLICATE KEY 将使用 MYSQLdb 完成此操作 但是我无法使其正常工作 我的代码如下 cursor database cursor cursor
  • 查询中的存储过程

    有一个程序获取文件列表 顾名思义 返回一个文件列表以及更多选项 那么是否可以在查询选择中使用此过程 像这样的东西 select Field1 from Image where Field2 IN call GetFileList 你应该把它
  • PDO 库比本机 MySQL 函数更快吗?

    我已经阅读了几个与此相关的问题 但我担心它们可能已经过时 因为自这些问题得到解答以来 更新版本的 PDO 库已经发布 我编写了一个 MySQL 类 它构建查询并转义参数 然后根据查询返回结果 目前这个类正在使用内置的mysql函数 我很清楚
  • SQL:将现有列设置为 MySQL 中的主键

    我有一个包含 3 列的数据库 id name somethingelse 该表没有设置索引 我收到 未定义索引 在 phpmyadmin 中id 是一个 7 位字母数字值 每行都是唯一的 我想将 Drugid 设置为主键 索引 我不知道有没
  • 规范“毒”方式真的值得吗? (3NF)

    我正处于数据库设计的早期阶段 所以还没有最终的结果 并且我正在为具有可选标签的线程使用 TOXI 3表设计 但我忍不住觉得加入是并不是真的必要 也许我只需要依赖我的简单标签列posts我可以在其中存储类似 varchar 的表
  • 如何在MySQL选择查询中编写正则表达式?

    我尝试过这个表达 b word w b i比较一个word对照其他单词列表来查找重复项 我用了preg math all 效果很好 我想做同样的事情 但这次检查从 mysql 数据库检索到的单词 这是我写的 SELECT FROM tabl
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • _mysql_connector.MySQLInterfaceError:命令不同步;您现在无法运行此命令 python msql.connector

    我有一个功能 您可以在下面看到 如果运行此函数 我将收到您在标题中看到的错误 您能帮助我吗 不久前我能够用锁解决这个问题 但现在它们不起作用 我知道这与我的连接有关 但我不知道如何解决这个问题 def insertNewValues sel
  • BigDecimal 的 JPA @Size 注释

    我该如何使用 SizeMySQL 的注释DECIMAL x y 列 我在用着BigDecimal 但是当我尝试包括 Size max它不起作用 这是我的代码 Size max 7 2 Column name weight private B
  • 更新查询增量字段加上 1 codeigniter 函数 [重复]

    这个问题在这里已经有答案了 我想在 codeigniter 项目中将字段值增加到当前值加 1 所以 我做了一个功能 但它不起作用 我的职能是 function increse field by 1 table name fieldToInc
  • 当我耗尽 bigint 生成的密钥时会发生什么?怎么处理呢?

    我自己无法想象一个好的答案 所以我想在这里问 在我心里 我总是想知道 如果AUTO INCREMENT PRIMARY ID我的专栏MySQL表用完了吗 举例来说 我有一个有两列的表 一个ID auto increment primary
  • MySQL 查询获取每小时计数

    我需要统计每小时发生的操作次数 我的数据库按操作的时间戳保存日志 我明白我可以做一个 SELECT table time COUNT table time from table t group by t time 然而 也有一段时间没有采取
  • MySQL 全文搜索之谜

    我们的网站上有一个使用 MySQL 全文搜索的简单搜索 但由于某种原因 它似乎没有返回正确的结果 我不知道这是否是 Amazon RDS 我们的数据库服务器所在的位置 或我们请求的查询的某种问题 这是数据库表的结构 CREATE TABLE
  • 如何备份整个MySQL数据库的所有用户、权限和密码?

    我需要备份整个 MySQL 数据库 其中包含所有用户及其权限和密码的信息 我看到选项http www igvita com 2007 10 10 hands on mysql backup migration http www igvita
  • 为什么不能将 MYSQL 函数传递到准备好的 PDO 语句中?

    在我看来 以下脚本应该有效 stmt db gt prepare UPDATE table SET status date modified stmt gt execute array 1 NOW 但经过时NOW 进入准备好的声明中 什么也
  • 错误代码:1822(当数据类型匹配且具有复合键时)

    得到一个 错误代码 1822 添加外键约束失败 丢失的 引用表中约束 subject ibfk 1 的索引 注册 当尝试创建subject桌子 问题是 错误并没有出现在上一张表上student 数据类型相同 并且定义了主键 两者都会出现此错
  • 捕获动态表中 HTML 元素的值

    我有从数据库生成的以下动态表
  • 子查询与连接

    我重构了从另一家公司继承的应用程序的一个缓慢部分 以使用内部联接而不是子查询 例如 WHERE id IN SELECT id FROM 重构后的查询运行速度提高了约 100 倍 50 秒到 0 3 我预计会有改进 但谁能解释为什么它如此剧
  • 使用 RMySQL 会干扰 RPostgreSQL

    我有一个 R 脚本 我想从 MySQL 数据库中提取一些数据 然后从 PostgreSQL 数据库中提取一些数据 但是 从 RMySQL 加载 MySQL 驱动程序会阻止我从以下位置加载 PostgreSQL 驱动程序 PostgreSQL
  • 如何对主索引重新编号

    我有一个简单的 MySQL 表 主索引 id 不是一一编号的 1 31 35 100 等 我希望它们的编号如 1 2 3 4 请告诉我该怎么做 我还想指出的是 我知道该操作可能产生的后果 但我只是想整理一下表格 我同意其他方法也可以 但我只

随机推荐