Problemas con UTF8

Esta vez me ocurrió un problema con una página web que tengo que administrar, resulta que al mostrarse en el navegador me estaba reemplazando las tildes y las “ñ” con caracteres raros, después de una larga investigación y tras probar infinidad de métodos lo único que me funcionó fue lo siguiente:

Primero cambiar el set de caracteres de mi base de datos(MYSQL) a utf8_unicode_ci, tambien se puede utilizar utf8_general_ci, luego de eso tengo que cambiar el encabezado de mis archivos de la página web para que trabajen con utf8:

<meta http-equiv=”Content-Type” content=”text/html; charset=utf-8″ />

Al principio pensaba que con eso era suficiente pero seguía con el mismo error, ¿Qué cosa me faltaba?, navegando en la red encontré que después de hacer la conexión tenia que decirle a mis consultas que usen utf8, para eso tengo que añadir lo siguiente:

mysql_query (“SET NAMES ‘utf8′”);

Debo recordar que esto se hace después de establecer la conexión y antes de realizar cualquier consulta.

Ya con esto tengo el problema solucionado y puedo visualizar mi web sin ningún problema. Pero si tambien deseamos cambiar la codificacion de nuestros ficheros fuente de ISO 8859-1 a UTF-8 podemos hacer un script como este para linux:

#!/bin/bash
for i in `find -name ‘*.php’`
do
iconv -f ISO_8859-1 -t UTF-8 $i > tmpfile
mv -f tmpfile $i
done

Lo corremos y comprobamos que el cambio ha sido realizado con el siguiente comando:

 file -i nombre_archivo

El cual nos muestra las características detalladas del archivo.

Saludos y hasta la victoria siempre.

Anuncios

Clase MysqlCommand

Luego de establecer la conexion se pueden realizar operaciones sobre la base de datos con un objeto llamado comando, un objeto MySqlCommand representa una sentencia SQL que será ejecutada en un servidor MySQL.
MySqlCommand cmd = new MySqlCommand();
string strCmd = “Alguna sentencia a ejecutar”;
cmd.CommandText = strCmd;

Después de crear la acción a ser ejecutada, se tiene que especificar la conexión que será utilizada. Para asignar el objeto conexión al objeto comando se dispone de una propiedad MySqlCommand.Connection.
Después de establecer una conexión y especificar el comando adecuado, lo podemos ejecutar. Para hacer esto la clase MySqlCommand esta equipada con diversos métodos que están relacionados con el tipo de consulta a ejecutar. Dos de estos métodos son ExecuteNonQuery() y ExecuteReader(). El método ExecuteNonQuery() ejecuta una sentencia SQL y regresa el número de filas afectadas. El método ExecuteReader() manda la consulta y construye un objeto MySqlDataReader. El primer método será usado comúnmente con sentencias INSERT, DELETE, UPDATE y el segundo método con sentencias SELECT.

MYSQL en .NET

No es que me estoy uniendo al lado oscuro, no solo que en la universidad estamos trabajando con .Net usando Sharp Develop y con la base de datos libre Mysql que dicho sea de paso es bastante vapuleada por mi profesor por sus defectos de seguridad.

Bueno para empezar hay que descargar el conector de Mysql para .NET desde esta direccion http://dev.mysql.com/downloads/connector/net/ y luego instalarlo. Bueno ahora hay que ver un poco de las clases del conector:

El Connector/Net contiene varias clases que son usadas para conectar a la base de datos, ejecutar consultas y sentencias y manejar resultados de consultas.

MySqlCommand.-Representa una sentencia SQL a ejecutar sobre una base de datos MySQL.

MySqlConnection.-Representa una conexión a un servidor de base de datos.

Bueno luego ire describiendo mas acerca de las demas clases pero por el momento solo me interesan estas nada mas.

Para crear las conexiones se utiliza la clase MySqlConnection que está definida en el espacio de nombres MySql.Data.MySqlClient. Antes de usar esta clase primero debe incluir dicho espacio de nombres en nuestro archivo.

using MySql.Data.MySqlClient;

Luego creamos el objeto MysqlConnection:
MySqlConnection conn = new MySqlConnection(“clave1=valor1;clave2=valor2;claveN=valorN”);

MySqlConnection conn = new MySqlConnection(Server=localhost;Database=prueba;Uid=miguel;Pwd=miguel)

Luego de crear la cadena de conexion hay que intentar establecer la conexion para ello se invoca al metodo Open() de la clase MysqlConnection

Como se puede observar, este método no toma ningún argumento. El objeto conexión que lo invoque es el responsable de tener lista la cadena de conexión. Si la conexión falla, se lanzará una excepción del tipo MySqlException. Si la cadena de conexión no contiene una fuente de datos o un servidor, se lanzará una excepción InvalidOperationException.

Para cerrar la conexion se invoca al metodo Close()
conn.Close();