这个问题是很久以前就发现的问题一直没有整理,今天有个朋友又问到这个问题。
先看一个mysql表结构
CREATE TABLE `test` ( `TYPEID` int(2) ) ENGINE=MyISAM CHARSET=latin1;
对于test表字段中的typeId 后面的 int(2)中的2代表的到底是什么含义。
对于大多数的人来说我们马上想到的是varchar(2)后面的2代表为两个字节,也就不难把int后的2误认为2位即typeId的最大存入的数为99【俺以前也一直这么认为的】 。
这样的想法一直延续的有个项目,对于数值类型只能在100内的字段忘记作校验就给插入数据库,测试的同事了把一个千位数插入,竟然插入并且数据库中数据也正确。汗,当时我的第一反应是测试服务器的表创建错误,检查一遍没有啊。回到本地也测试了下发现也存在这个问题。逼的没办法了就上网上找资料,终于找到了以下说明。
对于mysql的int来说它的长度是不变的及为4个字节、对于插入数据数据大小也是不变的。
带符号的数值大小范围为:-2147483648 到214748347
无符号的:0到4294967295
int(x)的x并不能改变int类型字段存入数据值的大小【即不能限制数值的范围】
举个示例说
int(2)能存入214748347。
int(1)也能存入214748347。
示例使用test表为例
insert into test value( 214748347 );
发现能插入,整个过程如下:
int(2)能插入214748347。
那int(x)的x到底是什么,x为期望显示数据的列宽。
期望列宽干什么用,这个是和mysql的另外的关键字zerofill一起使用
zerofill 含义代表为未到达宽度x的前填充0【或称为0补位】,超出x代表宽度的数值按原样显示。
备注:zerofill自动将int标示为无符号的类型
无该关键代表不填充,按原值显示。
示例如下
过程如下
CREATE TABLE `tZfill` ( `TYPEID` int(4) zerofill ) ENGINE=MyISAM CHARSET=latin1; insert into tZfill value( 12 ); insert into tZfill value( 558585 ); select * from tZfill;
整个执行过程
mysql中的TINYINT、SMALLINT等数据类型都是这样表示。
(1): 这样可以看出mysql对于数值类型来说不管是多大的数它的存储大小没有改变【该占几个字节还是占几个字节,不因期望存储宽度即x而改变】,所以我们开发时候的选择合适的数值类型能用小的存储位数的就用小的。
(2):对于数字类型该校验的还是要校验,否则容易出现这样的问题.
相关推荐
总的来说,MySQL中的int、char和varchar在性能上的差异并非显著到足以成为决定性因素。开发者应根据实际需求,如数据的类型、大小、预期的增长、是否需要索引以及对可读性和可维护性的要求,来综合考虑选择哪种数据...
navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql_cs_x64navicat111_mysql...
- 对于MySQL5.x:`mysqld --install MySQL5x --defaults-file="C:\ProgramData\MySQL\MySQL Server 5.x\my.ini" --port=3307 --datadir="C:\ProgramData\MySQL\MySQL Server 5.x\Data"` - 对于MySQL8.x:`mysqld -...
在 MySQL 5.x 版本中,主要包含以下关键知识点: 1. **安装与配置**:文档会详细介绍如何在不同的操作系统上安装 MySQL,包括配置服务器参数、设置权限、启动和停止服务等步骤。 2. **SQL 语言**:MySQL 支持标准...
本博客中依赖的jar包下载, https://blog.csdn.net/Hello_World_QWP/article/details/80654536 jar包中的版本具体如下: (如果没有兼容的版本,建议不要下载) mysql-connector-java-5.0.5.jar mysql-connector-...
Linux 下安装配置 Apache2.2.x+MySql5.x+PHP5.x 详解 本篇文章详细介绍了在 Linux 操作系统下安装和配置 Apache2.2.x、MySql5.x 和 PHP5.x 的步骤,使用的操作系统为 Redhat AS5,内核版本为 Linux 2.6.18-8.el5,...
mysql 5.7.22 x64 绿色纯净版, 无需要安装,执行CMD即可启动 本版本打包和测试环境均为: WIN7 X64 可正常运行 重要说明: MySQL root 密码: 123456 务必及时修改 root 密码! bin/heidisql.exe: MySQL 图形界面...
在Linux系统中,CentOS 6是一个非常流行的发行版,而MySQL 5.6.x是其常用的关系型数据库管理系统。本教程将详细讲解如何在CentOS 6上安装MySQL 5.6.x版本,并涉及如何自定义安装路径,以满足特定的需求。 1. **准备...
本补丁针对的是MySQL 5.0.x系列的一个特定安全漏洞,即身份认证漏洞。 身份认证漏洞在数据库系统中是个严重的问题,因为它可能导致未经授权的用户访问数据库,窃取敏感数据或者对数据库进行恶意操作。在MySQL ...
`mysql-connector-java-5.1.47`是针对MySQL 5.x版本的一个特定版本的驱动程序,它是Java Database Connectivity (JDBC) API的一部分,允许Java开发者在Java应用程序中执行SQL语句,管理数据库连接,以及处理数据库...
mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加...
本文将详细介绍如何使用Qt连接到64位MySQL数据库,以及如何处理所需的"qt-mysql-x64dll库.zip"中的支持库。 首先,让我们理解Qt和MySQL的集成。Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的库和工具,允许...
mysql8.0 X64 安装文件和手动安装脚本 --命令行依次执行下面代码 C:\Windows\system32>D: D:\>cd D:\mysql-8.0.11-winx64 D:\mysql-8.0.11-winx64>cd bin D:\mysql-8.0.11-winx64\bin>mysqld --initialize-insecure ...
《Navicat150_mysql_cs_x64:探索高效MySQL数据库管理的得力助手》 在当今数字化时代,数据库管理扮演着至关重要的角色,尤其是对于处理大量数据的企业和开发者而言。MySQL作为世界上最受欢迎的开源关系型数据库...
【标题】"php+apache+mysql x64" 指的是在64位...这个"php+apache+mysql x64"的压缩包提供了搭建64位Web开发环境的基础,对于开发者而言,这意味着能够在一个一致且兼容的环境中开发、测试和部署基于PHP的Web应用程序。
整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。 1.整型分类及存储范围 整数类型 ...
MySQL 5.6.x是MySQL数据库管理系统的一个重要版本,它在功能、性能和稳定性上都有显著提升。在64位操作系统环境下安装MySQL 5.6.x版本,可以充分利用系统资源,提供更强大的数据库处理能力。以下是对安装过程的详细...
在MySQL中,`INT` 和 `TINYINT` 是两种常见的整数类型,它们主要用于存储整数值。这两种类型的差异主要体现在存储空间的需求、能够表示的数值范围以及显示宽度等方面。 #### 二、INT 类型详解 1. **存储空间**:`...
“MySQL 8.X - 云端数据库之王”:强调 MySQL 8.X 版本在云环境中的优异表现和强大功能。 “MySQL 8.X - 数据驱动的未来”:突出 MySQL 8.X 版本在支持大数据和数据分析方面的优势。 “MySQL 8.X - 开发者的福音”:...
在提供的压缩文件“Navicat091_mysql_cs.exe”中,包含了Navicat9.x的安装程序,用户只需按照提示进行安装,即可开始享受这款强大的数据库管理软件带来的便利。 总的来说,Navicat9.x for MySQL是一款集设计、管理...