这个问题是很久以前就发现的问题一直没有整理,今天有个朋友又问到这个问题。
先看一个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...
本文是我搜集的几个关于时间操作的函数,在mysql中经常有用整型存放日期的问题,如何将整型转换为日期型在网上特别难搜索,本文就提供此项功能。
mysql 5.7.22 x64 绿色纯净版, 无需要安装,执行CMD即可启动 本版本打包和测试环境均为: WIN7 X64 可正常运行 重要说明: MySQL root 密码: 123456 务必及时修改 root 密码! bin/heidisql.exe: MySQL 图形界面...
mysql的配置文件 具体安装见:https://blog.csdn.net/qq_31787603/article/details/81206033
本博客中依赖的jar包下载, https://blog.csdn.net/Hello_World_QWP/article/details/80654536 jar包中的版本具体如下: (如果没有兼容的版本,建议不要下载) mysql-connector-java-5.0.5.jar mysql-connector-...
mysql int(3)与int(11)的区别 总结,int(M) zerofill,加上zerofill后M才表现出有点点效果,比如 int(3) zerofill,你插入到数据库里的是10,则实际插入为010,也就是在前面补充加了一个0.如果int(3)和int(10)不加...
mysql int和tinyint的区别.docx
mysql 5.0.96 解决mysql 5.0.x身份认证漏洞的补丁程序
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 ...
Linux下安装配置 Apache2.2.x+MySql5.x+PHP5.x 详解
整型是MySQL中最常用的字段类型之一,通常用于存储整数,其中int是整型中最常用的,对于int类型你是否真正了解呢?本文会带你熟悉int类型相关知识,也会介绍其他整型字段的使用。 1.整型分类及存储范围 整数类型 ...
1.按照提示安装好mysql 2.运行cmd 进入mysql的安装目录,我的安装目录C:\Program Files\MySQL\MySQL Server 5.6\bin 输入 cd C:\Program Files\MySQL\MySQL Server 5.6\bin 3.采用mysqld将mysql注册为服务,...
非常有用的 mysql 帮助文档。。。
navicat150_mysql_cs_x64
tar zxvf navicat112_mysql_cs_x64.tar.gz 进入解压的目录,运行如下命令 ./start_navicat 问题一:中文乱码 解决:打开start_navicat文件 将export LANG="en_US.UTF-8"改为export LANG="zh_CN.UTF-8" 问题二:试用...
mysql5.6.24-x64,教程地址:https://blog.csdn.net/qq_35901863/article/details/109585219
Java支持mysql8.0x的jdbc驱动和c3p0库,包含如下三个jar包 c3p0-0.9.5.2.jar mchange-commons-java-0.2.15.jar mysql-connector-java-8.0.12.jar JDBC驱动类库名称变化 driverClass 由原来的 ...
mysql5.x可用的 最新mysql-connector-java-5.1.47,亲测可用