UTF-8 (8-bit Unicode Transformation Format) es una codificación de caracteres de longitud variable para Unicode. Una de sus ventajas es que puede codificar cualquier caracter.
Para poder emplear UTF-8 debemos trabajar con esta codificación desde el principio hasta el final del proyecto y en todas y cada una de sus partes. No es suficiente emplearla en la edición de código, si el proyecto accede a base de datos, ésta deberá estar configurada para su uso.
En este caso se trata de un proyecto RoR con conexión a MySQL.
Edición de código:
El primer paso será disponer de un editor de texto o IDE que permita el uso de UTF-8 y emplear esa configuración a lo largo de todo el proyecto (ficheros .rb, .rhtml, etc).
Adaptar el navegador:
Para poder visualizar el contenido correctamente en el navegador deberemos indicarle que emplee la codificación correcta. Esto se consigue añadiendo la siguiente línea en la cabecera html (normalmente definida en “application.rhtml”):
![]()
Configurar las variables de sistema de MySQL:
– Configuración manual
Localizar el fichero de configuración de MySQL. En OSX y linux se encuentra en /etc/my.cnf
A continuación de la línea [mysqld] añadiremos lo siguiente:
character-set-server=utf8
collation-server=utf8_spanish_ci
default-character-set=utf8
default-collation=utf8_spanish_ci
Nota: Para modificar el contenido de este fichero hay que acceder en modo superusuario.
- Configurar variables en modo gráfico
Otra alternativa para modificar las variables consiste en emplear algún GUI, en el caso de MySQL Administrator, dentro de la opción Options > Advanced > Localization están disponibles las variables donde se define el charset (Las modificaciones quedan reflejadas en el fichero “my.cnf”).
Re-arrancar mysql
Para verificar que la configuración ha sido aceptada se puede recurrir a la interfaz de línea de comandos de MySQL o de alguna GUI tipo CocoaMysql. Si el proceso ha sido correcto, todas las variables relacionadas con “charset” deberían contener “utf8″.
Esta misma verificación la podemos realizar empleando la línea de comandos MySQL:
$ /usr/local/mysql/bin/mysql -u nombre_usuario -p nombre_bbdd
mysql> SHOW VARIABLES;
Nota[Linea de comandos MySQL]: En lugar de emplear “SHOW VARIABLES;” utilizar “\s” (muestra menos información).
Configurar Rails:
Para configurar Rails, es necesario realizar un par de tareas:
- Añadir la siguiente línea al fichero config/environment.rb:
$KCODE = ‘u’- Para establecer el tipo de codificación a emplear por el cliente (ActiveRecord) al conectarse a MySQL, en cada una de las secciones (development, test, production) del fichero config/database.yml añadiremos:
encoding: utf8Existen otras dos posibilidad para conseguir esto mismo:
Crear un before_filter (Opción propuesta por Edgar Gonzalez desde el foro Ror-es@lists.simplelogica.net):
suppress(ActiveRecord::StatementInvalid) do
ActiveRecord::Base.connection.execute ‘SET NAMES UTF8′
end
O añadir la siguiente línea al fichero de configuración de MySQL /etc/my.cnf.
init_connect=’SET NAMES utf8′
Esta última forma no parece la más “limpia” de hacerlo, ya que condiciona la codificación de todas las conexiones, sean de Rails o de otras aplicaciones.UTF-8 en las migraciones:
Si ya disponemos de la estructura de base de datos y queremos adaptarla a UTF-8, deberíamos emplear las migraciones añadiendo el siguiente código.
Para definir el charset de una bbdd podemos añadir en la primera migración como primera orden la siguiente:
execute “ALTER DATABSE ombre_bbdd` SET CHARACTER SET utf8;”
Si solo pretendemos modificar el charset de una tabla:
execute “ALTER TABLE `nombre_bbdd`.`nombre_tabla` CHARACTER SET utf8″
Si no solo queremos adaptar la estructura sino todos los datos contenidos en la misma, existe un artículo escrito por Graeme Mathieson en su blog “woss.name” (ver fuentes) que describe un método rápido y sencillo.
fuente: es.wikipedia
fuente: woss.name


[...] Un post muy similar y coincidencialmente publicado hoy mismo respecto al tema puede ser visto en UTF8 en RoR, donde Carlos presenta otro enfoque para la configuración de MySQL. [...]
I couldn’t understand some parts of this article nnial 2007 – salvatore iaconesi – del.icio.us poetry, but I guess I just need to check some more resources regarding this, because it sounds interesting.
Hace un tiempo tuve un problema al intentar meter caracteres utf-8 en una tabla de oracle configurado para utilizar utf-8 cuyos datos estaban defininidos como:
nombrecampo VARCHAR2 (1 BYTE),
Al intentar meter caracteres de la normal iso 8859 cuyo valor en utf-8 requeria una codificacion mayor de 1 byte (ñ,á,à…), oracle lanzaba error.
Entre las distintintas soluciones posibles, lo más opropiada fue cambiar la deficinion del campo de la tabla a :
nombrecampo VARCHAR2 (1 CHAR),
Espero que sirva de ayuda y que evite algun quebradero de cabeza como el que he tenido estos días.
Un saludo.
para solucionar
Hola hace dias estoy cargando un archivo csv a una aplicación rails y todo me funciona bien, pero por ejemplo cuando se cargan datos que tienen tildes este se guarda con por ejemplo corazón y si creara un registro desde la interfaz de la aplicación el registro quedaria con caracteres raros en la bd
el problema consiste en que la aplicación esta diseñada para que lo que lea desde la bd lo convierta a utf8 pero cuando cargo con csv este me lo muestra con caracteres raros. que puedo hacer
Me gustaría conocer algún detalle más antes de contestarte.