Идеальный вариант установки котировки - это установка на сервере в настройках mysqld, подходит если вы полностью контролируете инфраструктуру, т.е. можете поменять конфиги MySQL (/etc/mysql).
Если кратко: метод set_charset под капотом делает sql запрос SET NAMES и после этого запоминает на стороне php установленную кодировку - эта информация позже будет важна для php при вызове mysql_real_escape_string и некоторых других функций.
Таким образом set_charset предпочтительнее.
Тут можно копнуть глубже: а если мы не будем вызывать set_charset, то какая кодировка для mysqli соединения будет использована по умолчанию?