开发者社区 > 数据库 > 数据仓库 > 正文

有个大坑,ADB中mysql数据表同步到adb后,bigint被转为decimal,这个怎么搞呢?

有个大坑,ADB中mysql数据表同步到adb后,bigint被转为decimal,这个怎么搞呢?雪花ID都变了

展开
收起
真的很搞笑 2023-05-17 15:04:35 42552 1
9 条回答
写回答
取消 提交回答
  • 在数据表同步到 ADB 之前,可以先将 bigint 类型的字段转换为字符串类型,然后再同步数据表,这样可以避免数据类型转换带来的问题。

    2023-05-31 16:38:42
    赞同 展开评论 打赏
  • 云端行者觅知音, 技术前沿我独行。 前言探索无边界, 阿里风光引我情。

    在 ADB 中,MySQL 数据表同步时,如果源表使用了 Bigint 类型,但在目标表中使用了 Decimal 类型,那么 ADB 会尝试自动将源表的 Bigint 数据转换为目标表的 Decimal 数据。然而,这个过程并不是总是成功的,因为 ADB 只是尝试转换数据,而不是绝对保证转换结果的正确性。

    如果你发现同步后的数据表出现了错误,例如雪花 ID 发生了变化,那么很可能是因为源表的 Bigint 类型被错误地转换为 Decimal 类型,导致数据不匹配。

    要解决这个问题,你可以使用 ADB 的“-p”选项来指定目标表的列类型,而不是使用默认的 Decimal 类型。

    2023-05-29 23:06:58
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    你好,ADB不支持直接使用bigint类型,而是将其转换为decimal类型进行存储。

    你需要在数据同步过程中进行类型映射将bigint类型映射为ADB支持的合适类型,如int64。

    2023-05-27 17:41:28
    赞同 展开评论 打赏
  • 这个问题的原因是 ADB 中使用的 MySQL 数据库的 BigInt 数据类型在同步到 ADB 后被转换为 Decimal 数据类型,导致雪花 ID 发生了变化。

    解决这个问题的方法是修改 ADB 中使用的 MySQL 数据库,将 BigInt 数据类型替换为 Decimal 数据类型。具体步骤如下:

    在 ADB 中创建一个新的 Decimal 数据类型的列,用于存储 BigInt 数据。 使用 MySQL 的命令行工具或者其他工具,将 ADB 中的数据表中的 BigInt 数据类型替换为 Decimal 数据类型。 在 ADB 中使用新的 Decimal 数据类型的列来存储 BigInt 数据。 同步数据时,将 BigInt 数据类型替换为 Decimal 数据类型,以避免雪花 ID 发生变化。 需要注意的是,修改数据表结构可能会对应用程序产生影响,因此在进行修改之前应该备份数据,并确保修改不会对应用程序产生不良影响。

    2023-05-24 08:47:28
    赞同 展开评论 打赏
  • 在 ADB 中,bigint 类型的数据会被转换为 decimal 类型,因为 ADB 的存储引擎和 MySQL 不同。如果您在 MySQL 中使用了 bigint 类型,并且在 ADB 中需要使用相同的数据类型,在数据表同步到 ADB 之前,可以先将 bigint 类型的字段转换为字符串类型,然后再同步数据表,这样可以避免数据类型转换带来的问题。

    如果您已经同步了含有 bigint 类型的数据表到 ADB 中,并且需要将 decimal 类型的数据转换回 bigint 类型,可以通过以下方式实现:

    1. 创建一个新的数据表,其中包含 bigint 类型的字段。

    2. 将原始数据表中的 decimal 类型的数据转换为 bigint 类型的数据,可以使用 CAST 函数实现。

    3. 将转换后的数据插入到新的数据表中。

    4. 如果需要保留原始数据表中的数据,可以将新的数据表重命名为原始数据表的名称。

    此外,如果您在 MySQL 中使用了雪花 ID,ADB 中也可以使用雪花 ID,但是需要使用 ADB 提供的相关函数来生成雪花 ID。如果在 ADB 中使用不同的函数生成雪花 ID,可能会导致生成的 ID 不同。

    2023-05-23 11:33:34
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    在阿里云云原生数据仓库 AnalyticDB 中,当 MySQL 数据表同步到 AnalyticDB 后,bigint 类型的数据可能会被转换为 decimal 类型。这是因为 AnalyticDB 中 bigint 类型的数据长度不能超过 18 个字符,而 MySQL 中 bigint 类型的数据长度最大可以达到 20 个字符。因此,在数据同步过程中,如果 MySQL 中的 bigint 类型的数据长度超过 18 个字符,就会被转换为 decimal 类型。

    如果您在使用 AnalyticDB 进行数据同步时遇到了这个问题,可以尝试以下方法进行解决:

    1. 在 MySQL 中将 bigint 类型的数据转换为字符串类型,然后再进行数据同步。这样可以避免数据被转换为 decimal 类型。

    2. 在 AnalyticDB 中使用 CAST 函数将 decimal 类型的数据转换为 bigint 类型。例如:

      SELECT CAST(column_name AS UNSIGNED) FROM table_name;
      

      这样可以将 decimal 类型的数据转换为 bigint 类型,避免雪花 ID 变化。

    需要注意的是,AnalyticDB 和 MySQL 是两种不同的数据库系统,虽然可以进行数据同步,但是在数据类型、数据长度等方面可能存在差异。因此,在进行数据同步时,需要仔细检查数据类型和数据长度是否一致,以避免出现不必要的问题。

    2023-05-20 07:59:35
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    由于ADB和MySQL是两个不同的数据库,它们的数据类型转换规则可能不同,因此在同步数据的时候需要注意类型的一致性。

    针对bigint被转为decimal的问题,有以下几个可能的原因及解决方案:

    ADB中的数据表定义了该列为DECIMAL类型:在创建数据表的时候,注意将该列定义为BIGINT类型。

    ADB中使用两者不兼容的字符集:确保ADB中使用的字符集和MySQL中使用的字符集相同。

    数据在同步过程中被修改:可以考虑重新同步数据,或者进行数据恢复操作。

    数据库中存在空行或NULL值:尝试将所有值设置为非NULL并重新同步数据。

    ADB和MySQL版本的兼容性问题:确保ADB和MySQL版本匹配。

    此外,雪花ID变化的原因可能是因为在同步数据的过程中,数据库重新生成了ID。可以尝试将雪花ID作为主键并重试同步操作。

    如果以上方案都无法解决问题,可以尝试寻求数据库专家的帮助。

    2023-05-19 19:02:56
    赞同 展开评论 打赏
  • CSDN全栈领域优质创作者,万粉博主;InfoQ签约博主;华为云享专家;华为Iot专家;亚马逊人工智能自动驾驶(大众组)吉尼斯世界纪录获得者

    在ADB中,MySQL数据表同步到ADB后,bigint类型会被转换为decimal类型。这是因为在MySQL中,bigint类型表示8字节的有符号整数,而decimal类型表示任意精度的浮点数。当将bigint类型的数据导入到ADB时,由于ADB中的decimal类型可以存储更大的整数范围,因此会自动将bigint类型转换为decimal类型。

    如果您需要保持bigint类型的原始数据类型,可以考虑在源数据库中对bigint类型进行映射或转换,或者在目标数据库中创建新的bigint类型列来存储原始数据。另外,您也可以在ADB中使用SQL语句进行数据类型转换,例如:

    
    ALTER TABLE table_name MODIFY column_name decimal(10);
    
    
    

    这将会将column_name列的数据类型转换为decimal(10),即保留10位有效数字的浮点数类型。

    2023-05-17 15:11:42
    赞同 展开评论 打赏
  • 用DTS同步好一些,此回答整理自钉群“云数据仓库ADB-开发者群”

    2023-05-17 15:11:09
    赞同 展开评论 打赏
滑动查看更多

相关产品

  • 云原生数据仓库 AnalyticDB PostgreSQL版
  • 相关电子书

    更多
    消电行业数据中台解决方案白皮书 立即下载
    (终极版)2020阿里云金融数据中台报告 立即下载
    2020年中国乳制品行业数据中台研究报告 立即下载

    相关镜像