Miałem podobny problem i wypróbowałem wszystkie ustawienia, które mogłem znaleźć w Internecie - na próżno.
W moim przypadku problemem była sama konfiguracja FreeTDS. W systemie Linux plik to /etc/freetds/freetds.conf
Musiałem zmienić wersję na 7.0 (może inne numery też działają. Właśnie próbowałem 7.0)
[global]
# TDS protocol version
tds version = 7.0
Po tym, kierowca wydawał się akceptować zmiany zestawu znaków.
ini_set('mssql.charset', 'UTF-8');
Btw:zmiana obowiązuje od razu, nie ma potrzeby ponownego uruchamiania niczego później