In Saturday's other quarterfinal, Portgual beat six-time champion Argentina 5-4 in a penalty shootout following a 0-0 stalemate through 90 minutes of regulation and 30 minutes of extra time.
Mexico's Edson Rivera broke made it 2-1 in the 69th minute with a header and struck again in the 88th.
"There was a lot of celebrating when I went into the dressing room after the match," Mexico coach Juan Carlos Chavez said. "When I came in I turned off the music. Fortunately, we are in the semifinals but we are not champions. That is when it will be time to celebrate."
The loss was a heartbreaker for the capacity crowd of 42,000 in Bogota, where Colombia won its first four games. Bogota's altitude of 8,600 feet might have bothered other opponents, but many Mexican players live at altitude in mountain valleys, such as Mexico City which is 7,400 feet.
"I feel a little sorry for the home fans," Chavez said. "But we worked hard against a good team and managed to win. Maybe there were 40,000 people here cheering for Colombia, but we have 120 million Mexicans supporting us at a distance."
Mexico beat Colombia 2-1 in a warmup tournament before the event.
Mexico took a 1-0 lead when Erick Torres converted a penalty in the 38th. The spot kick came after Diego Reyes was pushed and fell in the area with Turkish referee Cuneyt Cakir calling the penalty, which was not disputed by the Colombians.
Colombia tied it in the 60th, taking advantage of a mistake by Mexico keeper Jose Rodriguez. Duvan Zapata let loose with a long-range shot that bounced once and passed between the legs of Rodriguez as he was dropping to his knees.
It was more bad news for Argentina.
Argentina's senior team was knocked in the quarterfinals of the continental championship, the Copa America, in July at home in Argentina. That led to the firing of coach Sergio Batista.
Argentina's Under-20 coach Walter Perazzo acknowledged during the tournament that his team needed to reach the semifinals for him to keep his job.
After a 0-0 draw for 120 minutes, Portugal won the shootout 5-4 when goalkeeper Mika stopped the last attempt from Nicolas Tagliafico.
Portugal, which has not allowed a goal in five matches at the tournament, will face the winner of Sunday's quarterfinal between France and Nigeria. Portugal is going for its third U-20 title following triumphs in 1989 and 1991.
"The victories are all different, but this has been the most satisfying," Portugal coach Ilidio Vale said.
Argentina led the shootout 3-1 and needed only to convert one of its next two chances. Leandro Gonzalez Pirez drove his attempt into the crossbar and Alan Ruiz was stopped by Mika with a diving save to his left.
As the Argentines missed, Portugal converted its next two to make it 3-3.
Portugal's Tiago Ferreira made it 4-3 and Argentina leveled at 4-4 when Agustin Vuletich converted. Portugal's Sergio Oliveira then made it 5-4, setting the stage for Mika to bat away Tagliafico's attempt.
"It was a very close game — a lot of work and not many chances," Argentina coach Walter Perazzo said. "At the end, they had the luck."