At the risk of offending DrByte -- which is not my intention, and my apologies to him if he takes offense -- I want to remove the concerns voiced by some about the change from INT to VARCHAR in his query.
The executive summary is, using VARCHAR to store the Transaction ID is fine from both Authorize.net's view and ZenCart's view.
The larger discussion:
When Authorize.net processes a credit card transaction, it assigns a numeric Transaction ID to the item as a way to uniquely identify the transaction in its systems.
Because of the way databases work, it is convenient for Authorize.net to generate a Transaction ID that is numeric. That number serves as a unique key -- a value in the database that is only associated with that transaction, so any time they ask for that Transaction ID, they know they are getting information related only to that transaction.
However, ZenCart generates its own unique keys to identify your orders. It doesn't need to use the Authorize.net Transaction ID to identify your orders.
ZenCart just stores the Transaction ID as a courtesy to you, so that you can more easily identify which transactions relate to which orders when you work in the Authorize.net and ZenCart administration areas.
Because ZenCart is just storing the Transaction ID for you, and not working with it as a unique key, the format in which the Transaction ID is stored doesn't matter, from a programming standpoint.
I can't say why ZenCart decided to store these Transaction IDs as signed integers, except that because Authorize.net was generating Transaction IDs as a signed INT(10), they would store them as a signed INT(10).
DrByte's approach in converting the signed INT(10) to a VARCHAR(20) basically says, "Since ZenCart doesn't actually use the Transaction ID as a key; since ZenCart basically treats the transaction_id column as a string; since a VARCHAR(20) field can hold a plenty-big number that Authorize.net won't hit for a good, long time; and since using a VARCHAR field is going to help me overcome data-collision errors if, for example, Authorize.net sends a garbled or unexpected Transaction ID some day, why not use VARCHAR instead of INT?"
It's an eminently reasonable question and an entirely acceptable approach.
I have stuck with using a BIGINT rather than a VARCHAR because some day, there may be a need for ZenCart to work with that column as a numeric value; however, absent any indication of that being the case, DrByte's VARCHAR conversion is fine.