IT人生

  • 首页
  • 归档
  • kafka
  • Java
  • Spring
  • Golang
  • SQL
  • Spark
  • ElasticSearch
  • 关于

  • 搜索
Phoenix HBase Kudu ElasticSearch Spring 数据结构 操作系统 Kettle Azkaban Sqoop Hive Yarn Redis Mybatis Impala Cloudera 大数据 HDFS mycat shell Linux 架构 并发 mysql sql golang java 工具 spark kafka 人生

关于Mysql查询varchar和bigint类型不匹配的问题

发表于 2018-11-15 | 分类于 数据库 | 0 | 阅读次数 1995

因为后台所有表ID都是按照雪花算法生成的18位数字,需要对接到Android,Ios和H5,此时H5会出现字符超长溢出,所以直接把ID改为varchar类型。

如我的一张表ID为varchar(18)类型,此时下面两种查询会有不同的结果,查询where条件中不带引号和带引号 mysql_type_unmatch_1

和 mysql_type_unmatch_2 可以看出来,第二行查询结果是正确的。原因是当类型不长一致的时候,Mysql会自动做以下转化:

一个为TIMESTAMP或者是DATETIME,另一个为常量,常量会转化为TIMESTAMP,再进行比较 一个为DECIMAL或者是整数,整数会转化为DECIMAL,再进行比较 一个为整数,另一个为字符串,会都转化为浮点型,再进行比较 即发生了第三种情况的转化,但是整数为准确值,浮点数为精度值,浮点型存储结构是1个符号位,8个指数位,23个尾数,所以当位数超过7位的时候就会不精确,此时查询会出现问题

  • 本文作者: Randy
  • 本文链接: http://www.itrensheng.com/archives/mysql_type_unmatch_error
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# Phoenix # HBase # Kudu # ElasticSearch # Spring # 数据结构 # 操作系统 # Kettle # Azkaban # Sqoop # Hive # Yarn # Redis # Mybatis # Impala # Cloudera # 大数据 # HDFS # mycat # shell # Linux # 架构 # 并发 # mysql # sql # golang # java # 工具 # spark # kafka # 人生
深入JVM(三)Class文件结构实例分析
基于canal+kafka+spark streaming+kudu的实时数仓搭建
  • 文章目录
  • 站点概览
Randy

Randy

技术可以暂时落后,但任何时候都要有上进的信念

80 日志
27 分类
31 标签
RSS
Github E-mail
Creative Commons
© 2021 备案号:沪ICP备19020689号-1
Randy的个人网站