Soy nuevo en el tema PHP, estoy aprendiendo bastante este último mes ya que un cliente prefirió utilizar ese lenguage sobre Java. Anoche me encontré con un problema cuando estaba tratando de hacer un simple insert en la base de datos a mano. Me dí cuenta que en la tabla habían caracteres ilegibles en otros records que no habia hecho insert a mano. Esos records eran provenientes de la aplicación PHP. Que paso ? Aparentemente (quiza me equivoque) el default charset de PHP PDO es ISO-8859-1.

Para solucionar esto facilmente pasamos un parámetro más cuando generamos una conexión PDO desde PHP:

$connectionString = "mysql:host=localhost;dbname=basex";
$params = array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8");

$connection = new PDO($connectionString, "user", "password", $params);

Eso solucionó mi problema de inserts, ahora lo que hago insert lo puedo ver perfectamente sin caracteres raros en la consola mysql.

Ahora la segunda parte del problema fue hacer los queries y que devuelvan caracteres decentes. En mi caso uso Ajax > JSON. Y obviamente venian caracteres extraños. Lo que hice fue utilizar la funcion json_encode para parsear los valores que eran string.