mysql中为int设置长度究竟是什么意思

根据个人的实验并结合资料
1、长度跟可以使用的值的范围无关,值的范围仅跟类型对应的存储字节数和是否unsigned有关;
2、长度指的是显示宽度,比如,指定3位int,那么id为3和id为300的值,在显示的时候怎么对齐呢?按照手册的说法,是默认用“空格”在左边填充。比如下述表格

CREATE TABLE `inttest` (
  `id` int(3) unsigned NOT NULL AUTO_INCREMENT,
  `value` varchar(2) NOT NULL,
  PRIMARY KEY (`id`)
) EN

现在分别插入id长度为2,3,4,5位的数据,执行查询以后得到显示如下:

MariaDB [mytest]> select * from inttest;
+-------+-------+
| id    | value |
+-------+-------+
|    13 | a     |
|   111 | b     |
|  1000 | c     |
| 10000 | d     |
+-------+-------+
4 rows in set (0.00 sec)

如果我们改成ZEROFILL,再次查询的结果如下:

MariaDB [mytest]> select * from inttest;
+-------+-------+
| id    | value |
+-------+-------+
|   013 | a     |
|   111 | b     |
|  1000 | c     |
| 10000 | d     |
+-------+-------+
4 rows in set (0.00 sec)

我们会发现,不足3位长度的值会被自动填充,而超过3位长度的值就不会被填充了。

以下是mysql官网对于设置宽度的解释:

“MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。“

“当结合可选扩展属性ZEROFILL使用时, 默认补充的空格用零代替。例如,对于声明为INT(5) ZEROFILL的列,值4检索为00004。请注意如果在整数列保存超过显示宽度的一个值,当MySQL为复杂联接生成临时表时会遇到问题,因为在这些情况下MySQL相信数据适合原列宽度。

时间: 2024-10-16 17:43:35

mysql中为int设置长度究竟是什么意思的相关文章

【MySQL 】MySQL 中的 int(11) 到底代表什么意思?

一.前言二.简介三.结论四.参考链接 一.前言   在工作中经常要与 mysql 打交道,但是对 mysql 的各个字段类型一直都是一知半解,因此写本文总结记录一番. 二.简介   对于 int 类型的一些基础知识其实上图已经说的很明白了,在这里想讨论下常用的 int(11) 代表什么意思,很长时间以来我都以为这代表着限制 int 的长度为 11 位,直到有天看到篇文章才明白,11 代表的并不是长度,而是字符的显示宽度,在字段类型为 int 时,无论你显示宽度设置为多少,int 类型能存储的最大

mysql 中的 int(n)

如图: mysql 中的这个长度设置,即 int(n) 是什么意思,以及“无符号”和“填充零”又代表什么意思? 无符号:首先int(n),Integer(n) 长度为32位二进制整数(4字节),勾选上“无符号”时表示禁止负数,取值从0开始.此时可以表示的范围是 0 ---- 2e(32)-1 ,你可以存储任何在这个范围内的数字.(即符号位也用于具体数字的存储) 填充零:勾选上“零填充”之后就会有很大的不同,若选择 int(4),存储 18 (十进制),则数据库中显示的是 0018(十进制),如果

MySQL中各种数据类型的长度及在开发中如何选择

接触MySQL这个数据库大概快要两年了,不过由于没有特别深入系统的去学习,大多也是停留在一知半解的状态.今天在工作中刚好碰到了表设计的问题,顺便写篇博客,把MySQL中数据类型和字段类型选择这方面给弄清楚. MySQL中的数据类型大体分为三大类,数值类型,时间日期类型以及字符串类型.下面将对这三种类型进行详细的介绍. 一.数值类型 MySQL 支持所有标准SQL 中的数值类型,其中包括严格数值类型(INTEGER.SMALLINT.DECIMAL 和NUMERIC),以及近似数值数据类型(FLO

MYSQL 中的 int(11) 到底代表什么意思?

int(11) 的含义: 11 代表的并不是长度,而是字符的显示宽度: 在字段类型为int时,无论你显示宽度设置为多少,int类型能存储的最大值和最小值永远都是固定的 当int字段类型设置为无符号且填充零(UNSIGNED ZEROFILL)时,当数值位数未达到设置的显示宽度时,会在数值前面补充零直到满足设定的显示宽度,为什么会有无符号的限制呢,是因为ZEROFILL属性会隐式地将数值转为无符号型,因此不能存储负的数值. 注意:如果用navicate软件查询出来并不会显示左边的0,但把数据导出时

MySQL中boolean类型设置

在用MySQL设置boolean的时候发现跟本就没有这种类型,后来查资料才知道: boolean类型用tinyint表示, MYSQL保存BOOLEAN值时用1代表TRUE,0代表FALSE,boolean在MySQL里的类型为tinyint(1) 在此作个分享,方便查找使用. 原文地址:https://www.cnblogs.com/zyx110/p/11368031.html

Mysql中varchar和char区别

一.varchar和char的区别: 区别一:定长和变长 char表示定长.长度固定,varchanr表示变长,即长度可变. 即char类型是规定多少字长则必须存储多少字长,超过的长度的字段则只能截取出对应的长度进行存储,相对于要求字长长度不够的字段则用空格补齐. 而varchar类型则是只要在规定字长之内,有多少存多少,无需补齐:超出的部分和char一样,舍去即可.(由perfix来实现) 区别二:存储容量不同 对于char类型来说,最多只能存放的字符个数为255,和编码无关. varchar

mysql中utf8和utf8mb4区别

MySQL在5.5.3之后增加了这个utf8mb4的编码,mb4就是most bytes 4的意思,专门用来兼容四字节的unicode.好在utf8mb4是utf8的超集,除了将编码改为utf8mb4外不需要做其他转换.当然,为了节省空间,一般情况下使用utf8也就够了. 二.内容描述 那上面说了既然utf8能够存下大部分中文汉字,那为什么还要使用utf8mb4呢? 原来mysql支持的 utf8 编码最大字符长度为 3 字节,如果遇到 4 字节的宽字符就会插入异常了.三个字节的 UTF-8 最

PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解

问题一:在我们进行数据库操作时会发现,数据库中表的编码用的是utf-8,但是在进行dos命令是要使用set names gbk (一)Mysql中默认字符集设置有四级:服务器级,数据库级,表级,和字段级   前三种都是默认设置,并不代表你的字段最终会使用这个字符集设置 (二)set names 这个mysql命令设置是客户端发出的命令编码,连接层编码,和服务器端返回结果的编码,相当于客户端和服务器交互用的编码,而不是数据保存的编码 问题二:在我们使用的时候:当我们set names utf 的时

mysql中几个有用的函数

1. FROM_UNIXTIME 作用:将MYSQL中以INT(11)存储的时间以"YYYY-MM-DD"格式来显示. 例: select mtime, from_unixtime(mtime) from topics limit 10; 2. CONCAT(str1,str2,-) 作用:将str1, str2...连接为字串.如有任何一个参数为NULL ,则返回值为 NULL. 例: update video set playlink = concat(playlink, '&am