importar con acentos mysql pdo doctrine

con - Doctrine 2: obtener caracters extraños de la tabla MySQL



importar csv a mysql con acentos (4)

Estoy tratando de mostrar un texto como este:

1ºA

almacenado en una tabla MySQL (''nivel'').

Después de consultar la tabla ''nivel'' usando este código:

/** * @Route("/list-level", name="list_level") */ public function listAction(Request $request) { $em = $this->getDoctrine()->getEntityManager(); $levels = $em->getRepository(''AppBundle:Level'')->findAll(); var_dump($levels[0]->getName()); die("fasf");

el var_dump() devuelve esto:

Estoy usando Symfony, por lo que la información relacionada con la conexión de la base de datos se almacena en caché en el archivo var/cache/prod/appProdProjectContainer . Así que lo he abierto para verificar el valor del parámetro de charset de charset y he encontrado esto:

protected function getDoctrine_Dbal_DefaultConnectionService() { $a = new /Symfony/Bridge/Doctrine/ContainerAwareEventManager($this); $a->addEventListener(array(0 => ''loadClassMetadata''), ${($_ = isset($this->services[''doctrine.orm.default_listeners.attach_entity_listeners'']) ? $this->services[''doctrine.orm.default_listeners.attach_entity_listeners''] : $this->get(''doctrine.orm.default_listeners.attach_entity_listeners'')) && false ?: ''_''}); return $this->services[''doctrine.dbal.default_connection''] = ${($_ = isset($this->services[''doctrine.dbal.connection_factory'']) ? $this->services[''doctrine.dbal.connection_factory''] : $this->get(''doctrine.dbal.connection_factory'')) && false ?: ''_''}->createConnection(array(''driver'' => ''pdo_mysql'', ''host'' => ''localhost'', ''port'' => NULL, ''dbname'' => ''my_javiergarpe1979'', ''user'' => ''javiergarpe1979'', ''password'' => ''*******'', ''charset'' => ''UTF8'', ''driverOptions'' => array(), ''defaultTableOptions'' => array()), new /Doctrine/DBAL/Configuration(), $a, array()); }

Como puede ver en esa función, está escrito esto: ''charset'' => ''UTF8'' , así que ... ¿ por qué no obtengo los caracteres correctos?


Hay muchos puntos donde esto podría haber salido mal.

  1. Compruebe el conjunto de caracteres que está utilizando en la base de datos. También verifique la tabla porque pueden tener su propia codificación.
    Vea esta respuesta para más detalles: https://.com/a/202246/2232127
  2. Verifique el conjunto de caracteres que está utilizando para la conexión (ya ha configurado esto)
  3. Compruebe el conjunto de caracteres en el que se muestra la página. Puede configurar esto a través de esta metaetiqueta: <meta charset="UTF-8"> en la etiqueta <head> .
  4. Tienes que usar una fuente que admita este personaje. La mayoría de las fuentes no deberían mostrar el carácter <?> , Sino que podrían mostrar algo similar a ° en este caso.

Probablemente tenga que actualizar las driverOptions en su var/cache/prod/appProdProjectContainer :

protected function getDoctrine_Dbal_DefaultConnectionService() { $a = new /Symfony/Bridge/Doctrine/ContainerAwareEventManager($this); $a->addEventListener(array(0 => ''loadClassMetadata''), ${($_ = isset($this->services[''doctrine.orm.default_listeners.attach_entity_listeners'']) ? $this->services[''doctrine.orm.default_listeners.attach_entity_listeners''] : $this->get(''doctrine.orm.default_listeners.attach_entity_listeners'')) && false ?: ''_''}); return $this->services[''doctrine.dbal.default_connection''] = ${($_ = isset($this->services[''doctrine.dbal.connection_factory'']) ? $this->services[''doctrine.dbal.connection_factory''] : $this->get(''doctrine.dbal.connection_factory'')) && false ?: ''_''}->createConnection(array(''driver'' => ''pdo_mysql'', ''host'' => ''localhost'', ''port'' => NULL, ''dbname'' => ''my_javiergarpe1979'', ''user'' => ''javiergarpe1979'', ''password'' => ''*******'', ''charset'' => ''UTF8'', ''driverOptions'' => array(''1002''=> "SET NAMES ''UTF8'' COLLATE ''utf8_general_ci''"), ''defaultTableOptions'' => array()), new /Doctrine/DBAL/Configuration(), $a, array()); }

Establezca ''driverOptions'' => array(''1002''=> "SET NAMES ''UTF8'' COLLATE ''utf8_general_ci''") lugar de ''driverOptions'' => array() .


Probablemente es un problema del navegador no tener <meta charset=UTF-8> en el encabezado.

Consulte "diamantes negros" en http://.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored

º es el "INDICADOR ORDINAL MASCULINO".

Si SELECT HEX(...) de la tabla, debería ver C2BA para ese personaje. O 31C2BA41 para 1ºA . Si es así, entonces se almacenó correctamente como utf8 (o utf8mb4 ).

Caso 1 (los bytes originales no eran UTF-8):

  • Los bytes que se almacenarán no están codificados como utf8. Arregla esto.
  • La conexión (o SET NAMES ) para INSERT y SELECT no era utf8 / utf8mb4. Arregla esto.
  • Además, verifique que la columna en la base de datos sea CHARACTER SET utf8 (o utf8mb4).

Caso 2 (bytes originales fueron UTF-8):

  • La conexión (o SET NAMES ) para SELECT no era utf8 / utf8mb4. Arregla esto.
  • Además, verifique que la columna en la base de datos sea CHARACTER SET utf8 (o utf8mb4).

Proporcione SHOW CREATE TABLE si tiene otros problemas.


Verifique el conjunto de caracteres de la tabla en la base de datos. Puede ser que no sea UTF-8.