A menudo veo algo similar a esto a continuación en los scripts PHP que usan MySQL
query("SET NAMES utf8");
Nunca he tenido que hacer esto para ningún proyecto, así que tengo un par de preguntas básicas al respecto.
- ¿Es esto algo que se hace solo con DOP?
- Si no es una cosa específica de DOP, ¿cuál es el propósito de hacerlo? Me doy cuenta de que está configurando la codificación para mysql, pero quiero decir, nunca he tenido que usarlo, así que ¿por qué querría usarlo?
Respuestas:
Es necesario siempre que desee enviar datos al servidor con caracteres que no se pueden representar en ASCII puro, como 'ñ' o 'ö'.
Eso si la instancia de MySQL no está configurada para esperar la codificación UTF-8 de forma predeterminada de las conexiones del cliente (muchas lo están, según su ubicación y plataforma).
Lea http://www.joelonsoftware.com/articles/Unicode.html en caso de que no sepa cómo funciona Unicode.
Lea si usar "SET NAMES" para ver las alternativas de SET NAMES y de qué se trata exactamente.
fuente
SET NAMES UTF8
para ellos?SELECT
declaración.Del manual :
De manera más elaborada (y una vez más, extraída gratuitamente del manual ):
fuente
Obtener la codificación correcta es realmente complicado: hay demasiadas capas:
El comando SQL "SET CHARSET utf8" de PHP asegurará que el lado del cliente (PHP) obtendrá los datos en utf8, sin importar cómo estén almacenados en la base de datos. Por supuesto, primero deben almacenarse correctamente.
Definición de DDL frente a datos reales
La codificación definida para una tabla / columna no significa realmente que los datos estén en esa codificación. Si tiene una tabla definida como
utf8
pero almacenada con una codificación diferente, entonces MySQL las tratará comoutf8
si estuviera en problemas. Lo que significa que tienes que arreglar esto primero.Que comprobar
Debe verificar qué codifica el flujo de datos en cada capa.
Asegúrese de que haya el correcto en todas partes.
Conversión
Si recibe datos en
windows-1250
, por ejemplo , y desea almacenarlosutf-8
, utilice este SQL antes de almacenar:Si tiene datos en la base de datos
windows-1250
y desea recuperarlosutf8
, use:Algunas notas más:
fuente
Esta consulta debe escribirse antes de la consulta que crea o actualiza datos en la base de datos, esta consulta se ve así:
Tenga en cuenta que debe escribir la codificación que está usando en el encabezado, por ejemplo, si está usando utf-8, lo agrega así en el encabezado o surgirá un problema con Internet Explorer
para que tu página se vea así
fuente
La solucion es
fuente
En lugar de hacer esto a través de una consulta SQL, use la función php: mysqli :: set_charset mysqli_set_charset
de http://www.php.net/manual/en/mysqli.set-charset.php
fuente
¡Gracias a todos!
no use: query ("SET NAMES utf8"); esto es algo de configuración y no una consulta. ponerlo justo después de iniciar una conexión con setCharset () (o un método similar)
alguna cosita en parctice:
estado:
Almacenar y leer datos no es un problema siempre que mysql pueda manejar los caracteres. si miras en la base de datos ya verás que hay basura en ella (por ejemplo, usando phpmyadmin).
hasta ahora esto no es un problema! (incorrecto pero funciona a menudo (en europa)) ..
.. a menos que otro cliente / programa o una biblioteca modificada, que funcione correctamente, lea / guarde los datos. ¡entonces estás en un gran problema!
fuente
No solo DOP. Si sql responde como '????' símbolos, preestablecido de su juego de caracteres (espero que UTF-8) realmente recomendado:
o mediante estilo de procedimiento
mysqli_set_charset($db,"utf8")
fuente