首页
学习
活动
专区
圈层
工具
发布

mysql id长度

基础概念

MySQL中的ID通常用于唯一标识表中的每一行记录。ID的长度取决于具体的数据类型和业务需求。常见的ID类型包括整数类型(如INT)和字符串类型(如VARCHAR)。

相关优势

  1. 唯一性:ID的主要优势是能够唯一标识每一行记录,便于数据的查询和管理。
  2. 索引优化:整数类型的ID通常会被自动创建索引,提高查询效率。
  3. 存储空间:整数类型的ID占用的存储空间较小,适合大规模数据存储。

类型

  1. 整数类型
    • TINYINT:占用1个字节,范围是-128到127或0到255。
    • SMALLINT:占用2个字节,范围是-32768到32767或0到65535。
    • MEDIUMINT:占用3个字节,范围是-8388608到8388607或0到16777215。
    • INT:占用4个字节,范围是-2147483648到2147483647或0到4294967295。
    • BIGINT:占用8个字节,范围是-9223372036854775808到9223372036854775807或0到18446744073709551615。
  • 字符串类型
    • VARCHAR:可变长度的字符串,长度范围是1到65535个字符。
    • CHAR:固定长度的字符串,长度范围是1到255个字符。

应用场景

  1. 自增ID:通常使用INT类型,并设置为自增(AUTO_INCREMENT),适用于大多数业务场景。
  2. UUID:使用VARCHAR类型存储32位的UUID,适用于分布式系统,确保全局唯一性。
  3. 复合ID:在某些复杂场景下,可能需要使用多个字段组合成一个唯一的ID。

常见问题及解决方法

问题:为什么选择INT类型作为ID?

原因

  • INT类型占用的存储空间较小,查询效率高。
  • 自增特性方便插入新记录。
  • 整数类型在数据库中更容易进行索引和排序。

解决方法

  • 如果业务场景不需要全局唯一性,且数据量较大,建议使用INT类型并设置为自增。
  • 示例代码:
  • 示例代码:

问题:为什么选择VARCHAR类型作为ID?

原因

  • 需要全局唯一性,如UUID。
  • ID包含特殊字符或较长字符串。

解决方法

  • 使用VARCHAR类型存储UUID或其他长字符串。
  • 示例代码:
  • 示例代码:

参考链接

希望以上信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • mysql中int长度的意义

    提问: mysql的字段,unsigned int(3), 和unsinged int(6), 能存储的数值范围是否相同。如果不同,分别是多大?...真实情况: 我们建立下面这张表: CREATE TABLE `test` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `i1` int...) unsigned zerofill DEFAULT NULL, `i2` int(6) unsigned zerofill DEFAULT NULL, PRIMARY KEY (`id...查下手册,解释是这样的: MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。...也就是说,int的长度并不影响数据的存储精度,长度只和显示有关,为了让大家看的更清楚,我们在上面例子的建表语句中,使用了zerofill。

    5.5K10

    MySQL中索引的长度的限制

    参考: http://dinglin.iteye.com/blog/1681332 单列索引的长度的限制     (5.6里面默认不能超过767bytes,5.7不超过3072bytes):     起因是...255×4>767, 于是增加了一个参数叫做 innodb_large_prefix     # 256的由来: 只是因为char最大是255,所以以前的程序员以为一个长度为255的index就够用了,...--- by 阿里-丁奇 在MySQL5.6里默认 innodb_large_prefix=0 限制单列索引长度不能超过767bytes    官网文档:https://dev.mysql.com/doc.../refman/5.6/en/innodb-parameters.html#sysvar_innodb_large_prefix 注意: 在MySQL5.6里面,设置了innodb_large_prefix...在MySQL5.7里默认 innodb_large_prefix=1 解除了767bytes长度限制,但是单列索引长度最大还是不能超过3072bytes 联合索引的长度的限制 (不能超过3072bytes

    7.7K30

    详解 mysql int 类型的长度值问题

    秉着好奇心, 打开了 google ~ 引入大神的解答. mysql 在建表的时候 int 类型后的长度代表什么? 是该列允许存储值的最大宽度吗?...所以我在网上查阅了一些资料, 也仔细的看了 mysql 手册关于 int data type 的说法. 以下是每个整数类型的存储和范围 (来自 mysql 手册) ?...CREATE TABLE `test` ( `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY , `number` INT( 5 ) NOT NULL...mysql 我们看到现在我的 number 字段, 长度 (M)=5, 属性 =UNSIGNED ZEROFILL(无符号, 用 0 来填充位数), 设置这个属性后我往表时插入数据, 系统会自动把 number...mysql 手册上还有这么一句话 "当 mysql 为某些复杂的联结 (join) 生成临时表时,你可能会遇到问题,因为在这种情况下,mysql 信任地认为所有的值均适合原始的列宽度".

    5K20

    技术分享 | MySQL 索引长度限制的案例

    前两天同事提了一个问题,MySQL 5.7 中给某张表字段增加一个单键值索引,提示了如下错误, 一些背景信息: 表设置的字符集,utf8mb4 。 表的存储引擎,MyISAM 。...我们知道,MySQL 和 Oracle 在索引上最大的一个区别,就是索引存在长度的限制。如果是超长键值,可以支持创建前缀的索引,顾名思义,取这个字段的前多少个字符/字节作为索引的键值。...MySQL 官方手册索引的章节提到了,前缀索引长度限制是和引擎相关的,如果用的是 InnoDB ,前缀上限是 767 字节,当启用 innodb_large_prefix 时,上限可以达到 3072 字节...utf8mb4 是 MySQL 5.5.3 之后增加的编码,mb4 就是 most bytes 4 的意思,专门用来兼容四字节的 unicode ,utf8mb4 是 utf8 的超集。...我们可以测下 MyISAM ,utf8mb4 编码表 test1 ,250长度的字段 c1 ,251长度的字段c2 , CREATE TABLE test1 (c1 varchar(250), c2

    5.3K30

    解决MySQL自增id用尽的问题

    背景介绍我们项目中有一张article_click_record表,用户每次点进一篇文章,就会往该表中插入一条记录article_click_record表主要有如下三列:id:自增主键,INT类型user_id...解决方案首先,对于表的自增id即将溢出的问题,由于该表存在大量记录,因此不能直接将该表的id列改为BIGINT类型我们实际采用的解决id溢出的方式是:新增一张article_click_record_new...id溢出后,新表的数据也就预热完成了,此时只往新表中写入数据,并且在读表时,也可以直接读取新表了 新表的id列采用BIGINT类型的原因: 避免再次出现自增id用尽的问题由于业务需要,我们希望id是保持递增的...已经溢出(MySQL在自增id达到最大值后,下次再获取自增id时,还是会获取到最大值) // 因此,当出现DuplicateKeyException异常时,只需将oldTableIdOverflow...值,因此这里执行的SQL是: // INSERT INTO article_click_record_new(id, user_id, article_id) VALUES(#{id},

    3.2K10

    MySQL 自增ID的几个小问题

    ID最大的记录删除后,新插入的记录ID是什么 例如当前表中有ID为1,2,3三条记录,把3删除,新插入记录的ID从哪儿开始? 答案: 从4开始。...MySQL 重启后自增ID从哪儿开始 例如当前表中有ID为1,2,3三条记录,把3删除,重启MySQL,新插入记录的ID从哪儿开始? 很多人会认为从4开始,实际是从3开始。...重启MySQL。...手动插入ID后,下次插入时自增值是多少 例如当前的自增ID为4,新插入记录时,手动指定ID为10,下次使用自增方式插入时,ID是 11。...删除最大ID值对自增ID值没有影响,但MySQL重启之后有影响,不会使用之前的自增ID值,而是使用最大ID+1,因为自增ID值是存在内存中,重启后需要重新计算。 自增ID用完后就不变了。

    9.4K21

    MySQL 如何存储长度很长的数据字段

    最近,在工作中遇到了MySQL中如何存储长度较长的字段类型问题,于是花了一周多的时间抽空学习了一下,并且记录下来。...MySQL大致的逻辑存储结构在这篇文章中有介绍,做为基本概念:InnoDB 逻辑存储结构 注:文中所指的大数据指的是长度较长的数据字段,包括varchar/varbinay/text/blob。...注意最后的20个字节: 00 00 00 02:4字节,代表外部存储页所在的space id 00 00 00 04:4字节,代表第一个外部页的Page no 00 00 00 26:4字节,值为38,...00 00 00 02:页属于哪个表空间,此处指表空间的ID为2。 之后是4字节的00 00 3f ca,这里的值为16330,代表此BLOB页的有效数据的字节数。...将列放入外部存储页的标准 当一行中的数据不能在数据页中放下,需要申请外部存储页时,MySQL需要决定将哪一列的数据放到外部存储页,遵循的规则如下: 长度固定的字段不会被放到外部存储页(int、char(

    7.1K20
    领券