gpt4 book ai didi

mysql - 即使在增加列长度后 MySQL 表上的算术溢出

转载 作者:行者123 更新时间:2023-11-30 22:15:43 25 4
gpt4 key购买 nike

我在 MS SQL Server 上有一个链接服务器,它打开一个具有以下定义的 MySQL 表:

CREATE TABLE `postilion_data_tst` (
`issuer` varchar(32) DEFAULT '',
**`post_tran_id` bigint(12) DEFAULT '0',**
`post_tran_cust_id` bigint(8) DEFAULT '0',
`settle_entity_id` int(4) DEFAULT '0',
`batch_nr` int(4) DEFAULT '0',
`settle_cash_req` double DEFAULT '0',
`settle_amount_rsp` double DEFAULT '0',
`settle_amount_req` double DEFAULT '0',
`sink_node_name` varchar(30) DEFAULT '',
`tran_postilion_originated` double DEFAULT '0',
`tran_completed` double DEFAULT '0',
`message_type` varchar(4) DEFAULT '',
`tran_type` varchar(2) DEFAULT '',
`tran_nr` bigint(8) DEFAULT '0',
`system_trace_audit_nr` varchar(6) DEFAULT '',
`rsp_code_req` varchar(2) DEFAULT '',
`rsp_code_rsp` varchar(2) DEFAULT '',
`sponsor_bank` varchar(8) DEFAULT '',
`retrieval_reference_nr` varchar(12) DEFAULT '',
`datetime_tran_gmt` datetime DEFAULT NULL,
`datetime_tran_local` datetime DEFAULT NULL,
`datetime_req` datetime DEFAULT NULL,
`datetime_rsp` datetime DEFAULT NULL,
`realtime_business_date` datetime DEFAULT NULL,
`recon_business_date` datetime DEFAULT NULL,
`from_account_type` varchar(2) DEFAULT '',
`to_account_type` varchar(2) DEFAULT '',
`from_account_id` varchar(28) DEFAULT '',
`to_account_id` varchar(28) DEFAULT '',
`tran_amount_req` double DEFAULT '0',
`tran_amount_rsp` double DEFAULT '0',
`settle_amount_impact` double DEFAULT '0',
`tran_cash_req` double DEFAULT '0',
`tran_cash_rsp` double DEFAULT '0',
`tran_currency_code` varchar(3) DEFAULT '',
`settle_cash_rsp` double DEFAULT '0',
`settle_currency_code` varchar(3) DEFAULT '',
`tran_reversed` varchar(1) DEFAULT '',
`prev_tran_approved` double DEFAULT '0',
`source_node_name` varchar(30) DEFAULT '',
`pan` varchar(19) DEFAULT '',
`card_seq_nr` varchar(3) DEFAULT '',
`expiry_date` varchar(4) DEFAULT '',
`terminal_id` varchar(8) DEFAULT '',
`terminal_owner` varchar(25) DEFAULT '',
`merchant_type` varchar(4) DEFAULT '',
`card_acceptor_name_loc` varchar(40) DEFAULT '',
`totals_group` varchar(12) DEFAULT '',
`card_product` varchar(20) DEFAULT '',
`region` varchar(3) DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1

我运行了下面的插入语句,它失败了

“消息 8115,级别 16,状态 2,第 2 行将表达式转换为数据类型 int 时出现算术溢出错误。该声明已终止。”

INSERT INTO postilion_data_tst (issuer,  
post_tran_id,
post_tran_cust_id,
settle_entity_id,
batch_nr,
settle_cash_req,
settle_amount_rsp,
settle_amount_req,
sink_node_name,
tran_postilion_originated,
.
.
.

SELECT
'Ecobank',
**2220920095,**
dbo.post_tran_tab.post_tran_cust_id,
dbo.post_tran_tab.settle_entity_id,
dbo.post_tran_tab.batch_nr,
dbo.post_tran_tab.settle_cash_req,
dbo.post_tran_tab.settle_amount_rsp,
...

当我仅按字符减少插入到有问题的列中的值时,脚本成功。 R请注意,我之前已将有问题的列的宽度从 8 增加到 12。

**上一个 - **post_tran_id bigint(8) 默认“0”,******当前 - **post_tran_id bigint(12) 默认“0”,****

INSERT INTO postilion_data_tst (issuer,  
post_tran_id,
post_tran_cust_id,
settle_entity_id,
batch_nr,
settle_cash_req,
settle_amount_rsp,
settle_amount_req,
sink_node_name,
tran_postilion_originated,
.
.
.

SELECT
'Ecobank',
**222092009,**
dbo.post_tran_tab.post_tran_cust_id,
dbo.post_tran_tab.settle_entity_id,
dbo.post_tran_tab.batch_nr,
dbo.post_tran_tab.settle_cash_req,
dbo.post_tran_tab.settle_amount_rsp,
...

可能是什么问题?我的想法是 BIGINT(12) 足以包含 10 个字符。

最佳答案

Bigint(8) 和 bigint(12) 是完全相同的数据类型。字段定义的长度部分不影响任何整数数据类型的下限和上限。只有在该字段设置了零填充属性时,长度参数才会生效。在这种情况下,如果一个值没有足够的数字,MySQL 将显示前导零。

关于 integer data types 的 MySQL 文档指示bigint字段的下限和上限:分别为-9223372036854775808和9223372036854775807。

您需要确定您的数据是否超出这些限制。

另请注意,错误消息提到转换为 int,而不是 bigint。示例中的数字适合 bigint,但不适合 int 字段。

添加

当您配置 myodbc 连接器时,您可能已经检查了 no bigint option将 bigint 转换为 int,这可以解释这种行为。

关于mysql - 即使在增加列长度后 MySQL 表上的算术溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38348739/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com