mysql数据类型实例分析

整数类型

数值型数据类型主要用来存储数字,mysql提供了多种数值数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,其所需要的存储空间也会越大。

mysql主要提供的整数类型有TINYINTSMALLINTMEDIUMINTINTBIGINT。整数类型的属性字段可以添加AUTO_INCREMENT自增约束条件。

看下下面两个表;

表一:mysql中的整数型数据类型

表二、mysql不同整数类型的取值范围

举个例子:

year int(4);

该声明指明,在year字段中的数据一般只显示4位数字的宽度;

注意点:显示宽度和数据类型取值范围是无关的。显示宽度只是指明mysql最大可能显示的数字个数,数值的位数小于指定的宽度时会由空格填充;如果插入了大于显示宽度的值,只要该值不超过该类型整数的取值范围,数值依然可以插入,而且能够显示出来。

例如:向year字段插入一个数值12345,当使用select查询该列值的时候,mysql显示的将是完整的带有5位数字的12345,而不是4位数字的值。

其他整数型数据类型也可以在定义表结构时指定所需要的显示宽度,如果不指定,则系统为每一种类型指定默认的宽度。

不同的整数类型有不同的取值范围,并且需要不同的存储空间,因此应该根据实际需要选择最合适的类型,这样有利于提高查询的效率和节省存储空间。在现实生活中,需要使用带小数部分的数字,而整数类型不包含小数部分。下面我们就来介绍下小数类型。

注意点:显示宽度只用于显示,并不能限制取值范围和占用空间。

浮点数类型和定点数类型

mysql中使用浮点数和定点数来表示小数。

浮点数类型有两种:

单精度浮点类型(FLOAT)

双精度浮点类型(DOUBLE)

定点数类型只有一种:

DECIMAL

浮点数类型和定点数类型都可以用(M,N)来表示。其中呢,我们用M称为精度,表示总共的位数N称为标度,表示小数的位数

DECIMAL类型不同于FLOATDOUBLEDECIMAL实际是以串存放的,可能的最大取值范围和DOUBLRE一样,但是其有效的取值范围由MD的值来决定。怎么说呢?

如果改变M而固定D,则其取值范围将随着M的变大而变大。

那么在mysql中,浮点数类型和定点数类型的取值范围有多大呢?

几乎正常业务情况下是不可能用完的,因为他们的取值范围如下:

FLOAT类型的取值范围:

有符号的取值范围:-3.402823466E+38 ~-1.175494351E-38

无符号的取值范围:0和1.175494351E-38 ~3.402823466E+38

DOUBLE类型的取值范围:

有符号的取值范围:-1.7976931348623157E+308 ~-2.2250738585072014E-308

无符号的取值范围:0和2.2250738585072014E-308~ 1.7976931348623157E+308

注意点:无论是定点数还是浮点数类型,如果用户指定的精度超出精度范围,则会四舍五入。

可能有点绕,举个栗子吧:

创建一个数据表为yunweijia_1,字段类型如下;

mysql> create table yunweijia_1 (x float(5,1), y double(5,1), z decimal(5,1));Query OK, 0 rows affected, 2 warnings (0.04 sec)mysql>

然后我们在这个表中插入一条数据,sql语句如下:

mysql> insert into yunweijia_1 values (6.66, 7.77, 8.888);Query OK, 1 row affected, 1 warning (0.01 sec)mysql>

看上面的提示信息,是不是在我们执行插入语句的时候,给了一个警告信息,然后我们来看下这个警告信息是什么吧;

mysql> show warnings;+-------+------+----------------------------------------+| Level | Code | Message |+-------+------+----------------------------------------+| Note | 1265 | Data truncated for column 'z' at row 1 |+-------+------+----------------------------------------+1 row in set (0.00 sec)mysql>

可以看到他提示说,z字段在插入的时候被截断了,但是xy截断就没有提出警告。

那么查看下结果吧:

mysql> select * from yunweijia_1;
+——+——+——+
| x | y | z |
+——+——+——+
| 6.7 | 7.8 | 8.9 |
+——+——+——+
1 row in set (0.00 sec)
mysql>

可以看到分别都进行了四舍五入,这点需要注意。

FLOATDOUBLE在不指定精度操作时,默认会按照实际的精度(由计算机硬件和操作系统决定),DECIMAL若不指定精度则默认为(10,0);

浮点数相对于定点数的优点是在长度一定的情况下,浮点数能够表示更大的数据范围;他的缺点是会引起精度问题;

注意点:在mysql中,定点数以字符串形式存储,在对精度要求比较高的时候,使用DECIMAL的类型比较好,另外,两个浮点数进行减法和比较运算时,容易出现问题,所以在使用浮点数时需要注意,并尽量避免做浮点数比较。

日期与时间类型

mysql中有多种表示日期的数据类型,主要有:

DATETIME

DATE

TIMESTAMP

TIME

YEAR

比如说,当只记录年信息的时候,可以只使用YEAR类型,而没有必要使用DATE

每一个类型都有合法的取值范围,当指定确实不合法的值时系统将“零”值插入到数据库中。

YEAR

year类型是一个单字节类型,用于表示年,在存储时只需要1字节。可以使用各种格式指定year值,如下:

1、以4位字符串或者4位数字格式表示的year,范围为1901~2155。输入格式为yyyy或者’yyyy’,例如:输入‘2022’或者2022,插入到数据库的值均为2022。

2、以2位字符串格式表示的year,范围为“00”到“99”。“00”~“69”和“70”~“99”范围的值分别被转换为“2022”~“2069”和“1970”~“1999”范围的year值。“0”与“00”的作用相同。插入超过取值范围的值将被转换成2000

3、以两位数字表示的YEAR,范围为1~99。1~69和70~99范围的值分别被转换为200·~2069和1970~1999范围的YEAR

值。和字符相比较而言,这里的0值,将被转换成0000,而不是2000。

注意点:

怪兽AI数字人 怪兽AI数字人

数字人短视频创作,数字人直播,实时驱动数字人

怪兽AI数字人 44 查看详情 怪兽AI数字人

两位整数范围与两位字符串范围稍有不同。例如,插入2000年,有人可能会使用数字格式的0表示year,实际上,插入数据库的值为0000,而不是所希望的2000。只有使用字符串格式的“0”或者“00”,才可以被正确的解释为2000,。非法YEAR值将被转换为0000。

栗子:

我们创建一个名为yunweijia_2的数据表,使用以下sql语句:

mysql> create table yunweijia_2 (y year);Query OK, 0 rows affected (0.04 sec)mysql>

然后我们往表中插入一条数据;

mysql> insert into yunweijia_2 values(2022), ('2022');Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql>

再次尝试插入一条数据;

mysql> insert into yunweijia_2 values ('2166');ERROR 1264 (22003): Out of range value for column 'y' at row 1mysql>

我们发现‘2166’超出了YEAR类型的取值范围,所以不能插入数据,这个时候我们看下mysql数据库中的数据;

mysql> select * from yunweijia_2;+------+| y |+------+| 2022 || 2022 |+------+2 rows in set (0.00 sec)mysql>

栗子:

首先我们先删除yunweijia_2数据表中的数据;

mysql> delete from yunweijia_2;Query OK, 2 rows affected (0.01 sec)mysql>

可以看到提示删除了两条数据;

然后我们再插入以下数据;

mysql> insert into yunweijia_2 values ('0'), ('00'), ('88'), ('22');Query OK, 4 rows affected (0.01 sec)Records: 4 Duplicates: 0 Warnings: 0mysql>

然后看下结果是什么:

mysql> select * from yunweijia_2;
+——+
| y |
+——+
| 2000 |
| 2000 |
| 1988 |
| 2022 |
+——+
4 rows in set (0.00 sec)
mysql>

从上面i看到,字符串‘0’和‘00’的作用相同,分别都转换成了2000年;‘88’转换成了‘1988’;‘22’转换成了‘2022’。

栗子:

老规矩,先删除表中现有的数据;

mysql> delete from yunweijia_2;Query OK, 4 rows affected (0.01 sec)mysql>

然后再插入数据:

mysql> insert into yunweijia_2 values (0), (99), (22);Query OK, 3 rows affected (0.01 sec)Records: 3 Duplicates: 0 Warnings: 0mysql>

看下结果:

mysql> select * from yunweijia_2;
+——+
| y |
+——+
| 0000 |
| 1999 |
| 2022 |
+——+
3 rows in set (0.00 sec)
mysql>

可以看到,0被转换成了0000,99被转换成了1999,22被转换成了2022。

TIME

time类型用在只需要时间信息的值,在存储时需要3字节,格式为HH:MM:SS

其中,HH表示小时,MM表示分钟,SS表示秒。

mysqltime类型的取值范围为-838:59:59~838:59:598,小时部分为什么会这么大呢,这是因为time类型不仅可以用来表示一天的时间,还可能是某个事件过去的时间或者两个事件之间的时间间隔。

(1)‘D HH:MM:S’格式的字符串,可以使用下面任何一种“非严格”的语法:

‘HH:MM:SS’

‘HH:MM’

‘D HH:MM’

这里的D表示日,可以取0~34的值,在插入数据库时,D被转换成小时保存,格式为“D*24+HH”;

(2)‘HH:MM:SS’格式的、没有间隔符的字符串或者HHMMSS格式的数值,假定是有意义的时间。例如:’223344’被理解成‘22:33:44’,但是‘223366’是不合法的(他有一个没有意义的秒部分),存储时将变成00:00:00。

注意点:

time列分配简写时应该注意,如果没有冒号,mysql解释值时,假定最右边的两位表示秒。如果time值中使用了冒号,则肯定被单做是当天的时间。

例如:

11:22 会被mysql解释成 00:11:22

’11:22’会被mysql解释成11:22:00

栗子

创建一个名为yunweijia_3的数据表;

mysql> create table yunweijia_3(t time);Query OK, 0 rows affected (0.03 sec)mysql>

往这个表中插入数据:

mysql> insert into yunweijia_3 values ('10:06:06'), ('22:22'), ('2 10:10'), ('3 00'), ('20');Query OK, 5 rows affected (0.01 sec)Records: 5 Duplicates: 0 Warnings: 0mysql>

看下表中的数据:

mysql> select * from yunweijia_3;+----------+| t |+----------+| 10:06:06 || 22:22:00 || 58:10:00 || 72:00:00 || 00:00:20 |+----------+5 rows in set (0.00 sec)mysql>

小提示:在使用‘D HH’格式时,小时一定要使用双位数值,如果是小于10的小时数,应在前面加0以用来补全双位数值。

举个栗子 :

首先我们删除数据表yunweijia_3里面的数据;

mysql> delete from yunweijia_3;Query OK, 5 rows affected (0.01 sec)mysql>

然后再表中插入数据:

mysql> insert into yunweijia_3 values ('101112'), (111213), ('0');Query OK, 3 rows affected (0.01 sec)Records: 3 Duplicates: 0 Warnings: 0mysql>

再次向表中插入一条数据;

mysql> insert into yunweijia_3 values (107010);ERROR 1292 (22007): Incorrect time value: '107010' for column 't' at row 1mysql>

可以看到这条数据没有插入成功,我看看下提示信息;

mysql> show warnings;+-------+------+--------------------------------------------------------+| Level | Code | Message |+-------+------+--------------------------------------------------------+| Error | 1292 | Incorrect time value: '107010' for column 't' at row 1 |+-------+------+--------------------------------------------------------+1 row in set (0.00 sec)mysql>

为什么这次会插入失败呢,是不是因为我们的分钟应该是小于60的啊,但是这里是70,所以报错了。

我们查看下这个数据库中的数据现在的展示吧:

mysql> select * from yunweijia_3;+----------+| t |+----------+| 10:11:12 || 11:12:13 || 00:00:00 |+----------+3 rows in set (0.00 sec)mysql>

又举个栗子:

我们还可以使用系统函数向time字段列插入值;

删除数据表yunweijia_3里面的数据;

mysql> delete from yunweijia_3;Query OK, 3 rows affected (0.01 sec)mysql>

然后在表中插入数据;

mysql> insert into yunweijia_3 values (CURRENT_TIME), (NOW());Query OK, 2 rows affected (0.01 sec)Records: 2 Duplicates: 0 Warnings: 0mysql>

查看下数据库中的结果;

mysql> select * from yunweijia_3;
+———-+
| t |
+———-+
| 23:03:41 |
| 23:03:41 |
+———-+
2 rows in set (0.00 sec)

mysql>

从结果中可以看到,获取系统当前的日志插入到time类型的列中。

以上就是mysql数据类型实例分析的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/263143.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月4日 09:40:04
下一篇 2025年11月4日 09:41:13

相关推荐

  • 网络进化!

    Web 应用程序从静态网站到动态网页的演变是由对更具交互性、用户友好性和功能丰富的 Web 体验的需求推动的。以下是这种范式转变的概述: 1. 静态网站(1990 年代) 定义:静态网站由用 HTML 编写的固定内容组成。每个页面都是预先构建并存储在服务器上,并且向每个用户传递相同的内容。技术:HT…

    2025年12月24日
    000
  • 为什么多年的经验让我选择全栈而不是平均栈

    在全栈和平均栈开发方面工作了 6 年多,我可以告诉您,虽然这两种方法都是流行且有效的方法,但它们满足不同的需求,并且有自己的优点和缺点。这两个堆栈都可以帮助您创建 Web 应用程序,但它们的实现方式却截然不同。如果您在两者之间难以选择,我希望我在两者之间的经验能给您一些有用的见解。 在这篇文章中,我…

    2025年12月24日
    000
  • CSS如何实现任意角度的扇形(代码示例)

    本篇文章给大家带来的内容是关于CSS如何实现任意角度的扇形(代码示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 扇形制作原理,底部一个纯色原形,里面2个相同颜色的半圆,可以是白色,内部半圆按一定角度变化,就可以产生出扇形效果 扇形绘制 .shanxing{ position:…

    2025年12月24日
    000
  • html中怎么运行sql语句_html中运行sql语句方法【教程】

    必须通过后端服务执行SQL操作。一、PHP与MySQL交互:使用PHP脚本在服务器端连接数据库,执行查询并嵌入HTML输出,避免硬编码凭证。二、Ajax调用API:前端通过JavaScript向后端API发送请求,服务端执行SQL并返回JSON数据,前端动态渲染结果。三、SQLite与JavaScr…

    2025年12月23日
    000
  • html手机怎么运行_手机运行html方法【教程】

    1、使用手机浏览器可直接打开本地HTML文件,只需通过文件管理器点击文件并选择浏览器打开即可预览;2、借助Spck Editor等专用编辑器应用能实现实时编辑与预览,适合开发调试;3、对于含JavaScript或需服务器支持的动态内容,应安装KSWEB类应用搭建本地服务器,再通过http://loc…

    2025年12月23日
    000
  • html如何连接_连接HTML与数据库或API接口【接口】

    HTML无法直接连接数据库或调用API,需借助JavaScript fetch、PHP中转、Node.js后端或Python Flask等服务端技术实现动态数据交互。 如果您希望在网页中动态获取数据,HTML本身无法直接连接数据库或调用API接口,必须借助服务器端语言或JavaScript等客户端技…

    2025年12月23日
    000
  • HTML如何添加批注功能_评论系统实现方案【教程】

    可实现HTML文本批注功能的四种方案:一、基于HTML5自定义属性与JS的静态批注;二、遵循W3C标准的语义化批注;三、嵌入Utterances或Giscus等第三方评论系统;四、自建AJAX评论后端+前端组件。 如果您希望在HTML页面中为特定文本添加可交互的批注功能,或构建一个轻量级的评论系统,…

    2025年12月23日
    000
  • html怎么在本地服务器运行_本地服务器运html方法【指南】

    使用本地服务器运行HTML文件需通过HTTP协议,可选Python命令启动服务、Node.js的http-server、VS Code的Live Server插件或XAMPP等工具,确保AJAX等功能正常。 要在本地服务器运行HTML文件,不能直接双击打开,因为部分功能(如AJAX、API调用)需要…

    2025年12月23日
    200
  • phpstudy怎么运行本地html_phpstudy运行本地html方法【教程】

    确保Apache或Nginx服务已启动;2. 将HTML文件放入WWW目录;3. 浏览器访问localhost即可运行页面。 在使用 PHPStudy 时,运行本地 HTML 文件非常简单。PHPStudy 是一个集成了 Apache/Nginx、PHP 和 MySQL 的集成环境工具,主要用于本地…

    2025年12月23日
    000
  • HTML页面如何生成短链接_URL压缩转换方法【攻略】

    可借助第三方服务、API调用、Nginx反向代理、PHP脚本或GitHub Pages五种方式将HTML页面URL转为短链接:1.用bit.ly等平台手动缩短;2.调用Bitly API批量生成;3.配置Nginx rewrite规则重定向;4.部署PHP+MySQL实现动态跳转;5.利用GitHu…

    2025年12月23日
    000
  • Java JDBC中SQL INSERT语句的常见语法错误及修复指南

    本文旨在解决java jdbc应用中常见的sql `insert`语句语法错误,特别是因缺少括号而导致的错误。我们将深入分析错误信息,指出问题根源,并提供正确的sql语句范例及java jdbc `preparedstatement`的使用方法。文章还将涵盖jdbc数据库操作的最佳实践、错误处理和调…

    2025年12月23日
    000
  • wampserver怎么运行html程序_wampserver运行html程序方法【教程】

    使用WampServer运行HTML程序需将文件放入www目录,启动Apache服务后通过http://localhost/项目路径访问,确保在本地服务器环境下正确解析运行。 如果您在本地开发网页,但无法正确查看HTML文件的运行效果,可能是由于未通过本地服务器环境进行访问。WampServer 提…

    2025年12月23日
    000
  • 平板怎么运行html代码_平板运行html代码步骤【指南】

    可在平板上通过四种方式查看HTML效果:一、用浏览器直接打开本地.html文件;二、使用JSFiddle等在线编辑器实时预览;三、安装Acode等编程应用离线编写并预览;四、通过KSWEB搭建本地服务器运行含动态内容的页面。 如果您希望在平板设备上查看或测试HTML代码的效果,但不确定如何操作,则可…

    2025年12月23日
    000
  • html上怎么运行php代码吗_html中运行php代码方法【教程】

    要使PHP代码在HTML中执行,必须通过支持PHP的服务器环境。首先将文件保存为.php格式并部署到配置好PHP模块的服务器(如Apache)根目录,通过http://localhost访问;或修改服务器配置(如.htaccess)令.html文件解析PHP;推荐使用.php文件混合HTML与PHP…

    2025年12月23日
    000
  • html怎么用sublime运行php_sublime运行html中php方法【教程】

    可在Sublime Text中通过配置PHP环境变量并创建Build System运行PHP代码,或使用PHP内置服务器、XAMPP等集成环境结合浏览器预览实现解析与调试。 如果您在使用Sublime Text编辑HTML或PHP文件时,希望直接运行PHP代码并查看输出结果,但发现无法像在浏览器中那…

    2025年12月23日
    000
  • PHP表单提交后防止页面刷新并保留数据与错误提示的教程

    本教程旨在解决php表单提交时页面刷新、用户输入数据丢失以及错误提示显示不佳的问题。核心方法是利用服务器端php的`$_post`变量,在表单提交并进行服务器端验证失败后,不进行页面重定向,而是直接在当前页面重新渲染表单,同时回填用户之前输入的数据并显示验证错误信息,从而显著提升用户体验。 引言:优…

    2025年12月23日
    000
  • 如何通过JavaScript/jQuery获取HTML元素内容并与PHP后端交互

    本教程详细阐述了如何利用JavaScript和jQuery从HTML页面中动态获取特定` `标签的文本内容,并进一步探讨了如何将这些前端捕获的数据通过AJAX技术安全地传递给PHP后端进行处理,例如执行SQL查询。文章涵盖了从前端事件触发、数据捕获到后端数据接收、处理及安全防护的全流程,旨在提供一个…

    2025年12月23日
    000
  • php怎么在html5中运行_php在html5中运行方法【教程】

    PHP在服务器端运行,通过嵌入HTML5文件生成动态内容。1. PHP与HTML5协同工作:PHP代码嵌入.html或.php文件,由服务器解析后输出纯HTML至浏览器。2. 创建index.php文件,使用标准HTML5结构,在其中插入等PHP代码,实现动态内容展示。3. 搭建本地环境可选用XAM…

    2025年12月23日 好文分享
    000
  • epp4怎么运行html文件_EPP4运行html文件步骤【指南】

    首先确认EPP4已安装并启动Apache服务,将HTML文件放入www目录后,通过http://localhost/路径访问即可预览页面,确保文件位置与路径正确。 打开EPP4后运行HTML文件并不复杂,只需正确操作即可在浏览器中预览页面效果。EPP4(Easy PHP Pack 4)是一个集成开发…

    2025年12月23日
    000
  • html怎么用浏览器运行php_浏览器运html中php文件方法【教程】

    正确答案是搭建本地开发环境。需安装XAMPP等集成工具,将.php文件放入htdocs目录,通过http://localhost访问,确保服务器解析PHP并返回HTML给浏览器显示。 PHP 是服务器端语言,不能直接通过浏览器像 HTML 那样双击打开运行。你看到的“在浏览器中运行 PHP”其实是指…

    2025年12月23日
    000

发表回复

登录后才能评论
关注微信