Mysql 对varchar字段用int数值来查询的问题
发表于|更新于|数据库
最近遇到一个常见问题 :捕获币安永续合约委托单记录 ETH/USDT
OrderId 超过了19位 举例: 83897654934205xxxxx
存储第三方交易所委托ID 使用varchar(50)
但JSON接口解开数据得到OrderId 返回int类型 直接用于 查询及写错做, 造成数据中的脏数据,以及其他问题.
解决方案:
- 不信任任何外界参数及类型(逐类型处理 php 不是强项)
- 参数强行转换
- 底层mysql 数据处理应在读写前增加类型处理, 增加数据类型存储
目前仅将OrderId 字段强转
文章作者: Leon
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Leon!
相关推荐
2019-06-05
MySQL SQL 查询优化:使用 `USE`, `IGNORE`, `FORCE` 关键字
在 MySQL 中,优化查询性能是提高数据库应用效率的重要部分。USE, IGNORE, 和 FORCE 关键词可以在特定情况下增强查询的灵活性。以下是对这三个关键词的详细介绍及其使用场景。 1. USE 关键字1.1 概述USE 关键字用于指定查询所使用的数据库。如果您在一个 MySQL 服务器上有多个数据库,使用 USE 可以确保在正确的数据库上下文中执行查询。 1.2 示例USE my_database;SELECT * FROM my_table; 1.3 注意事项 确保在执行查询之前已选择正确的数据库,避免使用错误的表。 2. IGNORE 关键字2.1 概述IGNORE 关键字用于在执行某些操作时忽略错误。例如,在插入操作中,如果遇到重复键错误,使用 IGNORE 可以跳过该记录并继续执行。 2.2 示例INSERT IGNORE INTO my_table (id, name) VALUES (1, 'John'); 在这个示例中,如果 id 为 1 的记录已经存在,那么这条插入语句不会抛出错误,而是简单地忽略该操作。 2.3 使用场景...
2024-03-05
[收藏] 浅谈 Mysql 存储过程🔃 与 函数📊:
Mysql 存储过程🔃 与 函数📊:存储过程 和 存储函数说实话本人工作中不经常使用,康师傅也说 阿里开发准则 不建议使用存储过程/函数… 但这并不是咱不会的理由🙃 很久以前学习过,也听说了,存储过程是mysql5.0新增的 大致就像编程语言的 方法/函数一样, 将复杂的sql 逻辑封装在一起, 使用的时候调用一下即可. 应用程序无需关注内部的逻辑,只需要传入对应的参数, 就可以返回想要的结果. 要知道很多数据库 本身也是有很多方便的 函数(): IF() Count() ... 🆗 话不多说让我们开始学习吧!📚 存储过程🔃:概述:我们之前所学习的 MySQL 语句都是针对一个表或几个表的单条 SQL 语句,但是在数据库的实际操作中,经常会有需要多条 SQL 语句处理多个表才能完成的操作。 例如: 张三工资是否大于 所属部门的平均工资 先知道张三部门,计算平均工资,是否大于 存储过程是一组为了完成特定功能的 SQL 语句集合 减少网络传输量(客户端不需要把所有的 SQL 语句通过网络发给服务器) 减少了 SQL 语句暴露在 网上的风险,也...
2020-04-11
MySQL 中 IF()、IFNULL()、NULLIF()、ISNULL() 函数的使用
MySQL 中 IF()、IFNULL()、NULLIF()、ISNULL() 函数的使用MySQL 提供了一系列用于处理 NULL 值的函数,包括 IF()、IFNULL()、NULLIF() 和 ISNULL()。这些函数可以帮助开发者在处理数据时更加灵活地处理 NULL 值。本文将介绍这些函数的用法和示例。 1. IF() 函数IF() 函数用于根据条件返回不同的值。它的语法如下: IF(condition, value_if_true, value_if_false) 其中: condition 是要评估的条件。 value_if_true 是条件为真时返回的值。 value_if_false 是条件为假时返回的值。 例如,假设我们有一个表 students,其中包含学生的成绩,我们想要将成绩大于等于 60 的学生标记为 Pass,否则标记为 Fail: SELECT name, IF(score >= 60, 'Pass', 'Fail') AS resultFROM students; 2. IFNULL() ...
2018-12-30
[转载] 新手必看:一步到位之InnoDB
作/译者:叶金荣(imysql#imysql.com>),来源:http://imysql.com,欢迎转载。 前言:MySQL发展到今天,InnoDB引擎已经作为绝对的主力,除了像大数据量分析等比较特殊领域需求外,它适用于众多场景。然而,仍有不少开发者还在“执迷不悟”的使用MyISAM引擎,觉得对InnoDB无法把握好,还是MyISAM简单省事,还能支持快速COUNT(*)。本文是由于最近几天帮忙处理discuz论坛有感而发,希望能对广大开发者有帮助。 1. 快速认识InnoDBInnoDB是MySQL下使用最广泛的引擎,它是基于MySQL的高可扩展性和高性能存储引擎,从5.5版本开始,它已经成为了默认引擎。InnODB引擎支持众多特性: a) 支持ACID,简单地说就是支持事务完整性、一致性;b) 支持行锁,以及类似ORACLE的一致性读,多用户并发;c) 独有的聚集索引主键设计方式,可大幅提升并发读写性能;d) 支持外键;e) 支持崩溃数据自修复;InnoDB有这么多特性,比MyISAM来的优秀多了,还犹豫什么,果断的切换到InnoDB引擎吧 :) 2....
2020-01-14
解决 MySQL "Table doesn't exist" 错误
解决 MySQL “Table doesn’t exist” 错误在使用 MySQL 数据库时,有时会遇到 “Table doesn’t exist”(表不存在)的错误。这个错误通常是由于尝试访问不存在的表而引起的。本文将介绍可能导致这个错误的原因以及如何解决它。 原因分析出现 “Table doesn’t exist” 错误的原因可能有多种,包括但不限于: 表名拼写错误:可能是由于表名拼写错误导致的,例如大小写不匹配、多余的空格等。 表被删除或重命名:可能是由于表被意外删除或重命名,导致无法访问。 数据库选择问题:可能是因为没有选择正确的数据库,导致无法找到相应的表。 权限问题:可能是由于当前用户没有权限访问表,导致无法找到。 解决方法针对 “Table doesn’t exist” 错误,可以尝试以下解决方法: 检查表名拼写:确保表名的拼写与实际表名完全一致,包括大小写和空格。 检查数据库:确认当前选择的数据库是否正确,使用 USE 命令切换到正确的数据库。 查看表是否存在:使用 SHOW TABLES 命令查看当前数据库中是否存在相应的表。 恢复表:如果表被意外删...

2024-12-25
解决 MySQL 中的字符集冲突问题:Illegal mix of collations
在使用 MySQL 进行数据查询时,尤其是涉及到 JOIN 操作时,您可能会遇到以下错误信息: Illegal mix of collations (utf8mb4_0900_ai_ci,IMPLICIT) and (utf8mb4_unicode_ci,IMPLICIT) for operation '=' 这个错误通常表明在进行连接操作时,涉及的字段使用了不同的字符集或排序规则(collation),导致查询失败。本文将探讨这个问题的根源,并提供解决方案和示例。 问题背景在 MySQL 中,字符集(Character Set)和排序规则(Collation)用于定义如何存储和比较字符串数据。常见的字符集包括 utf8mb4,而排序规则则决定了字符串比较的规则,如 utf8mb4_unicode_ci 和 utf8mb4_0900_ai_ci。 当您在 JOIN 查询中使用不同字符集或排序规则的字段时,MySQL 将无法正确执行比较,进而导致上述错误。 示例场景假设我们有两个表 users 和 orders,它们的结构如下: CREATE TABLE ...
评论
公告
记录技术实践,分享学习与思考。



