Php insertar utf8 en mysql
Probablemente te refieres a utf8-general-ci. Historia corta: utf8 en MySQL es una mierda, no es realmente utf8 como el resto del mundo lo conoce. Lo hicieron así hace tiempo por razones de rendimiento, y ahora todos tenemos que sufrir por ello. La buena noticia es que ahora tenemos utf8mb4, que es el verdadero utf8 en MySQL.
Contenido de este postLa historia de UTF8 VS UTF8MB4Recomendación¿Cómo convertir utf8 a utf8mb4 en MySQL? La historia de UTF8 VS UTF8MB4 Una vez recibí una llamada del equipo de soporte, diciendo que uno de nuestros clientes informó de que la aplicación no puede guardar los datos en una de nuestras características críticas para el negocio …
Creo que después de cambiar la intercalación de la base de datos, también tiene que cambiar o asegurarse de que todas las columnas varchar o la columna que le concierne están utilizando utf8mb4. A continuación, actualice todos los valores de nuevo con la nueva codificación o de lo contrario los valores todavía se almacenan en formato antiguo o menos bytes.
Php codificación utf8
Como he publicado anteriormente en este sitio web, creo que es una buena idea estandarizar en una codificación de caracteres en todas las partes de un sistema, y como mi codificación de caracteres preferida es UTF-8, cuando creo un sistema PHP compruebo las siguientes cosas:
Por supuesto, también necesitamos configurar nuestro editor de elección a nuestra codificación de caracteres deseada y cuando creamos las tablas MySQL elegir UTF-8 como su codificación de caracteres (haré un post sobre las diferentes codificaciones de caracteres y sobre colaciones en el futuro).
No siempre contamos con la posibilidad de modificar php.ini en nuestro servidor, pero digamos que si, en este caso podemos establecer la codificación de caracteres por defecto para nuestros scripts PHP cambiando:default_charset = “utf-8”
Sin embargo, si esto no está disponible, podemos especificar la codificación de caracteres en la que se está sirviendo el archivo enviando una cabecera al principio de nuestro script:<?php header(“Content-type: text/html; charset=utf8”); ?>
Debemos asegurarnos de que la información que estamos recibiendo de la base de datos está siendo manejada como UTF-8 por nuestros scripts PHP, para ello podemos usar las funciones mysql_set_charset() o mysqli_set_charset():mysql_set_charset(‘utf8’);
Conjunto de caracteres php
i crees que “set names utf8” para cada conexión es demasiado problema, puedes modificar my.cnf de MySQL para resolver el problema para siempre. En my.cnf, añade la línea “default-character-set=utf8” en ambas secciones [mysqld] y [client]:[client]default-character-set=utf8[mysqld]default-character-set=utf8El MySQL usará utf8 después de que lo reinicies.
No he tenido suerte con todo lo que se menciona a continuación, y a pesar de tener una BD unicode, y configurar todos mis campos a utf8_general_ci…Después de buscar un poco, encontré que esta página: http://dev.mysql.com/tech-resources/articles/4.1/unicode.html añadía los campos con una información extra antes de cada valor:<? mysql_query(“INSERT INTO table SET field = _utf8’value'”);?>Tenga en cuenta el “_utf8” antes del valor del campo, y fuera de las comillas.Esto funciona para mi ya sea en una sentencia Insert o Update.No hay necesidad aqui de un <? mysql_query(“SET NAMES utf8”); ?> antes de cada consulta, o de cambiar nada en los archivos de configuracion (que era importante ya que no tengo acceso a estos).
Mysqli_set_charset
He ‘heredado’ una configuración de osCommerce 2.2, PHP4 y MySQL4 que da problemas. El problema es la codificación de caracteres. Mientras que las tablas están definidas para contener UTF8 en realidad contienen latin1. Para mezclar algo completamente nuevo en esto, parece que el antiguo codificador cambió esto manualmente estableciendo SET CHARACTER SET ‘utf8’ cuando se hace la conexión a la base de datos.
En el momento en que cambio la intrusión manual estableciendo el conjunto de caracteres a latin1 cuando se establece la conexión, cada inserción está bien, pero la base de datos sólo entrega ? en lugar de los caracteres especiales.
No tengo ni idea de cómo resolver esto, si cambio las columnas de la base de datos a latin1 pierdo todos los caracteres especiales, si cambio la codificación en la conexión falla la visualización o la inserción. Estoy completamente sin ideas.
Cuando estás cambiando datos que están en otro juego de caracteres tienes que cambiarlos primero a blob y luego al juego de caracteres de destino (latin1). Si no lo haces mysql hará la conversión por ti y eso no te interesa, puesto que ya tienes los datos en latin1?