1) Servidor Web con PHP y MySQL con un usuario con privilegios suficientes
2) PHP Designer y
3) HeidiSQL
COLLATION Y CHARSETS
Ahora bien, algo que siempre nos rompe la cabeza es cuando hemos pasado programando un buen rato y ya tenemos buenos avances, y a alguien se le ocurre probar con tildes y ñ's y que pasa??? se muestra mal en la pagina y/o peor aun la información queda guardada en la base de datos con unos caracteres tan raros que te hacen recordar a Q*bert, como evitamos esto? pues es muy sencillo de hacer, todo esta en que tengamos un buen sentido del "estándar" (algo así como un sentido de orientación), lo que sucede es que tanto tu base de datos y su configuración manejan "juegos de caracteres (charset)", "collation" y la conexión a ella también tiene un juego de caracteres... también tu webserver, osea apache, maneja un chartset default, y tu HTML generado por el lenguaje de programación osea PHP también usa un tipo de caracteres (cuando hable de juego de caracteres, charsets, collation, tipo de caracteres, etc deben recordar que conceptualmente no es lo mismo, pero nos referimos a lo mismo).
Ahora bien, la mayoría de personas la palabra "estandar" le suena a arameo antiguo y a veces es como la religión, todos "son", "pertenecen" y saben que es, pero no practican para nada el concepto, lo mismo nos pasa con ser estándares, a veces por ignorancia otras por arrogancia, y muchas veces por "huevonancia", pero como hoy estamos viendo las cosas desde un punto de vista diferente, vamos a estandarizar nuestros charsets y collation desde un inicio para que todo nos quede bien desde el inicio.
Primero debemos tomar en cuenta donde estará hospedada la aplicación/web, a) si es en un lugar donde podemos manipular todas las configuraciones (php, apache, mysql), o b) en un lugar donde algunas configuraciones están predeterminadas y no tenemos acceso como en la mayoría de los webhostings.
Si tenemos el ambiente (a) es el mas sencillo, si tenemos el ambiente (b) es un poco mas complicado porque dependerá mucho de la configuración predeterminada que tenga, pero igual con un poco de código siempre podremos arreglar esto.
Configurando el ambiente
Tomemos el ambiente (a), empecemos por configurar Apache (como asumo que me hicieron caso y están usando XAMPP) busquen el archivo que esta en la carpeta conf de apache llamado httpd.conf y agregamos al final la siguiente linea:
AddDefaultCharset utf-8Ademas, asegurense que en el archivo llamado charset.conv contenga esta linea (sino la agregan)
UTF-8 utf8 UTF-8Reiniciamos apache, y con esto basta para con Apache.
Ahora vamos con MySQL, y es aquí donde debemos de tener un poco mas de cuidado ya que nuestra decisión puede ser difícil de revertir luego de haber creado bases de datos y tablas, así que estén seguros de su decisión primero, por ejemplo si eligieran que el charset default de mysql fuera UTF-8 y Collation utf8_general_ci y luego resulta que necesitaban que collation fuera utf8_unicode_ci, cambiar su BD y tablas les juro que les dará un poco de dolor de cabeza, así que les recomiendo crear una BD de pruebas y una tabla con un par de campos de caracteres (char, varchar, text) y hacer pruebas extrayendo y guardando datos desde php para asegurarnos que todo esta bien (es decir, hacer lo que les digo).
Ok, nos vamos al archivo my.ini que esta en la carpeta xampp\mysql\bin y agregan las siguientes lineas:
La primera linea nos define la conexión, la segunda el charset y la tercera el collation, ahora bien, esto es para que por default el ambiente quede así, pero no significa que no lo podamos cambiar con comandos ya sea de mysql o de php, así que ojo.
init-connect='SET NAMES utf8'character-set-server=utf8collation-server=utf8_general_ci
Guardamos my.ini y reiniciamos el servicio de MySQL, y con esto tenemos listo casi todo.
Por ultimo, y no por eso menos importante, esta el charset que usaremos en nuestro HTML, esto se define con el siguiente meta tag (si no sabes que es un meta tag, mejor búscate otro oficio por favor jajajja )
< meta http-equiv="content-type" content="text/html; charset=UTF-8" >
Y con esto tendríamos configurado todo el ambiente para que no tengamos problemas con los caracteres latinos (tildes, eñes, etc).
Nota: si quieren saber como esta configurada su base de datos, pueden ejecutar el siguiente comando show variables like '%collation%'
Si todas las variables tienen lo mismo, estén seguros que no tendrán problemas con la base de datos, deberia mostrarles algo asi:Espero que les halla sido util lo que escribi, y si no les fue util... pues ni modo xD, si llegaron a este post y no han leido el primero, pueden leerlo aqui.
Saludos.
1 comentario:
muy util la info
Publicar un comentario