Arduino Mega2560 pin mapping wrong?

The description of arduino offical document says the Interruption 0 is digital pin 2. But in the pin mapping of mega2560 the Interruption 0 is digital pin 21.
I run a test. The truth is Interruption 0 is digital pin 2.
So, the offical pin mapping of mega2560 is totally wrong. Is that true?

“The description of arduino offical document says the Interruption 0 is digital pin 2.”

Where are you seeing that? I see INT0 on this page and on the Schematic,
https://www.arduino.cc/en/Hacking/PinMapping2560
Physical Pin - Function - Digital pin name
43
PD0 ( SCL/INT0 )
Digital pin 21 (SCL)

while Physical pin 2 is Digital 0/RX0

INT0 is on digital pin 2 only on the Arduino Uno and other '328p based boards. It is on a different pin on boards based on a different microcontroller - be sure to reference the correct pin mapping for the board you're using. Google image search for "Arduino Mega Pinout" (substitute whatever board or atmel part you want for "mega" ) - there are some beautiful pinout diagrams out there.

The description of arduino offical document says the Interruption 0 is digital pin 2. But in the pin mapping of mega2560 the Interruption 0 is digital pin 21.
I run a test. The truth is Interruption 0 is digital pin 2.
So, the offical pin mapping of mega2560 is totally wrong. Is that true?

There is a difference between the Arduino IDE abstractions used with “attachInterrupt” pin assignments and the underlying “real” ATmega AVR code for the pin assignments which you would use with INTX_vect and EIMSK to enable an extenal interrupt.

PIN# Arduino “Attach Interrupt” AVR
2 0 INT4
3 1 INT5
21 2 INT0
20 3 INT1
19 4 INT2
18 5 INT3

This is a reason to use the syntax

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);

cattledog:
There is a difference between the Arduino IDE abstractions used with "attachInterrupt" pin assignments and the underlying "real" ATmega AVR code for the pin assignments which you would use with INTX_vect and EIMSK to enable an extenal interrupt.

PIN# Arduino "Attach Interrupt" AVR
2 0 INT4
3 1 INT5
21 2 INT0
20 3 INT1
19 4 INT2
18 5 INT3

This is a reason to use the syntax

attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);

OK. Got it. Thanks.
And I refer to some guys sketchs. They used PA0, instead of Digital Pin 22.
So, I would like to know if the PA0 - PA7 is Digital Pin 22 - 29 in Arduino IDE?

Don't know, I've not tried that syntax.
Give it a whirl, tell us what you find.

Pins PA0~PA7 are arranged consecutively on the Mega’s pin mapping, and are digital pins 22 through 29.

I didn’t know that the Arduino IDE would allow you to use the “PXN” notation where X is the port and N is the bit number to reference pins - I didn’t think those constants were defined, but if it compiles using those, they must be defined; they may even be defined the way you think they are.

That notation is ubiquitous for referring to pins in normal AVR programming (as in, without using the IDE) because then you have no pin numbers - just port registers with 8 bits each, so you want to set the output state of PA3, you have to do PORTA|=(1<<3) or PORTA&=~(1<<3) - and if you have interrupts touching those registers, you also need to turn off interrupts to prevent an interrupt from changing the value of the register between when you read it to |= it and when you store the value to the register and restore the status register afterwards. digitalWrite() and the other pin-manipulation functions do all that for you, so you usually don’t need to know which pin is on which port.