5:数据类型-MySQL

2023-05-16

目录

  • 5.1 数据库的数据类型问题
  • 5.2 int数值类型
  • 5.3 int类型实际操作和注意事项
  • 5.4 浮点数类型
  • 5.5 定点数类型
  • 5.6 字符串与文本类型
  • 5.7 布尔类型
  • 5.8 枚举类型
  • 5.9 枚举类型的另类存储方式
  • 5.10 枚举类型的好处,为何要用枚举类型,企业可能用在哪?
  • 5.11 set类型
  • 5.12 时间日期类型

5.1 数据库的数据类型问题

企业中的数据类型定义没有统一的标准,每一个公司会根据自己的产品需要和需求来定制属于自己的数据类型

5.2 int数值类型

在企业中要使用到整型的地方会特别的多,但是十分值得注意的是,数据库和我们的编程不太一样,它会更加的珍惜字节空间

所以在定义数据库的数据类型前,需要考虑所定义字段的大小和所定义字段的实际使用(有无符号)是什么样的

MySQL的各种数据类型的范围大小可以上网查询, 例如无符号整型,范围是(-128,127)

age tinyint unsigned comment'年龄'

5.3 int类型实际操作和注意事项

mysql> create table emp(
    -> id smallint unsigned auto_increment primary key comment'id',
    -> age tinyint unsigned ,
    -> kkk int(6)
    -> );
Query OK, 0 rows affected (0.03 sec)

mysql> show tables;
+-------------------+
| Tables_in_student |
+-------------------+
| emp               |
| teacher           |
+-------------------+
2 rows in set (0.00 sec)

mysql> desc emp
    -> ;
+-------+----------------------+------+-----+---------+----------------+
| Field | Type                 | Null | Key | Default | Extra          |
+-------+----------------------+------+-----+---------+----------------+
| id    | smallint(5) unsigned | NO   | PRI | NULL    | auto_increment |
| age   | tinyint(3) unsigned  | YES  |     | NULL    |                |
| kkk   | int(6)               | YES  |     | NULL    |                |
+-------+----------------------+------+-----+---------+----------------+
3 rows in set (0.01 sec)
mysql> insert into emp values(null,128,99999999);
Query OK, 1 row affected (0.00 sec)

mysql> select * from emp;
+----+------+----------+
| id | age  | kkk      |
+----+------+----------+
|  1 |  128 | 99999999 |
+----+------+----------+
1 row in set (0.00 sec)

注意:在desc cat表的时候,数据类型后面有宽度的限制,宽度限制是可以超过的,但是不能超过所定义数据类型值的范围

5.4 浮点数类型

在企业中一般不会要求使用浮点型,容易丢失精度,只在特殊的要求下使用浮点类型的

丢失精度是指,float占用32bit,其中24bit用于表示有效数字,只能表示6-7位有效数字

create 表名  字段名 浮点类型(最大长度位m,小数位d)

注意:最大长度位要大于小数位,超过的小数位会四舍五入,至于存储范围取决于是否定义了无符号,从(0.0 ,99999.9)或 (99999.9,99999.9),默认大小为24位数字,精度为6位

mysql> create table t_1(
    -> number_1 float(3,1),
    -> number_2 double(5,2)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_1;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| number_1 | float(3,1)  | YES  |     | NULL    |       |
| number_2 | double(5,2) | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql> insert into t_1 values(2.1,2.23);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
+----------+----------+
1 row in set (0.00 sec)

四舍五入


mysql> insert into t_1 values(2.9,2.77777777);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
|      2.9 |     2.78 |
+----------+----------+
2 rows in set (0.00 sec)
mysql> insert into t_1 values(2.99,2.99999999999999999999999999999999999);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_1;
+----------+----------+
| number_1 | number_2 |
+----------+----------+
|      2.1 |     2.23 |
|      2.9 |     2.78 |
|      3.0 |     3.00 |
+----------+----------+
3 rows in set (0.00 sec)
mysql> insert into t_2 values(9.1111111111111111111111111111111);
Query OK, 1 row affected (0.01 sec)


mysql> select * from t_2;
+-----------------------+
| number                |
+-----------------------+
| 9.1111111111111100000 |
+-----------------------+
1 row in set (0.00 sec)

可以看到精度丢失是十分严重的,所以在对钱的数据管理时候不能使用浮点数,如何解决这个问题呢?这就要用到定点数

5.5 定点数类型

定点数不会丢失精度,因为它的整数和小数分开存储管理,在生活中有许多的小数要求的精度非常之高,所以需要使用定点数

mysql> create table t_3(
    -> number decimal(20,19)
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_3;
+--------+----------------+------+-----+---------+-------+
| Field  | Type           | Null | Key | Default | Extra |
+--------+----------------+------+-----+---------+-------+
| number | decimal(20,19) | YES  |     | NULL    |       |
+--------+----------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_3 values(8.111111111111111111111);
Query OK, 1 row affected, 1 warning (0.00 sec)

mysql> select * from t_3;
+-----------------------+
| number                |
+-----------------------+
| 8.1111111111111111111 |
+-----------------------+
1 row in set (0.00 sec)

5.6 字符串与文本类型

在字符类型中比较常用的是varchar(变长)类型,与之相对应的是char(定长)类型

当然varcahr的使用会比较的多,最主要优势就是它会自动回收多余的字符空间,但是它相对于char的效率也会更低

对于长篇的博客和论文使用字符类型肯定是无法进行存储的,所以在数据库中有一个专门存储文本的数据类型,例如text

5.7 布尔类型

总的讲就是true1false0

mysql> create table t_4(
    -> boool boolean
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> insert into t_4 values(true);
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_4;
+-------+
| boool |
+-------+
|     1 |
+-------+
1 row in set (0.00 sec)

mysql>

5.8 枚举类型

facebook有一大堆性别选项是怎么实现的?

我们国内多的社交网站对性别的选项一般都会有三个:男、女、保密

生活中很多数据是,是大于两种选择的类别,对这种数据类型的定义使用枚举类型(enum)

mysql> create table t_5(
    -> gender enum('man', 'woman', '?', 'nothing', 'it')
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_5;
+--------+----------------------------------------+------+-----+---------+-------+
| Field  | Type                                   | Null | Key | Default | Extra |
+--------+----------------------------------------+------+-----+---------+-------+
| gender | enum('man','woman','?','nothing','it') | YES  |     | NULL    |       |
+--------+----------------------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_5 values('man');
Query OK, 1 row affected (0.00 sec)

mysql> insert into t_5 values('123');
ERROR 1265 (01000): Data truncated for column 'gender' at row 1
mysql> select * from t_5;
+--------+
| gender |
+--------+
| man    |
+--------+
1 row in set (0.00 sec)

mysql>

5.9 枚举类型的另类存储方式

枚举不太一样的存储方式

语法:字段名 enum('选择1','选择2','选择3'...)
mysql> insert into t_5 values(2);
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_5;
+--------+
| gender |
+--------+
| man    |
| woman  |
+--------+
2 rows in set (0.00 sec)

注意:枚举类型选项的存储非常节省空间,它对选项的的管理使用整数,选择1,对应的整数就是1,选择2,对应的整数就是2…以此类推

5.10 枚举类型的好处,为何要用枚举类型,企业可能用在哪?

使用枚举类型可以方便我们解决某些需求外,速度很快又节省很多空间

5.11 set类型

如果说枚举是做单选题,那set就是做多选题

生活中还有许多的数据是在限定范围内可以做多个选项的,这个时候就要用set类型,set是使用2的n次方来存储的

mysql> desc t_6;
+-------+--------------------------+------+-----+---------+-------+
| Field | Type                     | Null | Key | Default | Extra |
+-------+--------------------------+------+-----+---------+-------+
| hobby | set('A','B','C','D','E') | YES  |     | NULL    |       |
+-------+--------------------------+------+-----+---------+-------+
1 row in set (0.00 sec)

'inset into t_6 values('A,B,C')' at line 1
mysql> insert into t_6 values('A,B,C');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_6;
+-------+
| hobby |
+-------+
| A,B,C |
+-------+
1 row in set (0.00 sec)

mysql> insert into t_6 values('C,B,E');
Query OK, 1 row affected (0.01 sec)

mysql> select * from t_6;
+-------+
| hobby |
+-------+
| A,B,C |
| B,C,E |
+-------+
2 rows in set (0.00 sec)

5.12 时间日期类型

基本上使用的是datetime,这是每个表必须有的数据,记录表的各种操作的时间,这个一般也不会手动输入,都是在编程的时候会自动获取时间

mysql> create table t_7(
    -> createdTime datetime
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> desc t_7;
+-------------+----------+------+-----+---------+-------+
| Field       | Type     | Null | Key | Default | Extra |
+-------------+----------+------+-----+---------+-------+
| createdTime | datetime | YES  |     | NULL    |       |
+-------------+----------+------+-----+---------+-------+
1 row in set (0.00 sec)

mysql> insert into t_7 values('2021-09-17 01:28:00');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_7;
+---------------------+
| createdTime         |
+---------------------+
| 2021-09-17 01:28:00 |
+---------------------+
1 row in set (0.00 sec)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

5:数据类型-MySQL 的相关文章

  • MySQL - 通过部分单词匹配和相关性评分进行高效搜索(全文)

    如何进行 MySQL 搜索 既匹配部分单词 又提供准确的相关性排序 SELECT name MATCH name AGAINST math IN BOOLEAN MODE AS relevance FROM subjects WHERE M
  • 如何从java中的字符串时间戳中提取日期和时间

    我正在获取日期和时间String TIMESTAMP来自服务器的 MySQL 格式如下 2014 02 15 05 18 08 我想要的是提取日期DD MM YYYY格式和时间HH MM SS AM PM格式 而且这个时间戳的时区是不同的
  • PHP 7.0和MySQL启动错误“未定义符号:mysqlnd_allocator in Unknown”

    即使在运行时 在自定义编译版本的 PHP7 上也会收到此警告php v 尝试了发布的所有解决方案 什么可能导致这种情况 PHP 警告 PHP 启动 无法加载动态库 usr lib php 20151012 pdo mysql so usr
  • 使用 MySQL 触发器将所有表更改记录到辅助表

    我有一张桌子 CREATE TABLE data table data id INT NOT NULL AUTO INCREMENT PRIMARY KEY field1 INT NOT NULL field2 INT NOT NULL f
  • Hibernate HQL Join 查询 DOT 节点,没有左侧

    我有两个模型类 应用程序 java Entity Table name Application catalog mysqldb XmlRootElement public class Application extends BaseObje
  • 根据多行中的总分对 mysql 中的用户进行排名

    我有与这个问题中描述的非常相似的要求 mysql中的用户按积分排名 https stackoverflow com questions 34637943 rank users in mysql by their points 唯一的区别在于
  • PDO 多查询“SQLSTATE[HY000]:一般错误”

    我仍在学习 PDO 所以我可能会错过一些东西 但基本上我正在尝试将一行插入表中 然后选择生成的 id 我不确定它是否喜欢一个 pdo 语句中的两个查询 这是我用来执行 SQL 的代码 public function ExecuteQuery
  • Session_set_save_handler 未设置

    我在设置 session set save handler 时遇到问题 我将 php ini 配置为 session handler user 这个简单的测试失败了 Define custom session handler if sess
  • 数据库设计 - “推”模型,或写时扇出

    背景信息 我正在尝试检索我关注的人的图像 按最新时间排序 它就像 Twitter 新闻源 显示您朋友的最新动态 Plans 目前我只需要考虑一项 那就是图像 将来我计划分析用户的行为并将他们可能喜欢的其他图像添加到他们的提要中等 http
  • MySql 西班牙语字符数据

    我有一个包含西班牙语字符的数据库 为了填充数据库 我从字符编码 UTF 8 的客户端页面获取值 当我在 mySql 数据库中插入值时 行包含更改的数据 例如 如果我插入 M xico 数据库中的条目是 M xico 其影响是当我对指定 M
  • PHP - While/Else 错误? [关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我有以下
  • Node.js 将 async/await 与 mysql 一起使用

    我一直在尝试在节点中将 async await 与 MySQL 一起使用 但它每次都会返回一个未定义的值 有理由吗 请在下面找到我的代码 const mysql require promise mysql var connection co
  • 新行分隔符不适用于 group_concat 函数

    我有一根绳子 name lastname name2 lastname2 包含数据库表中的值 我想显示它 喜欢 name lastname name2 lastname2 我使用 group concat 函数 它适用于逗号分隔符 但我需要
  • 删除 ibdata1 后 MySQL 表消失了

    几天前 经过一番谷歌搜索后 我发现了这篇文章 我无法再让 mysql 运行了 xampp XAMPP MySQL 意外关闭 https stackoverflow com questions 18022809 xampp mysql shu
  • SQL 未插入到 Yii 中具有关系的表中

    我正在尝试创建一个用户 但所有值都没有插入到数据库中 Systems user 表与partys 表有关系 因为party id 是sytems user 的主键 没有插入任何内容 甚至没有错误 它只是返回到 创建 页面 这是我的架构 Ta
  • 如何查找列表/集合是否包含在另一个列表中

    我有一个产品 ID 列表 我想找出哪些订单包含所有这些产品 订单表的结构如下 order id product id 1 222 1 555 2 333 显然我可以通过 PHP 中的一些循环来做到这一点 但我想知道是否有一种优雅的方法可以纯
  • 对于 IN 列表中的缺失值返回 NULL

    我有一个这样的表 id val 1 abc 2 def 5 xyz 6 foo 8 bar 和一个像这样的查询 SELECT id val FROM tab WHERE id IN 1 2 3 4 5 返回 id val 1 abc 2 d
  • 使用 Java 连接到 MySql - SSL 连接

    我一直在尝试连接到 MySql 数据库 该数据库使用 ssl 连接与 java 并遇到麻烦 如果任何人可以帮助我 将会有很大的帮助 手动连接MySql 我们使用MySQL Workbench 参数 主机名 test db1 ro xxxxx
  • 如何反转散列和加盐密码? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 vBulletin 登录使用它来交叉引用数据库 md5 md5 pass salt 我如何制作一个 PHP 脚本 以便每个密码
  • Join 表(关联表)有主键吗?多对多关系

    Join 表 关联表 有主键吗 多对多的关系 我见过一些带有主键的连接表 一些没有 有人可以解释一下连接表中何时会有主键吗 为什么 先感谢您 在纯 联接 或联结表中 所有字段都将成为主键的一部分 例如 让我们考虑下表 CREATE TABL

随机推荐

  • 11:Server-步入Linux的现代方法

    目录 11 1 Linux Server服务器说明11 2 后话11 3 SSH远程登录11 4 WSL提及 11 1 Linux Server服务器说明 详见 xff1a Ubuntu Server 20 04LTS下载及安装教程 11
  • 10:编辑器之神——Vim-步入Linux的现代方法

    目录 附上 xff1a vi vim键盘图10 1 编辑器简单介绍 xff1a vim编辑器之神 xff1b emac神之编辑器10 2 vim的简单使用方式10 3 移动光标10 4 翻页10 5 不同方式编辑文本 跳跃单词操作技巧10
  • 使用phantomjs将网页转换成pdf或者长图片

    最近有一个将微信公众号的文章转为pdf的想法 xff0c 主要是为了将很多文章保存下来 xff0c 方便打印阅读 最终使用的方法是phantomjs来生成网页的pdf PhantomJS 是一个基于WebKit的服务器端 JavaScrip
  • PUTTY-0.75 下载安装及SSH远程连接方法

    目录 一 下载教程1 进入putty官网2 点击Download it here3 选择安装模式 二 安装教程1 打开安装包2 产品功能设置 三 SSH远程连接方法1 Linux Server 下载SSH2 获取Server地址3 SSH远
  • MTPuTTY连接Ubuntu\Linux SSH登陆出现Access Denied错误

    目录 一 异常错误二 原因三 解决方法1 进入root用户2 进入 etc ssh 目录3 添加PermitRootLogin yes4 重启SSH5 SSH重新连接Ubuntu 一 异常错误 用MTPuTTY远程连接Ubuntu时 xff
  • Ubuntu cannot open directory ‘.‘: Permission denied错误

    目录 一 异常错误二 原因三 解决方法1 前面加上sudo2 或者进入root用户 一 异常错误 Ubuntu正常输入命令出现异常ls cannot open directory 39 39 Permission denied 二 原因 权
  • Ubuntu “readonly” option is set(add to override)错误

    目录 一 异常错误二 原因三 解决方法 一 异常错误 使用vim退出时经常出现 readonly option is set add to override 的错误 二 原因 当前用户没有权限对文件作修改 xff0c 可以强制退出 q 取得
  • Ubuntu E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing? 错误

    目录 一 异常错误二 原因二 解决方法1 网络问题2 source的问题 一 异常错误 apt install 时遇到这个问题 xff0c 无法获取某些存档 二 原因 网络连接超时 二 解决方法 1 网络问题 网关错误拦截了数据包或者防火墙
  • VS2019 error C4996: ‘scanf‘: This function or variable may be unsafe 错误

    目录 一 异常错误二 原因三 解决方法1 替换scanf函数2 添加宏定义3 关闭安全开发生命周期 SDL 检查 一 异常错误 span class token operator span error span class token co
  • VS2019 error C4703: 使用了可能未初始化的本地指针变量 错误

    目录 一 异常错误二 原因三 解决方法1 关闭安全开发生命周期 SDL 检查2 或者将指针变量初始化为nullptr 一 异常错误 error C4703 span class token operator span 对一个潜在的未初始化的
  • VS2019 高级保存设置UTF-8编码-源代码乱码问题

    目录 一 异常错误二 原因三 解决方法 一 异常错误 发现通过VS2019编译的 c文件 xff0c 在Linux中用shell运行时 xff0c 会出现中文乱码的情况 二 原因 本以为是终端编码格式问题 xff0c 后来发现是最初编译器编
  • Linux 终端编译后运行.c/.cpp文件中文乱码问题

    目录 一 异常错误二 原因三 解决方法1 首先确保源代码编码格式是UTF 82 确保Linux运行语言支持中文 一 异常错误 发现通过VS2019编译的 c文件 xff0c 在Linux中用shell运行时 xff0c 终端会出现中文乱码的
  • 「MySQL」从零到删库

    目录 零 数据库的产生 什么是数据库 database抛出问题 xff0c 数据库的产生数据库萌芽阶段的发展历程CRUD层次模型网状模型关系型数据库企业和我们都选什么数据库呢 xff1f 详见 xff1a 零 数据库的产生 一 安装 连接以
  • 用python合并pdf,并添加书签

    之前得到了很多文章的pdf xff0c 现在需要把它们合到一个pdf文件中 使用python库pypdf2可以实现这个功能 首先要安装 pip install pypdf2 然后运行下面的示例 python mergePDF py merg
  • 0:数据库的产生-MySQL

    目录 0 1 什么是数据库 database0 2 抛出问题 xff0c 数据库的产生0 3 数据库萌芽阶段的发展历程0 4 CRUD0 5 层次模型0 6 网状模型0 7 关系型数据库0 8 企业和我们都选什么数据库呢 xff1f 0 1
  • 1:安装、连接以及配置-MySQL

    目录 1 1 windows两种安装方式 xff0c 入门选手推荐第二种 win10演示 1 2 更改终端 xff0c 放弃cmd作为主要终端 xff0c 使用一流终端1 3 MYSQL服务的启动与停止1 4 连接mysql1 5 初始化d
  • 2:数据库的基本操作-MySQL

    目录 2 1 数据库的显示讲解2 2 创建数据库1 创建数据库2 创建带有关键字的数据库 xff08 不推荐 xff09 3 判断并创建一个不知道是否存在的数据库 2 3 删除数据库1 删除数据库2 如果存在则删除数据库 2 4 查看创建的
  • 3:表的基本操作-MySQL

    目录 3 1 提出问题 xff0c 引入 表 的概念与思维模式 table3 2 引用数据库和查看数据库中的表1 引用数据库2 查看数据库中的表 3 3 创建表3 4 创建表 xff08 企业用 xff0c 有B格 xff09 3 5 查看
  • 4:数据操作-MySQL

    目录 4 1 插入数据1 插入数据2 数据的自动添加 xff1a NULL3 default的使用4 省略自增 4 2 一次性插入多条数据4 3 删除数据1 删除2 条件删除 4 4 清空表1 删表跑路2 删节跑路 4 5 小细节 xff0
  • 5:数据类型-MySQL

    目录 5 1 数据库的数据类型问题5 2 int数值类型5 3 int类型实际操作和注意事项5 4 浮点数类型5 5 定点数类型5 6 字符串与文本类型5 7 布尔类型5 8 枚举类型5 9 枚举类型的另类存储方式5 10 枚举类型的好处