Это кажется общеизвестным для использования mysql_set_charset/mysqli::set_charset вместо прямого запроса MySQL set names.
Часто упоминаемая причина заключается в том, что set names небезопасен, потому что кодировка, используемая для mysql_real_escape_string/mysqli::real_escape_string будет задан только вызовом mysql_set_charset/mysqli::set_charset. (Другая причина, о которой идет речь, заключается в том, что в документах PHP говорится, что "не рекомендуется" & sect;.)
Однако безопасно ли использовать прямой запрос MySQL set names, если мы будем использовать подготовленные заявления и  другие способы ускорения, кроме mysql_real_escape_string/mysqli::real_escape_string/mysqli_escape_string?
Помимо влияния на кодировку mysql_real_escape_string/mysqli::real_escape_string/mysqli_escape_string, существует ли разница между set names vs mysql_set_charset/mysqli::set_charset?