开发者社区 问答 正文

技术运维问题 - MYSQL使用 -RDS mysql decimal字段过大导致查询不准的解决办法


[font=微软雅黑, "]目前 RDS MySQL 出现 decimal 字段过大查询不准的情况,这是 MySQL 目前的bug,可以通过添加索引的方式来解决,参考以下SQL语句:
[font=微软雅黑, "]create table mlgtestdecimal(`campaign_id` decimal(24,0) NOT NULL, name VARCHAR(50))
[font=微软雅黑, "]insert into mlgtestdecimal(campaign_id,name) VALUES('2016000000000000000088','1111111111');
[font=微软雅黑, "]insert into mlgtestdecimal(campaign_id,name) VALUES('2016000000000000000520','1111111111');
[font=微软雅黑, "]SELECT  * from mlgtestdecimal where campaign_id='2016000000000000000088'and name='1111111111'
[font=微软雅黑, "]alter table mlgtestdecimal add index ind_decimal  (`campaign_id`);

展开
收起
梨好橙 2018-09-26 23:33:36 2190 分享 版权
阿里云 AI 助理回答

在您遇到的RDS MySQL中decimal字段过大导致查询结果不准确的问题时,这是由于MySQL数据库的一个已知BUG所引起。为了解决这一问题并优化查询性能,您可以按照以下步骤为decimal字段添加索引:

  1. 创建表结构: 首先,确保您的表结构包含一个decimal类型的字段以及需要的其他字段。例如:

    CREATE TABLE mlgtestdecimal(
       `campaign_id` decimal(24, 0) NOT NULL,
       name VARCHAR(50)
    );
    
  2. 插入数据: 接着,向表中插入数据。示例数据插入如下:

    INSERT INTO mlgtestdecimal(campaign_id, name)
    VALUES('2016000000000000000088', '1111111111'),
         ('2016000000000000000520', '1111111111');
    
  3. 执行查询: 然后,尝试进行查询以验证问题是否存在。例如,查询特定campaign_idname的数据:

    SELECT * FROM mlgtestdecimal 
    WHERE campaign_id='2016000000000000000088' AND name='1111111111';
    
  4. 添加索引: 最后,为decimal字段添加索引以提高查询效率和准确性:

    ALTER TABLE mlgtestdecimal ADD INDEX ind_decimal (`campaign_id`);
    

通过上述操作,特别是添加索引之后,可以有效解决因decimal字段值过大而导致的查询不准确问题。

注意:如果在为decimal字段添加索引时遇到“Specified key was too long; max key length is 767 bytes”错误,您可能需要调整InnoDB的相关参数或设置Row_format为DYNAMIC或COMPRESSED来支持更长的索引长度。这通常涉及到修改数据库实例的配置,如开启innodb_large_prefix(针对MySQL 5.7及更低版本)或调整表的Row_format(对于所有版本,尤其是MySQL 8.0及以上版本)。

请根据您的具体情况进行相应的配置调整,并在生产环境实施前,在测试环境中充分验证这些更改。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答