相关文章推荐
爱看书的小狗  ·  ulimit -c unlimited - ...·  6 月前    · 
谦虚好学的消防车  ·  错误::接收到致命警报:握手失败:javax ...·  1 年前    · 
星星上的毛豆  ·  在scala的split()方法中使用单引号 ...·  1 年前    · 
热情的花生  ·  动手学深度学习d2l报错问题及解决过程 - 知乎·  1 年前    · 
Code  ›  MySQL数据库中varchar类型的数字比较大小-天翼云
https://www.ctyun.cn/zhishi/p-209832
没读研的鸡蛋面
11 月前

活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
查看全部活动
热门活动
  • 2024云享优惠·数智升级 NEW 爆款2核4G3M云服务器82.8元/年起
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 一键部署Llama3大模型学习机 0代码一键部署,预装最新主流大模型Llama3与StableDiffusion
  • 中小企业上云场景组合购 NEW 建站、域名等场景一站式购齐,组合购9元起!
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 云主机特惠 HOT 多款云主机新老同享,满足您的上云需求!
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城 进入云市场
办公协同
  • WPS云文档 EMM手机管家 智能商业平台 SSL证书 新域名服务 翼电子教室 翼智慧显示一体化解决方案 税务风控云 翼云智眼安消一体化解决方案 翼信息化运维服务 翼微信营销解决方案 翼视频云归档解决方案 云管家2.0 智慧工厂_生产流程管理解决方案 全栈混合云敏捷版(软件) 全栈混合云敏捷版(一体机)

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云技术合作伙伴
  • 天翼云OpenAPI中心 天翼云EasyCoding平台
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云培训认证
  • 天翼云学堂 天翼云市场商学院
天翼云服务合作伙伴
  • 天翼云MSP合作伙伴 天翼云集成商交付能力认证
天翼云合作计划
  • 央企云合作计划
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴 天翼云甄选商城合作伙伴
天翼云东升计划
  • 东升适配创新中心 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
资源与工具
  • 天翼云OpenAPI EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂 天翼云认证

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • OpenAPI中心 客户支持计划 专家技术服务

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云 天翼云4.0 天翼云APP 全球基础设施 分析师和白皮书 天翼云·创新直播间 2024智算云生态大会 2023云生态大会 2022云生态大会 天翼云中国行 支持与服务 了解天翼云
  • 站点切换
    • 中国站
  • 文档
  • 控制中心
  • 备案
  • 管理中心

MySQL数据库中varchar类型的数字比较大小

首页 知识中心 数据库 文章详情页

MySQL数据库中varchar类型的数字比较大小

2023-05-22 06:01:27 阅读次数:104

mysql, 数据库

创建测试表

-- ----------------------------
-- Table structure for check_test
-- ----------------------------
DROP TABLE IF EXISTS `check_test`;
CREATE TABLE `check_test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `current_price` varchar(10) NOT NULL,
  `price` varchar(10) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of check_test
-- ----------------------------
INSERT INTO `check_test` VALUES ('1', '12', '14');
INSERT INTO `check_test` VALUES ('2', '22', '33');
INSERT INTO `check_test` VALUES ('3', '15', '8');
INSERT INTO `check_test` VALUES ('4', '9', '7');
INSERT INTO `check_test` VALUES ('5', '12', '12.9');

我们执行如下SQL:

-- 找出current_price比price小的记录
select * from check_test where current_price<price;
select * from check_test where (current_price+0)<(price+0);
-- 找出current_price比price大的记录
select * from check_test where current_price>price;
select * from check_test where (current_price+0)>(price+0);

结果如下:

我们可以看到在 结果1 中15>8不符合条件却查询到了,而 结果3 中15>8满足条件却并没有查询出来。

这是为什么呢?因为 字符串类型的数字比较大小是从第一位开始比较其在字符编码中对应的数值大小,相等则继续比较第二位,不相等就是数值大的为大 。其中数字字符对应的ASCII码值如下:

  • 如果current_price="12"、price="14",其中第1位字符"1"所对应的ASCII十进制数值都是49,二者相等,而第二位字符"2"的ASCII十进制数值是50,"4"的ASCII十进制数值是52,50<52,所以结果正确。
  • 如果current_price="15"、price="8",其中current_price中的第1位字符"1"所对应的ASCII十进制数值是49,而price中的第1位字符"8"所对应的ASCII十进制数值是56,49<56,所以能够查询出来,但却并不是我们期望的结果。
  • 我们可以通过代码来进行验证,这里用的是JavaScript语言:

    var current_price = "12";
    var price = "14";
    console.log(current_price < price);// true
    var current_price = "15";
    var price = "8";
    console.log(current_price < price);// true

    所以对于可能要比较大小的数字不应该设置为varchar类型,但如果已经设置为了varchar类型,那么如果要比较则将其转换成数值类型进行比较,在SQL中中对字段加0即可。

    而如果是编程语言则需要通过对应的函数进行转换,不能加0直接转换,如JavaScript:

    var current_price = "12";
    var price = "14";
    console.log(parseInt(current_price) < parseInt(price));// true
    var current_price = "15";
    var price = "8";
    console.log(parseInt(current_price) < parseInt(price));// false

    注意:字符所对应的十进制数值跟其编码有关系,但ASCII码都被兼容。

    版权声明:本文内容来自第三方投稿或授权转载,原文地址:https://blog.csdn.net/cnds123321/article/details/118890787,作者:二木成林,版权归原作者所有。本网站转在其作品的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如因作品内容、版权等问题需要同本网站联系,请发邮件至ctyunbbs@chinatelecom.cn沟通。

    上一篇: redis cluster官方集群的搭建笔记

    下一篇: MySQL默认数据库之mysql库

    相关文章

    2024-06-25 09:53:21

    实体类的字段和数据库中的字段不一致、并且没有做中间替换、会发生什么

    实体类的字段和数据库中的字段不一致、并且没有做中间替换、会发生什么后、

    2024-06-25 09:53:21
    2024-06-25 09:53:21

    同一台电脑安装两个不同版本的mysql。简单暴力有效

    同一台电脑安装两个不同版本的mysql。简单暴力有效

    2024-06-25 09:53:21
    mysql 2024-06-25 09:53:21

    Could not create connection to database server.Attempted reconnect 3 times. Giving up.

    在连接字符串后面加上​​?serverTimezone=UTC​​ 其中UTC是统一标准世界时间。

    2024-06-25 09:53:21
    2024-06-25 09:53:00

    DB-Engines 9月数据库排名:SnowFlake坐上了火箭

    ​DB-Engines 最近发布了 2021 年 9 月份的数据库排名。该网站根据数据库管理系统的受欢迎程度对其进行排名,实时统计了 378 种数据库的排名指数。

    2024-06-25 09:53:00
    mysql oracle 2024-06-25 09:53:00

    webapp前后端分离开发【MUI+Flask】

    前后端分离就是将一个应用拆成两个,前端应用和后端应用以 JSON 格式进行数据交互。

    2024-06-25 09:53:00
    2024-06-25 09:52:08

    初识IndexedDB【Nosql】上

    IndexedDB 就是浏览器提供的本地数据库,它可以被网页脚本创建和操作。IndexedDB 允许储存大量数据,提供查找接口,还能建立索引。

    2024-06-25 09:52:08
    2024-06-25 09:52:08

    leetcode刷题MySQL题解二十三

    leetcode刷题MySQL题解二十三

    2024-06-25 09:52:08
    leetcode mysql 2024-06-25 08:05:47

    nodejs.ER_NOT_SUPPORTED_AUTH_MODEError: ER_NOT_SUPPORTED_AUTH_MODE:

    nodejs.ER_NOT_SUPPORTED_AUTH_MODEError: ER_NOT_SUPPORTED_AUTH_MODE:

    2024-06-25 08:05:47
    mysql nodejs 2024-06-24 08:38:15

    peewee: OperationalError: (2006, ‘MySQL server has gone away’)

    MySQL默认长链接只能保持8小时,超过后就会自动断开。

    2024-06-24 08:38:15
    mysql 2024-06-24 08:38:15

    Python爬虫:网络信息爬取与处理知识梳理

    Python爬虫:网络信息爬取与处理知识梳理

    2024-06-24 08:38:15
    python redis
    查看更多
    推荐标签

    作者介绍

    天翼云小翼
    天翼云用户

    文章

    22409

    阅读量

    2151283

    查看更多

    最新文章

    同一台电脑安装两个不同版本的mysql。简单暴力有效

    2024-06-25 09:53:21

    实体类的字段和数据库中的字段不一致、并且没有做中间替换、会发生什么

    2024-06-25 09:53:21

    Could not create connection to database server.Attempted reconnect 3 times. Giving up.

    2024-06-25 09:53:21

    DB-Engines 9月数据库排名:SnowFlake坐上了火箭

    2024-06-25 09:53:00

    leetcode刷题MySQL题解二十三

    2024-06-25 09:52:08

    初识IndexedDB【Nosql】上

    2024-06-25 09:52:08

    查看更多

    热门文章

    Windows下使用批处理实现启动关闭mysql

    2023-04-24 11:27:05

    Docker容器mysql创建表报错:Table ‘mybatis_plus.USER‘ doesn‘t exist 问题解决

    2023-04-27 08:05:47

    cdh安装到scm-server的mysql报错处理

    2023-04-28 02:38:44

    Nacos数据持久化到MySQL

    2023-05-12 07:20:56

    python学习——使用MySQL

    2023-04-27 07:57:16

    MySQL的间隙锁

    2023-05-12 07:20:56

    查看更多

    热门标签

    mysql MySQL redis oracle python linux leetcode Oracle
    查看更多

    相关产品

    弹性云主机

    随时自助获取、弹性伸缩的云服务器资源

    天翼云电脑(公众版)

    便捷、安全、高效的云电脑服务

    对象存储

    高品质、低成本的云上存储服务

    云硬盘

    为云上计算资源提供持久性块存储

    查看更多

    随机文章

    mysql常用function

    MySql -基础学习2- 创建数据库表

    PureMySQL: 一个MySQL简单操作方式

    Citrix DDC重新定义连接SQL数据库脚本

    大话数据挖掘

    使用python生成大量数据写入es数据库并查询操作2

    • 7*24小时售后
    • 无忧退款
    • 免费备案
    • 专家服务
    售前咨询热线
    400-810-9889转1
    • 天翼云APP
      天翼云APP
     
    推荐文章
    爱看书的小狗  ·  ulimit -c unlimited - czcb - 博客园
    6 月前
    谦虚好学的消防车  ·  错误::接收到致命警报:握手失败:javax.net.ssl.SSLHandshakeException,使用Java REST客户端连接到elasticsearch时。
    1 年前
    星星上的毛豆  ·  在scala的split()方法中使用单引号和双引号有什么区别?-腾讯云开发者社区-腾讯云
    1 年前
    热情的花生  ·  动手学深度学习d2l报错问题及解决过程 - 知乎
    1 年前
    今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
    删除内容请联系邮箱 2879853325@qq.com
    Code - 代码工具平台
    © 2024 ~ 沪ICP备11025650号