The contract includes full no-trade provisions for the 2020 season, and a limited no-trade clause from 2021 to 2023, according to Ken Rosenthal of The Athletic.
"This was all planned," White Sox president Ken Williams told Jeff Passan of ESPN at the owners meetings shortly after signing Grandal. "Going back five years ago when we started this and started thinking about this. We get ourselves in position with our young core and we could augment it with guys like this."
Grandal, 31, is coming off a one-year deal with the Milwaukee Brewers, which he signed after rejecting the one-year qualifying offer the Los Angeles Dodgers tendered to him. While playing catcher and first base, the switch-hitter hit .246/.380/.468 with 28 home runs over 153 games in 2019.
"Last year the market was kind of completely nonexistent," Grandal said, according to Daryl Van Schouwen of the Chicago Sun-Times. "This year it seemed like several teams were working hard within their limits. The team that stood out to me was the White Sox. They showed that they really wanted me."
The two-time All-Star joins a catcher corps in Chicago that includes James McCann, who broke out in 2019. The 29-year-old became an All-Star for the first time last year, hitting .273/.328/.460 over 118 games.
Grandal will likely split time between catching and first base, with Jose Abreu - who accepted his one-year, $17.8-million qualifying offer - playing first base and DH.
To make room on the roster, the White Sox designated outfielder Daniel Palka for assignment. The 28-year-old hit .107/.194/.179 with two homers in 30 games last year.
Prior to Grandal landing with the White Sox, the Cincinnati Reds and incumbent Brewers were reportedly interested in signing him.