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

mysql的long型

基础概念

MySQL中的LONG数据类型用于存储长整数值。它是一种整数类型,占用4个字节(32位)的存储空间。LONG类型的取值范围是-2,147,483,648到2,147,483,647(有符号),或者0到4,294,967,295(无符号)。

优势

  1. 存储空间:相对于BIGINT类型,LONG类型占用更少的存储空间,适用于不需要超大整数的场景。
  2. 性能:由于存储空间较小,LONG类型在某些情况下可能会有更好的性能表现。

类型

MySQL中的LONG类型主要有两种:

  1. TINYINT:占用1个字节,取值范围是-128到127(有符号),或者0到255(无符号)。
  2. SMALLINT:占用2个字节,取值范围是-32,768到32,767(有符号),或者0到65,535(无符号)。
  3. MEDIUMINT:占用3个字节,取值范围是-8,388,608到8,388,607(有符号),或者0到16,777,215(无符号)。
  4. INT:占用4个字节,取值范围是-2,147,483,648到2,147,483,647(有符号),或者0到4,294,967,295(无符号)。
  5. BIGINT:占用8个字节,取值范围是-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号),或者0到18,446,744,073,709,551,615(无符号)。

应用场景

LONG类型适用于需要存储较大整数值的场景,例如:

  1. 用户ID:在某些应用中,用户ID可能会超过INT类型的范围。
  2. 时间戳:虽然MySQL有专门的TIMESTAMPDATETIME类型,但在某些情况下,使用LONG类型存储时间戳可能更方便。
  3. 统计数据:例如网站访问量、销售额等。

常见问题及解决方法

问题1:为什么使用LONG类型存储时间戳?

原因:在某些情况下,使用LONG类型存储时间戳可以避免时区问题,并且可以方便地进行时间戳的计算和转换。

解决方法

代码语言:txt
复制
CREATE TABLE example (
    id INT AUTO_INCREMENT PRIMARY KEY,
    timestamp LONG
);

INSERT INTO example (timestamp) VALUES (UNIX_TIMESTAMP());

问题2:为什么LONG类型在某些情况下性能较差?

原因LONG类型虽然占用空间较小,但在处理大量数据时,可能会因为数据类型转换、索引效率等问题导致性能下降。

解决方法

  1. 优化查询:使用合适的索引,避免全表扫描。
  2. 数据分片:将大表拆分成多个小表,减少单表数据量。
  3. 使用更合适的数据类型:例如,如果时间戳不需要精确到毫秒,可以考虑使用INT类型。

参考链接

希望这些信息对你有所帮助!如果有更多问题,请随时提问。

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

相关·内容

JSON long 型 数字过长精度丢失解决

WebMvcConfig中重写方法extendMessageConverters ---- 由于在SpringMVC中, 将Controller方法返回值转换为json对象, 是通过jackson来实现的,...涉及到SpringMVC中的一个消息转换器MappingJackson2HttpMessageConverter, 所以我们要解决JSON long 型 数字过长精度丢失这个问题, 就需要对该消息转换器的功能进行拓展...具体实现步骤: 提供对象转换器JacksonObjectMapper,基于Jackson进行Java对象到json数据的转换(资料中已经提供,直接复制到项目中使用) 在WebMvcConfig配置类中扩展...Spring mvc的消息转换器,在此消息转换器中使用提供的对象转换器进行Java对象到json数据的转换 1、 引入JacksonObjectMapper import com.fasterxml.jackson.databind.DeserializationFeature...将long 型转换成String 字符串 .addSerializer(Long.class, ToStringSerializer.instance)

1.9K10
  • Long型原子操作之AtomicLong与LongAdder

    在JVM中long和double型变量都是占用8个字节空间存储的, 而在读写时,是以4字节为单位操作的; 也就是要写入一个long型数据, 需要分别写入高位和低位, 共2次完成....所以long和double是天生的线程不安全; 要在线程间共享long或者double变量, 必须放在锁内或synchronized代码块中执行, 或是将变量声明为volatile类型....LongAdder JDK8中, 为优化AtomicLong在高并发下的低效问题, 引入了一个新的Long型原子操作类LongAdder, 它比AtomicLong拥有更好的性能, 当然代价就是消耗更多的空间...Updated via CAS. */ transient volatile long base; Striped64: 是一个处理累加的高并发工具类. base: 是在没有线程竞争时, 数据的CAS...(), PROBE); } LongAdder与AtomicLong的比较 LongAdder和AtomicLong虽都能实现对long型数字的计数, 但他们还是有些区别的. 1.

    71410

    SpringBoot返回前端Long型丢失精度咋办

    最近为Prong开发了一个基于snowflake算法的Java分布式ID组件,将实体主键从原来的String类型的UUID修改成了Long型的分布式ID。..., 虽然双精度浮点型的范围看上去很大: 。...在我们这个场景里不需要进行运算,且Java进行JSON处理的时候是能够正确处理long型的,所以只需要将数字转化成字符串就可以了。...三、自定义ObjectMapper 可以单独根据类型进行设置,只对Long型数据进行处理,转换成字符串,而对其他类型的数字不做处理。Jackson提供了这种支持,即对ObjectMapper进行定制。...pagehelper分页组件,pagehelper的Page类返回的记录总数total为long型,如果转为string给前端就会有问题,因此,我们通过自定义的Serializer来排除这种例外。

    5.9K21

    如何在JavaScript中实现一个Long型——Long.js源码学习与分析

    而在JavaScript中的Number类型由于自身原因,并不能完全表示Long型的数字,因此需要我们通过其他的方式来对Long型值进行存储。...转换为Long型 我们目前只介绍一个通过字符串来讲数据从String型转换为Long型,其他的转换例如从Number转换为Long型是类似的,我们就不过多赘述了。...如果字符串为一个带"-"号的值,则转换为正值进行处理。 如果字符串为一个常规的Long型值,则先从最前面的8位开始处理,将其通过指定的进制转换为Long型的值。...循环上面的操作,直到剩余的字符串长度小于8为止,即可结束,得到转换之后的Long型。 转换为字符串 Long型转换为字符串的方式,与字符串转换为Long型的步骤差不多,差不多是一个相反的过程。...Long型相加 在知道了Long型的存储本质是使用高低各32位以后,Long型的运算其实就已经了解了。

    5K10

    MySQL 经典案例分析:Specified key was too long

    现在的时间是23:38,拖着疲惫的身躯,还是决定记录一下今天遇到的一个关于Mysql的”诡异”问题。...结果竟然出问题了,屏幕上出现: ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes 二、 苦逼的探索...对于报错信息“ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes”,其实意思就是“索引字段长度太长,超过了...mysql的varchar主键只支持不超过767个字节或者768/2=384个双字节 或者767/3=255个三字节的字段 而GBK是双字节的,UTF8是三字节的。...这时候,我很天真的以为可能是因为建表的时候没有指定字符集,所以在导入测试库的时候默认使用utf-8字符集,导致Specified key was too long。

    125.5K5532

    ——后端 Long 型 ID 精度丢失的“奇妙”修复之旅

    今天我们要聊的,就是一个让无数开发者哭笑不得的经典问题:后端 Long 类型 ID 过长导致前端精度丢失。...今天,我们不仅要用幽默的方式来剖析这个“世纪难题”,还要带你从根源上解决它,让你的代码不再“失精”。问题背景:为什么 Long 这么长?首先,我们得从 Long 类型说起。...直接转成字符串:简单粗暴却高效面对这种问题,我们最先想到的肯定是最简单粗暴的方法:直接把 Long 类型的数据转换成字符串不就好了嘛!...我们可以编写一个自定义的序列化器,根据需求灵活控制 Long 类型字段的序列化过程。...当然,使用全局配置的同时要注意,可能会影响到某些你不希望被转换的 Long 字段,因此需要谨慎考虑。

    4.1K00

    MySQL 浮点型的显示问题

    那么MySQL的浮点型在什么情况下表示成正常的实数(如0.18,2.345),什么情况下表示成科学计数法(如1.23e+12,2.45e-16)呢?...下面我们进行更精确的实验以及从源码角度来解释MySQL对于浮点数的显示问题。...验证 我们可以用gdb跟到代码里面寻找这块逻辑,但是MySQL单单server层的代码也有好几万行,盲目的跟代码并不能很快的找到我们要找的位置。...最后通过跟踪代码我们发现了在MySQL将结果返回客户端的过程中,在下面这个位置的buffer->set_real对要显示的内容进行了包装,并把包装的结果放到buffer这个变量里。...通过分析my_gcvt这个函数,我们可以得出MySQL对于浮点数展示的规则。

    4.2K40

    MySQL故障案例 | ERROR 1071 (42000): Specified key was too long

    MySQL 建表出现如下错误 (5.7) ERROR 1071 (42000): Specified key was too long; max key length is 3072 bytes查看官网内容得知...innodb_large_prefix is disabled, the index key prefix limit is 767 bytes for tables of any row format. https://dev.mysql.com.../doc/refman/5.7/en/innodb-limits.html默认情况下单个列的索引不能超过767位,我们可以启用 innodb_large_prefix=on 选项,将约束项扩展至 3072...,可以改为添加前缀索引的方式,如下# 单列alter table t1 add index idx_c1(c1(10)); # 多列alter table t1 add index idx_c1_c2(...c1(10),c2(10)); 注意,添加前缀索引的长度并不是越长越好,这里涉及到一个选择性问题,select count(distinct 列名)/count(*)as a, COUNT

    3.1K00

    mysql索引过长Specialed key was too long问题记录

    在创建要给表的时候遇到一个有意思的问题,提示Specified key was too long; max key length is 767 bytes,从描述上来看,是Key太长,超过了指定的 767...1000 * 4 > 767 所以再不修改其他配置的前提下,varchar的长度大小应该是 767 / 4 = 191 有兴趣的同学可以测试下,分别指定name大小为191, 192时,是不是前面的可以创建表成功...,后面的创建表失败,并提示错误Specified key was too long; max key length is 767 bytes 解决办法一 使用innodb引擎 启用innodb_large_prefix...我们知道InnoDB一个page的默认大小是16k。...MySQL 索引只支持767个字节,utf8mb4 每个字符占用4个字节,所以索引最大长度只能为191个字符,即varchar(191),若想要使用更大的字段,mysql需要设置成支持数据压缩,并且修改表属性

    1.1K00
    领券