mysql存储数据,varchar类型中的数据变成了科学计数法?

2023-05-16

文章目录

    • 一、前言
      • 1、表现形式
      • 2、出现错误的sql
    • 二、问题排查
      • 1、数据表结构
      • 2、错误推测
      • 3、最终原因
    • 三、解决方案
      • 1、更改数据结构
        • (1)表结构
        • (2)分别更新两个字段为 科学计数法 :2.251799813685248e15
      • 2、按位或上一个值

一、前言

      这个问题也是比较奇怪的,明明设置的是varchar类型,但存储的结果却是科学计数法,这还了得,必须找一下原因了

1、表现形式

            [uuid] => 1460444056320623751784
            [log_time] => 2016-05-30 01:03:01
            [daily_nums] => 1.125899906842624e15

      就是这个daily_nums字段,十分的奇怪。

2、出现错误的sql

update test set daily_nums_nums =pow(2,x) where 1

      此处的pow函数是求幂次方的,博主这里是求2的n次方。,对了,mysql版本是5.7

二、问题排查

1、数据表结构

       $sql = "CREATE TEMPORARY TABLE if not exists test (
            uuid varchar(32) NOT NULL PRIMARY KEY,
            `log_time` datetime NOT NULL ,
            `daily_nums` VARCHAR(100) NOT NULL DEFAULT '0',
            UNIQUE KEY `uuid` (`uuid`),
            KEY (log_time)
        ) DEFAULT CHARSET utf8 COLLATE utf8_general_ci";

      这里给出的是varchar(100)类型,没道理存不下小小十几位的数据才对,怪哉怪哉

2、错误推测

明明是varchar结果,为什么反而成大数了了呢,推测是两个可能

(1)数据库读出来是科学计数法
(2)数据库里面存储的就是科学计数法

答案是第二种

3、最终原因

      此处应该是由于pow()这个函数的原因导致的,当2^50的时候,已经达到了15位,当51次方的时候,超过了15位,就记成了科学技术法

	2^ 50  = 562949953421312
	2^ 51 =  1.125899906842624e15

      猜测也是有内部的数据结构导致的,类似于浮点型的精度问题,但是没找到具体的答案,这里不再深究。

      参考php14位大数转化为科学计数法:php使用位运算来实现日留存的算法

三、解决方案

1、更改数据结构

更改字段为bigint即可,下面可以测试下,当插入科学计数法的时候,bigintvarchar的区别:

(1)表结构

		CREATE TABLE `temp_drr_test` (
  `uuid` varchar(32) NOT NULL,
  `daily_nums` bigint(20) NOT NULL DEFAULT '0',
  `weekly_nums` bigint(20) NOT NULL DEFAULT '0',
  `monthly_nums` bigint(20) NOT NULL DEFAULT '0',
  `test_nums` varchar(100) DEFAULT '',
  UNIQUE KEY `uuid` (`uuid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
daily_nums为bigint, test_nums为varchar

(2)分别更新两个字段为 科学计数法 :2.251799813685248e15

	mysql> select * from temp_drr_test;
+------+---------------------+---------------------+--------------+---------------------+
| uuid | daily_nums          | weekly_nums         | monthly_nums | test_nums           |
+------+---------------------+---------------------+--------------+---------------------+
| 1111 | 4611686018427387904 | 9223372036854775807 |            0 | 4611686018427387904 |
+------+---------------------+---------------------+--------------+---------------------+
1 row in set (0.00 sec)

mysql> update temp_drr_test set daily_nums=2.251799813685248e15;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from temp_drr_test;
+------+------------------+---------------------+--------------+---------------------+
| uuid | daily_nums       | weekly_nums         | monthly_nums | test_nums           |
+------+------------------+---------------------+--------------+---------------------+
| 1111 | 2251799813685248 | 9223372036854775807 |            0 | 4611686018427387904 |
+------+------------------+---------------------+--------------+---------------------+
1 row in set (0.00 sec)

mysql> update temp_drr_test set test_nums=2.251799813685248e15;
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0

mysql> select * from temp_drr_test;
+------+------------------+---------------------+--------------+----------------------+
| uuid | daily_nums       | weekly_nums         | monthly_nums | test_nums            |
+------+------------------+---------------------+--------------+----------------------+
| 1111 | 2251799813685248 | 9223372036854775807 |            0 | 2.251799813685248e15 |
+------+------------------+---------------------+--------------+----------------------+
1 row in set (0.00 sec)

      最终发现,当字段为bigint的时候,是可以自动调节为数字的。只不过bigint能存储的长度也有限,难保不会超过,所以用下一个方法

2、按位或上一个值

update test set daily_nums =pow(2,x) | 0 

      这里选择0,这样在保证值不变的情况下,也能正常存储了,经测试无误,可以存储为大数。

end

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql存储数据,varchar类型中的数据变成了科学计数法? 的相关文章

  • Android Studio获取SQLite数据并显示到ListView上

    我们在使用ListView的时候需要和数据进行绑定 xff0c 那么问题来了 xff0c 如何获取SQLite数据库中的数据并动态的显示到ListView当中呢 xff1f 其实过程很简单 xff1a 首先要获取SQLite数据 xff08
  • Windows7重新安装IIS显示 "出现错误,并非所有的功能被成功更改"

    最近重新安装IIS时突然显示 出现错误 xff0c 并非所有的功能被修改 起初以为是在删除IIS时勿把一些重要文件一并给删除了 xff0c 按照网上查到的资料都试了一遍也都没有成功 最后在查看系统正在运行的 服务 时发现原来是和IIS相关的
  • android调用百度地图实现地理围栏

    效果 xff1a 实现功能 xff1a 后台定位地图长按添加marker得到当前位置经纬度坐标创建地理围栏 xff08 以marker所在位置为中心 xff0c 半径默认设置为100米 xff09 通过BroadcastReceiver监听
  • 如何使用 Postman 登录后,自动填充 token

    简介 Postman版本 xff1a v9 5 0 原理 xff1a Postman 支持配置变量 xff0c 将登录 Token 配置为变量 xff0c 每次登陆后更新该变量值 xff0c 就可以实现自动填充 Token 登陆后更新变量值
  • java中接口的使用(默认方法和静态方法)

    由于最近在学习接口这一部分 xff0c 就想着记下来 xff0c 以便以后的复习 如果那里有写的不对的请指正 xff01 1什么是接口 xff08 接口概述 xff09 既然要用接口首先要明确什么是接口 xff0c 它能帮助我们实现什么哪些
  • java方法重载与返回值类型无关

    方法的重载是指方法的名称相同而参数列表不同的方法 这里的参数列表不同主要包括 xff1a 参数的类型不同参数的个数不同 个数不同一定构成重载 具有多个且类型不同的参数 xff0c 其顺序不同构成重载 第三种情况是最容易被忽视的 比如 这里的
  • mysql显示cannot connect to mysql server on localhost(10061)

    今天打开mysql突然提示 xff0c 无法连接 xff0c 重启了几次也不能解决问题 之前使用都是好好的 xff0c 什么也没有动今天突然就打不开了 之前有过一次重装mysql的经历 xff0c 繁琐的步骤然我果断放弃了重装这条路 在我仔
  • 让人混淆的Person p=new Person();和Person p=null;

    一 对 Person p 61 new Person 的理解 要理解这个问题 xff0c 首先要知道整个过程中内存中发生了什么 xff01 我们知道 xff0c 内存中我们最常用的就是三个 xff1a 栈 堆 方法区 其中对于基本值类型和引
  • mybatis中显示Type interface com.javacto.dao.UserMapper is not known to the MapperRegistry.

    一 报错 二 问题描述 在使用mapper代理的方式实现开发的时候 xff0c 要注意这个问题 xff1a 这个说明是资源文件中的配置出现了问题 sqlMapConfig xml文件中的中的配置出现了问题 就是说在mybatis的全局配置文
  • Idea中通过逆向工程的方式创建p

    文章目录 一 最终的效果二 为什么要使用逆向工程三 如何在工程中使用逆向工程1 前期准备2 创建generatorConfig xml文件3 运行逆向工程 xff0c 生成相关文件 一 最终的效果 上图中dao层 pojo层以及mapper
  • 解决Python调用dll错误:Could not find module ‘xxx‘ (or one of its dependencies). Try using the full path...

    该问题有两种情况 xff1a python的dll保护机制造成确实是调用的dll依赖缺失造成的 情况1 对于第一种情况 xff0c 参考 xff1a python dll加载 情况2 对于dll丢失 xff0c 只需要找到该dll的依赖的其
  • Docker 更改MTU大小

    docker 更改MTU大小 更改docker host的MTULinux环境Windows或者MacOS 更改自定义网络MTU清除旧网络建立新网络 更改docker host的MTU 为了优化网络传输能力 xff0c 有时候我们需要更改M
  • 如何释放dataframe使用的内存

    如何释放熊猫数据框使用的内存 xff1f 我在熊猫中打开了一个非常大的csv文件 xff0c 如下所示 import pandas df 61 pandas read csv 39 large txt file txt 39 完成此操作后
  • Vmware vSphere client手动更改mac地址

    公司有集群搭建 xff0c 需要添加license xff0c 需要修改虚拟机MAC地址 xff0c 但是直接修改后启动虚拟机报错 xff0c 还需要配置mac取消检查 第一步 xff1a 在虚拟机关机状态下 xff0c 选择 编辑虚拟机设
  • 跳转微信小程序和支付宝小程序

    跳转微信小程序和支付宝小程序 1 微信小程序 参考链接 获取微信小程序 URL Scheme 1 1 获取小程序连接 这里需要获取长期有效的 Scheme xff0c 方式如下 xff1a 联系小程序开发者其他渠道 示例 小程序 Schem
  • 字符串、列表、元组 索引和切片(1)

    字符串下标索引和切片 str 61 39 abcdefg 39 print str 0 打印结果a print str 0 2 打印结果ab print str 2 打印结果cdefg print str 1 打印结果g print str
  • (网易2018校招笔试)[编程题] 字符串碎片

    一个由小写字母组成的字符串可以看成一些同一字母的最大碎片组成的 例如 aaabbaaac 是由下面碎片组成的 aaa bb c 牛牛现在给定一个字符串 请你帮助计算这个字符串的所有碎片的平均长度是多少 输入描述 输入包括一个字符串s 字符串
  • 将pip或pip3更换至国内镜像源,解决下载速度缓慢的问题

    执行 pip3 config set global index url https pypi tuna tsinghua edu cn simple 清华大学的镜像源 再次pip3下载结果如下 xff1a xff08 速度真的很快呀 xff
  • android使用串口

    本篇分为新建串口项目与在原有项目添加串口功能 基于android studio 4 1 2 串口文档基于google官方文件 文件下载 需要配置CMAKE 1 新建串口项目 新建c 43 43 项目 复制串口的文件到cpp文件夹 3 复制j
  • 学校网络(有向图的强连通分量)

    题目描述 一些学校连接在一个计算机网络上 xff0c 学校之间存在软件支援协议 xff0c 每个学校都有它应支援的学校名单 xff08 学校A支援学校B xff0c 并不表示学校B一定要支援学校A xff09 当某校获得一个新软件时 xff

随机推荐

  • uwsgi+nginx结构下的nginx日志异常

    我的小项目是django 43 uwsgi 43 nginx这样的结构 xff0c nginx的配置如下 xff1a upstream myapp span class hljs built in span test span class
  • 定时器T0赋初值的计算方式

    定时中断初值计算方法是 xff1a 1 确定定时时间化为微妙t 2 晶振频率以MHZ为单位f 3 计算初值 xff1a s 61 65536 tf 12 比如16MHZ晶振 xff0c 定时1毫秒 t 61 11000 61 1000us
  • Ubuntu 17.04更改鼠标移动速度

    升级ubuntu 17 04后发现下面命令不能用来更改鼠标移动速度了 xinput span class hljs subst span span class hljs built in set span span class hljs a
  • 使用 Flask 快速构建 基于langchain 和 chatGPT的 PDF摘要总结

    简介 这里不对 langchain 和 chatGPT 进行介绍 xff0c 仅对实现过程进行整理 环境 Python gt 61 3 8 Flask2 2 3 Jinja23 1 2 langchain0 0 143 openai0 27
  • 汇编语言实现两个任意大的数相加

    实现了输入 xff0c 相加 xff0c 输出功能 xff0c 可在此基础上做出自己的修改 xff0c 代码如下 xff1a DATA SEGMENT MSG1 DB 34 Please Input The First Number 34
  • 十六进制ASCII码表

    xff21 xff33 xff23 xff29 xff29 与 xff11 xff16 进制转换 ASCII 16 进制 ASCII 16 进制 ASCII 16 进制 ASCII 16 进制 NUL 00H DLE 10H SP 20H
  • 以太网数据包TCP、IP、ICMP、UDP、…

    以太网首部 目地MAC地址 xff08 8字节 xff09 源MAC地址 xff08 8字节 xff09 类型 xff08 2字节 xff09 1 IP头的结构 版本 xff08 4位 xff09 头长度 xff08 4位 xff09 服务
  • JPanel无法显示问题

    有两个Panel Panel1 Panel2 Panel1用BorderLayout布局 xff0c Panel2布局为null 也就是自定义布局 xff0c 然后将Panel2 add到Panel1的North区 xff0c 运行时问题就
  • 要求一个语句从study,DICT 表中取出如表三所列格式数据

    问题描述 xff1a 要求一个语句从study xff0c DICT 表中取出如表三所列格式数据 study表 DICT表 表三 答案 xff1a SQL xff1a SELECT Deptname MAX CASE WHEN Mon 61
  • hibernate操作数据库相关注意点

    一 建数据表时 xff0c 若有字段设置了NOTNULL并设置了默认值 xff0c 如果在程序中相应对象中的字段没有赋值 xff0c 是null xff0c 在程序执行插入 xff0c 更新的操作的时候 xff0c 会抛出不能插入的异常 x
  • 欢迎订阅

  • 两个ArrayList做差集效率问题

    工作中需要将表中重复数据只留一条 xff0c 其余删掉 xff0c 第一想法就是用SQL去执行 xff0c 但是由于数据有几十万条 xff0c SQL的效率十分低下 xff0c 于是写个程序去执行 xff0c 也方便看到执行的进度 xff0
  • Python爬取前程无忧职位信息(正则暴力匹配)

    文章目录 写在前面demo主体用到的包初始化变量抓取页数清洗工资数据循环爬取信息保存信息控制函数入口函数 数据可视化存在不足参考文献 写在前面 最近在学习爬虫和数据分析 xff0c 在CSDN看到TRHX 鲍勃的文章 xff0c 受益匪浅
  • 无需部署,python 控制台对话ChatGPT

    简介 很多时候同事想自己使用 Openai 的接口调用完成一些基础操作 但是 xff0c 他们又不能很了解项目如何部署启动 xff0c 所以临时写了一个控制台调用的程序 运行效果 代码 span class token triple quo
  • PC微信逆向--定位sqlite3_exec和数据库句柄

    写在前面 最近在做PC端微信逆向 xff0c 搞定了基本的收发消息 xff0c 通讯录获取等 xff0c 这期间遇到一个小小的问题 xff0c 从通讯录获取到的内容不全 xff0c 除非登录后手动点击过某个好友 xff0c 不然获取不到头像
  • PC微信逆向--调用sqlite3_exec执行SQL

    文章目录 写在前面回顾sqlite3 exec回调函数函数指针编写代码注入的DLL注入程序 输出结果写在后面 写在前面 上一篇文章 xff0c 实现了定位保存微信数据库句柄的容器和微信内部的sqlite3 exec函数地址 xff0c 这一
  • PC微信逆向--定位备份sqlite数据库相关函数

    文章目录 写在前面备份函数编写测试程序配置环境编译 OD调试结果OD地址IDA地址 写在后面 写在前面 上一篇文章 xff0c 介绍了如何使用找到的数据库句柄和sqlite3 exec函数执行SQL xff0c 本篇文章 xff0c 来尝试
  • Windows微信文本压缩算法分析

    文章目录 免责声明写在前面分析过程HEX数据原文 规律总结写在后面2022 12 31补充 免责声明 文章仅供交流学习使用 xff0c 请勿用于非法用途和商业用途 xff0c 如因此产生任何法律纠纷 xff0c 均与作者无关 如您选择继续阅
  • 解析某音X-Bogus参数

    文章目录 写在前面目标正向梳理主要加密函数主要算法解析 逆向梳理结论测试进阶写在后面 写在前面 本文主要介绍从X Bogus还原19位数组的过程 xff0c 方便理解算法 目标 span class token comment 从 span
  • mysql存储数据,varchar类型中的数据变成了科学计数法?

    文章目录 一 前言1 表现形式2 出现错误的sql 二 问题排查1 数据表结构2 错误推测3 最终原因 三 解决方案1 更改数据结构 xff08 1 xff09 表结构 xff08 2 xff09 分别更新两个字段为 科学计数法 xff1a