A stunning 35-yard effort from Joey Barton guided Manchester City to victory in a match which only sparked to life in the second half.
Barton celebrates his match-winning goal with Sylvain Distin
City were 1-0 up through Richard Dunne's half-volley on 22 minutes.
But a goal-fest materialised after the interval which saw Darren Bent slot home an equaliser before Georgios Samaras headed City in front again.
Barton's super strike put the hosts 3-1 up before Marcus Bent's header on 66 minutes set up a nervous finale.
In a match billed as the battle of the England manager contenders it was Manchester City boss Stuart Pearce that won the bragging rights over Charlton counterpart Alan Curbishley.
City had started the match brightly and although the game lacked any real clear-cut chances they opened the scoring on 22 minutes.
Having seen his corner cleared, Barton received the ball on the left and whipped in a cross which was headed clear by Bryan Hughes.
The clearance, though, fell to Dunne who, on the edge of the area, showed good technique to shape his right foot over the ball and half-volley the ball home through a crowded penalty area.
The hosts continued to dictate proceedings in the first half, playing at their pace yet they failed to make their dominance count in the final third.
Kiki Musampa had his curling free-kick saved low at the far post by Myhre just after the half-hour mark while at the other end Marcus Bent had Charlton's only two efforts towards goal both of which were off target.
If the first-half was lacking in goalmouth action, the opening 10 minutes set the game alight with two goals in the space of three minutes.
First Darren Bent bagged his 13th goal of the season six minutes after the re-start when he calmly slotted in Talal El Karkouri's perfectly-weighted through ball to pull Charlton level.
But the hosts soon edged themselves back in front when Samaras made an instant impact by delivering a powerful header past Myhre from Barton's super cross.
Another Musampa free-kick was saved just before Barton's stunning drive which clipped the post on its way past Myhre - making it 3-1 on 62 minutes.
Charlton were not to let their heads drop and drew a second goal back when Marcus Bent headed past James from Radostin Kishishev's right-wing centre four minutes later.
Both sides had chances to increase their lead with Antoine Sibierski seeing his 77th-minute saved by Myhre.
But it was David James that pulled out a dramatic save late on to thwart El Karkouri's drive in the final seconds.
Man City boss Stuart Pearce:
"We think Trevor Sinclair has fractured his cheekbone. Before that he said he had a problem with his groin. "At 3-1 we killed the game off but we didn't stay tight enough to them."
Charlton boss Alan Curbishley:
"Had we won today it would have pushed us into the top half of the table. "It was disappointing, though we pulled it back to 1-1 and then conceded a goal three minutes later. "We're picking up points at home at the moment, but can't do it away and also can't keep a clean sheet either."
Man City: James, Richards, Dunne, Distin, Sommeil, Sinclair (Samaras 45), Barton, Musampa, Riera, Cole (Ireland 81), Vassell (Sibierski 68).
Subs Not Used: Weaver, Croft.
Goals: Dunne 22, Samaras 54, Barton 62.
Charlton: Myhre, Young, Hreidarsson, El Karkouri, Spector, Hughes (Bothroyd 74), Kishishev, Smertin (Euell 74), Thomas (Ambrose 74), Marcus Bent, Darren Bent.
Subs Not Used: Andersen, Powell.
Goals: Darren Bent 51, Marcus Bent 66.
Ref: M Dean (Wirral).