Hi!
Abgesehen davon, dass man bei SET NAMES die Anführungszeichen um das utf8 weglassen kann - hast du kein aktuelles PHP, bei dem mysql_set_charset() zur Verfügung steht?
Doch, klar. Ich verwende 5.2.x
Ist denn mysql_set_charset() besser?
Ja, aber für die hierzulande verwendeten Kodierungen ist es eigentlich egal. Der Unterschied ist, dass SET NAMES nur auf dem Server ausgeführt wird, mysql_set_charset() aber in der in PHP eingebundenen MySQL-Client-API. Funktionen, die von der verwendeten Zeichenkodierung abhängig sind, wie beispielsweise Escape-Funktionen, bekommen nur über den Client-API-Aufruf mitgeteilt, welche Kodierung für diese Verbindung eingestellt wurde. Für die Kodierungen der ISO-8859-Familie und UTF-8 sind die Byte-Werte der zu maskierenden Zeichen sowohl eindeutig als auch die selben, so dass die Maskierung immer korrekt erfolgen kann. Aber es gibt Kodierungen aus dem asiatischen Raum, bei denen die Bytes in mehreren Zeichen vorkommen. Das führt zu falschen Maskierungen und unter Umständen zu SQL-Injection. Aber wie gesagt, für ISO-8859-x und UTF-8 kein Problem.
Lo!