MySQLは、4.1 から内部処理コードが "utf8" に変わり、文字処理周りにも変更が出ています。
そのために、クライアントから送信される文字コードとデータベースの文字コードが異なる場合、文字化けが発生する可能性があります。
それを防ぐには、クライアントから送信される文字コードやサーバーから返される文字コードを指定する必要があります。
SET NAME は、クライアントから送信されるSQLステートメントの文字セットを指定します。
SET CHARACTER_SET は、クライアントから送信される SQL ステートメントの文字セットと、サーバーからクライアントに返される文字セットを指定します。
*注
SET NAME による文字セットの指定は、SQL 文使用に起因する脆弱性が報告されており、php5.2.3 から新たに追加された API レベルの "mysql_set_charset()" が推奨されます。
(例) mysql_set_charset('utf8');

