mysql表设计----列类型介绍

2023-11-04

author:skate
time:2012/02/18

 

mysql表设计-------列类型介绍

 

在我们设计数据库时一些经验,合理的评估表的增量,预计大小,分库分表、整库表的数量(为了方便维护与性能,mysql库一般500张表以里)等。

从基本的说起,我们创建表除了考虑架构上表的设计原则,更要从基本考虑,这对于大系统来说非常重要
命名规则:合理规划整库的命名规则,这样方便开发与维护
列类型的选择:这个对于sql的优化,数据存储空间等都非常重要,下面就简单介绍下mysql列类型

 

数值类型:


BIT(M):
位字段类型。M表示每个值的位数,范围为从1到64。M默认为1。


TinyINT(M):
带符号的范围是-32768到32767。无符号的范围是0到65535。1字节。


SmallINT(M):
带符号的范围是-32768到32767。无符号的范围是0到65535。2字节。


MediumINT(M):
带符号的范围是-8388608到8388607。无符号的范围是0到16777215。3字节。


INT(M):
带符号的范围是-2147483648到2147483647。无符号的范围是0到4294967295。4字节。


 

BigINT(n):
带符号的范围是-9223372036854775808到9223372036854775807。无符号的范围是0到18446744073709551615。8字节。


Decimal(m,n): M是总位数,D是小数点(标度)后面的位数。实际上是VARCHAR存储。


FLOAT(M,D):
小(单精度)浮点数,M是小数纵位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。单精度浮点数精确到大约7位小数位,带符号的范围是 -3.402823466E+38 to -1.175494351E-38,无符号的范围是0 and 1.175494351E-38 to 3.402823466E+38, 4 字节


DOUBLE(M,D):
普通大小(双精度)浮点数,M是小数总位数,D是小数点后面的位数。如果M和D被省略,根据硬件允许的限制来保存值。双精度浮点数精确到大约15位小数位,带符号的范围是 -1.7976931348623157E+308 to -2.2250738585072014E-308,无符号的范围是0 and 2.2250738585072014E-308 to 1.7976931348623157E+308,8 字节

 

 

数值类型处理函数:
算数符运算:SELECT expr;
数学函数:ABS(x),x的绝对值。
          CEIL(x),返回不小于X 的最小整数值。
          FLOOR(x),返回不大于X的最大整数值
          CRC32(x),计算循环冗余码校验值。
          RAND(),返回0~1直接随机浮点数。
          SIGN(x),返回x的符号
          TRUNCATE(X,D),返回X被舍去至小数点后D位的数字。

 

 

日期类型:
TIMESTAMP:
以'YYYY-MM-DD HH:MM:SS'格式检索和显示TIMESTAMP值。支持的范围为‘1970-01-01 00:00:00’到2037年。占用4字节


DATETIME:
以'YYYY-MM-DD HH:MM:SS'格式检索和显示DATETIME值。支持的范围为'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。占用8字节。


DATE:
用'YYYY-MM-DD'格式检索和显示DATE值。支持的范围是'1000-01-01'到 '9999-12-31'。占用4字节。

 

 

日期类型处理函数
DATE_SUB/DATE_ADD:对时间进行加减。
CURDATE():将当前日期按照‘YYYY-MM-DD’ 或YYYYMMDD 格式的值返回。
NOW():返回当前日期和时间值,其格式为 ‘YYYY-MM-DD HH:MM:SS’ 或YYYYMMDDHHMMSS。
组合使用:mysql> SELECT DATE_ADD('1998-01-02', INTERVAL 31 DAY);
                             -> '1998-02-02'

 

字符类型
Char(M):
长度固定为创建表时声明的长度M。长度可以为从0到255的任何值。当保存CHAR值时,在它的右边填充空格以达到指定的长度。当检索到CHAR值时,尾部的空格被删除。在存储或检索过程中不进行大小写转换。占用空间(M*每字符字节长度),UTF8为3字节。


VarChar(M):
列中的值为可变长字符串。长度可以指定为0到65,535之间的值。VARCHAR的最大有效长度由最大行大小和使用的字符集确定。整体最大长度是65,532字节。VARCHAR值保存时不进行填充。当值保存和检索时尾部的空格仍保留,符合标准SQL。占用空间(M*每字符字节长度+长度记录位)。


TINYTEXT:
真实字符+1个字节,255 字节


TEXT:
真实字符+2个字节,65,535 字节


MEDIUMTEXT:
真实字符+3个字节,16,777,215 字节


LONGTEXT:
真实字符+4个字节,4,294,967,295 字节

 

字符类型处理函数:
CHAR_LENGTH(str):返回值为字符串str的长度,长度的单位为字符。
LENGTH(str):返回值为字符串str 的长度,单位为字节。
CONCAT(str1,str2,...):返回结果为连接参数产生的字符串。
CONCAT_WS(separator,str1,str2,...):第一个参数是其它参数的分隔符。分隔符的位置放在要连接的两个字符串之间。
LEFT(str,len):返回从字符串str开始的len最左字符。
RIGHT(str,len);从字符串str 开始,返回最右len 字符。
SUBSTRING(str,pos,len):从字符串str返回一个长度同len字符相同的子字符串,起始于位置 pos。
LOWER(str):返回字符串 str 变为小写字母的字符。
UPPER(str):返回字符串str转化为大写字母的字符。

 

二进制类型:
BINARY(M):
M字节,255个字符


VARBINARY(M):
M+1OR M+2 字节;65,533 字节


TINYBLOB:
真实字节+1个字节;255 字节


BLOB:
真实字节+2个字节;65,535 字节


MEDIUMBLOB:
真实字节+3个字节;16,777,215 字节


LONGBLOB:
真实字节+4个字节;4,294,967,295 字节

 

 

类型处理小技巧:
IP存储:INET_ATON(expr),将IP转换为整数。
               INET_NTOA(expr),将整数转换为IP。
mysql> SELECT INET_ATON('209.207.224.40');
         -> 3520061480
mysql> SELECT INET_NTOA(3520061480);
        -> '209.207.224.40‘
判断IP段:INET_ATON('209.207.224.1') <= IP AND IP <= INET_ATON('209.207.224.255');
VARCHAR存储:(3*4+3)+1=16位,UTF8字符集15*3+1=46字节
INT存储:4字节

 

 

 

-----end------

 

 

 

 

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

mysql表设计----列类型介绍 的相关文章

  • 无法在 mysql-apt-config [Ubuntu 14.04] 中选择“确定”

    我使用的是 Ubuntu 14 04 sudo apt get update总是给我这个选项来配置 mysql apt config 我尝试选择版本 按 tab gt 在 确定 上突出显示的键 按 Enter 但没有任何反应 它再次返回并突
  • 如何使用原始 SQL 查询实现搜索功能

    我正在创建一个由 CS50 的网络系列指导的应用程序 这要求我仅使用原始 SQL 查询而不是 ORM 我正在尝试创建一个搜索功能 用户可以在其中查找存储在数据库中的书籍列表 我希望他们能够查询 书籍 表中的 ISBN 标题 作者列 目前 它
  • 使用来自另一个数据库的选择查询更新 mysql 表

    我有两个数据库 我想用另一个数据库表中的值更新一个表 我正在使用以下查询 但它不起作用 UPDATE database1 table1 SET field2 database2 table1 field2 WHERE database1 t
  • PDO语法错误

    我在一个项目中使用 PDO 但提交时出现语法错误 这是我的代码
  • 将 Python 中的日期与日期时间进行比较

    所以我有一个日期列表 datetime date 2013 7 9 datetime date 2013 7 12 datetime date 2013 7 15 datetime date 2013 7 18 datetime date
  • MySQL 左连接 WHERE table2.field = "X"

    我有以下表格 pages Field Type Null Key Default Extra page id int 11 NO PRI NULL auto increment type varchar 20 NO NULL
  • 在Oracle中使用IW和MM

    我使用 IW 表示每周结果 使用 MM 表示每月结果 但我总是收到错误 ORA 00979 not a GROUP BY expression 00979 00000 not a GROUP BY expression 我的疑问是这些 We
  • 使用“INSERT ... ON DUPLICATE KEY UPDATE”插入多条记录

    我的表结构 table marks 我的目标 我想用条件插入或更新多条记录 我目前正在通过此查询进行检查 第一步 SELECT FROM marks WHERE student 115 AND param 1 第二步 if records
  • 从 call_log 中获取最大并发通话数

    我需要帮助在 MySQL 5 0 77 中编写一个查询 根据下面所示的数据 办公室一天的通话量 返回并发电话呼叫的峰值数量 我只是想知道一天中任何特定时间同时打电话的人数最多是多少 首先 这是 MySQL 表 CREATE TABLE ca
  • postgresql 不同的不工作

    我使用以下代码从数据库获取值 但是当我编写这段代码时 测试看看问题出在哪里 我注意到查询没有从数据库中获取不同的值 这是查询 select distinct ca id as id acc name as accName pIsu name
  • MVCC 如何与 MySql 中的 Lock 配合使用?

    我知道Mysql中使用锁或者MVCC可以实现并发控制 比如可重复读 但我不知道MVCC如何避免幻读 在其他地方了解到一般是通过MVCC和Gap Lock来实现的 但是目前我理解的是MVCC不需要锁 即更新和删除都是使用undo log来实现
  • 处理与不同相关实体的一对多的正确模式

    我有一个 C 项目 我使用实体框架作为 ORM 我有一个User 可以向多家银行付款 每家银行都是一个独立的实体 并且每家银行都由不同的字段描述 问题是 一User可以没有或有很多不同的Banks 我不太确定如何对此进行建模 临时解决方案是
  • 如何删除 MySQL 数据库?

    你可能从我的上一个问题中注意到一个问题引发了更多的问题 在 MySQL 监视器中阅读 MySQL 手册 https stackoverflow com questions 1081399 我的数据库现在无法使用 部分原因是我想破坏东西并且无
  • 如何在 PostgreSQL 中返回不同时区的当前日期

    我正在开发一个使用东部时间并将数据库设置为太平洋时间的应用程序 这已经引起了一些问题 但我们被告知不可能有其他方式 所以我们只能解决它 不管怎样 我遇到的麻烦之一就是获取今天的约会 由于数据库位于太平洋 如果我使用以下命令询问今天的日期cu
  • MySQL“列计数与第 1 行的值计数不匹配”是什么意思

    这是我收到的消息 ER WRONG VALUE COUNT ON ROW 列计数与第 1 行的值计数不匹配 这是我的全部代码 我的错误在哪里 DROP TABLE student CREATE TABLE employee emp id I
  • SQL Server 中的 FIFO 查询

    我正在构建一个库存管理应用程序c with SQL server 我想做一个FIFO从我的表查询 我以可变价格购买了相同的产品 之后我卖掉了其中一些 我想根据 先进先出 进行查询BatchDate柱子 所以我想通过PurchasePrice
  • 针对约 225 万行的单表选择查询的优化技术?

    我有一个在 InnoDB 引擎上运行的 MySQL 表 名为squares大约有 2 250 000 行 表结构如下 squares square id int 7 unsigned NOT NULL ref coord lat doubl
  • 查看Jasper报告执行的SQL

    运行 Jasper 报表 其中 SQL 嵌入到报表文件 jrxml 中 时 是否可以看到执行的 SQL 理想情况下 我还想查看替换每个 P 占位符的值 Cheers Don JasperReports 使用 Jakarta Commons
  • 使用用户定义函数 MySql 时出错

    您好 请帮我解决这个问题 提前致谢 我在数据库中定义了这些函数 CREATE FUNCTION levenshtein s1 VARCHAR 255 s2 VARCHAR 255 RETURNS INT DETERMINISTIC BEGI
  • 无法连接到 MAMP 上的 phpMyAdmin

    我收到此错误消息 MySQL 说道 无法连接 设置无效 phpMyAdmin 尝试连接 MySQL 服务器 但服务器拒绝连接 您应该检查配置中的主机 用户名和密码 并确保它们与 MySQL 服务器管理员提供的信息相对应 用户和通行证是默认的

随机推荐

  • python二级第一套答案

    python二级第一套答案 46 考生文件夹下存在3个Python源文件 分别对应3个问题 1个文本文件 作为本题目输入数据 请按照源文件内部说明修改代码 实现以下功能 命运 是著名科幻作家倪匡的作品 这里给出 命运 的一个网络版本文件 文
  • 华为笔记本转轴坏了修复指南记录

    华为笔记本转轴坏了修复指南记录 前言 记录一下 华为笔记本MeteBookD MRC W50 转轴破裂导致屏幕翻盖时 转轴出开裂 记录维修全过程 由于之前电脑坏掉的图片找不到了 我这里就先大致描述一下吧 看下图 上面我就是简单的描述了一些我
  • 行列式的英文翻译

    行列式的英文翻译 行列式的英文翻译是 determinant 行列式的英文定义为 从定义可以看出 只有方阵才会有行列式的定义
  • applicationContext.xml文件如何调用外部properties等配置文件

  • 记一次计算机20春招的过程

    今年秋招没有参加 因为考研 等到考研成绩出来 发现无缘复试 便开始准备春招 基本是从2月初就开始准备了 刚开始没有确定企业类型 胡乱投了一下 有百度大厂等 最后还是决定投银行 对于女生来说 还是比较稳定 主要投了中信银行 上海银行 苏州银行
  • C++继承和多态

    C 继承和多态 继承 继承的本质 代码的复用 在基类中给所有派生类提供统一的虚函数接口 让派生类进行重写 然后就可以使用多态了 类和类的关系 a part of 一部分关系 继承 a kind of 一种的关系 继承引入了一些概念 基类 父
  • es6~解构赋值

    ES6允许按照一定模式 从数组和对象中提取值 对变量进行赋值 这被称为解构 以前 为变量赋值 只能直接指定值 let a 1 let b 2 let c 3 ES6 允许写成下面这样 let a b c 1 2 3 上面代码表示 可以从数组
  • 微信小程序实现附件(图片/视频)上传及附件(图片/视频)预览

    微信小程序的图片 视频上传功能 小程序官网是提供了相关的API语法 本例使用了 wx chooseMedia 选择或拍摄图片 视频附件 通过 wx uploadFile 方法上传至服务器 在需要的地方将服务器存储的附件地址查询出来提供展示预
  • 分糖果(c++)

    传送门 这道题真是简单到不能再简单 思路 判断L n是否小于R N 如果是 输出n 1 最大余数 否则输出R N 余数尽量大 因为L N R N 且L lt R 本题代码最多10行 include
  • MSVCRTD.lib(crtexew.obj) : error LNK2019: 无法解析的外部符号 _WinMain@16,该符号在函数 ___tmainC

    一 问题描述 MSVCRTD lib crtexew obj error LNK2019 无法解析的外部符号 WinMain 16 该符号在函数 tmainCRTStartup 中被引用 Debug jk exe fatal error L
  • 两个C++编译异常及解决方法-does not name a type和field `XX' has incomplete type

    两个C 编译错误及解决办法 does not name a type和field XX has incomplete type 编译错误一 XX does not name a type 编译错误二 field XX has incompl
  • CH1-数字逻辑基础

    文章目录 一 数制和码制 1 1 数字量和模拟量 1 2 数制和码制 一 数制 二 数制转换 三 码制 二 逻辑代数中的基本运算 与门 或门 非门 与非门 或非门 与或非门 异或门 同或门 三 基本和常用公式 3 1 基本公式 3 2 常用
  • 通过ribbon 根据服务名获取所有服务实例的IP和端口列表

    代码使用SpringCloud版本E3 业务场景 今天遇到一个业务场景 要求根据服务名获取当前微服务集群中所有的对应服务实例的IP和端口 通过分析源码推算出了写法 原理简述 如果代码中引入了spring cloud netflix core
  • Spring Boot 集成 WebSocket

    假设有这样一个场景 服务端的资源经常在更新 客户端需要尽量及时地了解到这些更新发生后展示给用户 如果是 HTTP 1 1 通常会开启 ajax 请求询问服务端是否有更新 通过定时器反复轮询服务端响应的资源是否有更新 ajax 轮询 在长时间
  • win下nacos-2.2.2搭建开发环境(3种模式)

    nacos安装模式 单机模式 Derby 这种模式是极简模式 数据没法持久化存储 适合开发环境 单机模式 MySQL 这种模式支持数据持久化 数据会存储到MySQL中 适合生产环境 集群模式 这种模式适合生产环境并且服务节点个数较多 不存在
  • 导入android project到 eclipse 出现Unable to resolve target 'android-8'的错误

    今天导入一个Android的例子程序 出现了Unable to resolve target android 8 的错误 刚开始以为是没导入包或者是phoneGap没配置好 可是折腾了好久还是报错 最后google之后才发现原来是ADK版本
  • node—第三方模块之mysql模块

    mysql模块 专门用来连接mysql数据库 2
  • [每日两题系列]刷算法题咯~~

    今日题目 从尾到头打印链表 移除重复节点 本系列所选题目均来自力扣或者牛客网站 所选题目主要是以其中的简单题为主 中等题为辅 包含少数困难题 原因是 本人目前能力还不够 开展这个系列的目的是督促自己 在暑假的时间里也要保持有一定的刷题量 拒
  • leetcode刷题(10.8总结)

    1 移除链表元素 题目描述 https leetcode cn problems remove linked list elements class Solution def removeElements self head ListNod
  • mysql表设计----列类型介绍

    author skate time 2012 02 18 mysql表设计 列类型介绍 在我们设计数据库时一些经验 合理的评估表的增量 预计大小 分库分表 整库表的数量 为了方便维护与性能 mysql库一般500张表以里 等 从基本的说起