Pues a eso quizá pueda responder yo mismo, ya que me he estado mirando unas cuantas cosillas.
Por cierto, he puesto el SET NAMES en la función que me realiza la conexión a la base de datos y ya funcionan las dos igual. Sigo con el misterio, pero supongo que será una de esas cosas de la informática que vuelven a uno loco y no tienen una explicación fácil. Y no creo que merezca la pena matarse con ello.
Al crear un php enlazado a una base de datos especificas una serie de datos, algunos pueden omitirse y depende del navegador, servidor, y versiones funcionará como quieres o no, pero cada dato es distinto y necesario:
- Al navegador que tipo de documento es:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML........ para que sepa como tratarlo y que nivel de estándares debe respetar, aunque luego el IE haga lo que le venga en gana.
- También le especificas que conjunto de caracteres debe enviar el servidor al cliente:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> Antes no se podían mostrar caracteres de diferentes idiomas en una web, con esta declaración abres el abanico de caracteres que se muestran. El utf-8 usa 8 bits para los caracteres, de forma que además de los ANSI engloba el resto de codificaciones en una sola.
- Creas una base de datos y le dices el "formato" en que guardará los datos: Cotejamiento utf8-unicode-ci por ejemplo.
- Pero cuando trabajas con un lenguaje que va a gestionar esa base de datos, debes especificarle también como relacionarse con ella, y entre este tipo de especificaciones está la de decirle que envíe y reciba los caracteres en utf-8: mysql_query ("SET NAMES 'utf8'");
Cada instrucción va destinada a distintos receptores, y de ahí que pueda parecer redundante.
Espero que sea así, después de leer tanto, lo he esquematizado todo y espero no haberme dejado nada importante que de lugar a dudas o errores de concepto