Foros del Web » Programando para Internet » PHP »

como convertir de UTF8 a Latin1 en mysql

Estas en el tema de como convertir de UTF8 a Latin1 en mysql en el foro de PHP en Foros del Web. hola, necesito convertir en mysql de UTF8 a latin1 porque ando haciendo un buscador y como los datos quedan guardados en utf8 en las tablas, ...
  #1 (permalink)  
Antiguo 01/11/2013, 12:47
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
como convertir de UTF8 a Latin1 en mysql

hola, necesito convertir en mysql de UTF8 a latin1 porque ando haciendo un buscador y como los datos quedan guardados en utf8 en las tablas, al hacer una busqueda no me sale correctamente ejemplo:

si voy a buscar la palabra programacion. Como en la DB se guarda asi: Programación entonces no lo encuentra por el ó entonces, si convierto eso primero a Latin1, quedaria programación que alli si lo encuentra porque toma la ó=o.

solo encontré este que lo hace de latin1 a utf8 y funciona
SELECT CAST( _latin1 'Programación' AS CHAR CHARACTER SET utf8);

pero de utf8 a latin1 no coje ni poniendolo asi
SELECT CAST( _utf8 'Programación' AS CHAR CHARACTER SET latin1);


no puedo cambiar el collage de las tablas, son muuuchas.
__________________
Manual de Javascript
  #2 (permalink)  
Antiguo 01/11/2013, 13:08
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: como convertir de UTF8 a Latin1 en mysql

Acláranos mejor tu situación, pero por lo pronto ya podemos decirte que es más bien un problema que resolverás en el foro de programación. Si tienes codificadas tu base, sus tablas y campos con UTF-8, has tomado una buena decisión. El problema, creo, es que cuando guardas con tu programación, el archivo php (si es ese tu programa), el archivo html en el que realizas la carga de datos no tienen la misma codificación y no se entienden. O tal vez el problema (me inclino por esto último) es el archivo php y el html desde el que realizas la búsqueda. Pide ayuda en el foro de programación, pues esa codificación es excelente y estos problemas suelen resolverse fácilmente. ¿O tal vez lo que dices es que las tablas están codificadas en latin1 y has cargado datos en UTF-8?
  #3 (permalink)  
Antiguo 01/11/2013, 13:32
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por jurena Ver Mensaje
Acláranos mejor tu situación, pero por lo pronto ya podemos decirte que es más bien un problema que resolverás en el foro de programación. Si tienes codificadas tu base, sus tablas y campos con UTF-8, has tomado una buena decisión. El problema, creo, es que cuando guardas con tu programación, el archivo php (si es ese tu programa), el archivo html en el que realizas la carga de datos no tienen la misma codificación y no se entienden. O tal vez el problema (me inclino por esto último) es el archivo php y el html desde el que realizas la búsqueda. Pide ayuda en el foro de programación, pues esa codificación es excelente y estos problemas suelen resolverse fácilmente. ¿O tal vez lo que dices es que las tablas están codificadas en latin1 y has cargado datos en UTF-8?

Gracias por responder.
las base de datos y tablas estan en utf-8 igual que el PHP, el problema es este:

Cuando hago un: Select * from tabla where `categoria`="Programacion";

no arroja nada porque en la celda `categoria` la palabra programacion aparece asi: Programación

porque utf-8 convierte la ó en ó

y lo que necesito es que tome a o=ó

en php lo haría asi:
echo utf8_decode('ó'); //resultado seria ó

ahora, en mysql como hacer la funcion utf8_decode() de php?
__________________
Manual de Javascript
  #4 (permalink)  
Antiguo 01/11/2013, 13:51
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: como convertir de UTF8 a Latin1 en mysql

Tienes un problema con los scripts de PHP y/o HTML.
Este es un tema recurrente en PHP, y es más probable que te ersulte útil si te muevo el post a ese foro.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 01/11/2013, 13:59
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Tienes un problema con los scripts de PHP y/o HTML.
Este es un tema recurrente en PHP, y es más probable que te ersulte útil si te muevo el post a ese foro.
agale
__________________
Manual de Javascript
  #6 (permalink)  
Antiguo 01/11/2013, 14:43
 
Fecha de Ingreso: septiembre-2011
Mensajes: 219
Antigüedad: 12 años, 7 meses
Puntos: 31
Respuesta: como convertir de UTF8 a Latin1 en mysql

http://dev.mysql.com/doc/refman/5.0/...t-convert.html

Espero te sirva la info, saludos.
  #7 (permalink)  
Antiguo 01/11/2013, 15:02
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: como convertir de UTF8 a Latin1 en mysql

Yo tenía el mismo problema, lo resolví así:

1.- La tabla es: latin1_general_ci
2.- Los campos son: utf8_general_ci
3.- En el <Head> coloqué: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" >

Es todo... Espero te pueda servir.
  #8 (permalink)  
Antiguo 01/11/2013, 16:18
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por Bier Ver Mensaje
Yo tenía el mismo problema, lo resolví así:

1.- La tabla es: latin1_general_ci
2.- Los campos son: utf8_general_ci
3.- En el <Head> coloqué: <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2" >

Es todo... Espero te pueda servir.
gracias pero a la final lo resolvi creando una funcion en mysql que convirtiera de utf8 a iso asi:
Código PHP:
CREATE  FUNCTION convertir_uai(entrada VARCHAR(30)) RETURNS VARCHAR(30)
BEGIN
    
DECLARE salida VARCHAR(30);
        
SET salida REPLACE(entrada 'á''á');
        
SET salida REPLACE(salida 'é''é');
        
SET salida REPLACE(salida 'Ã*''í');
        
SET salida REPLACE(salida 'ó''ó');
        
SET salida REPLACE(salida 'ú''ú');
        
SET salida REPLACE(salida 'à''à');
        
SET salida REPLACE(salida 'è''è');
        
SET salida REPLACE(salida 'ì''ì');
        
SET salida REPLACE(salida 'ò''ò');
        
SET salida REPLACE(salida 'ù''ù');
        
SET salida REPLACE(salida 'ä''ä');
        
SET salida REPLACE(salida 'ë''ë');
        
SET salida REPLACE(salida 'ï''ï');
        
SET salida REPLACE(salida 'ö''ö');
        
SET salida REPLACE(salida 'ü''ü');
        --
SET salida REPLACE(entrada 'Ã''Á');
        --
SET salida REPLACE(entrada 'É''É');
        --
SET salida REPLACE(entrada 'Ã''Í');
        --
SET salida REPLACE(entrada 'Ó''Ó');
        --
SET salida REPLACE(entrada 'Ú''Ú');
        --
SET salida REPLACE(entrada 'Ñ''Ñ');
        --
SET salida REPLACE(entrada 'À''À');
        --
SET salida REPLACE(entrada 'È''È');
        --
SET salida REPLACE(entrada 'ÃŒ''Ì');
        --
SET salida REPLACE(entrada 'Ã’''Ò');
        --
SET salida REPLACE(entrada 'Ù''Ù');
        --
SET salida REPLACE(entrada 'Ñ''Ñ');
        --
SET salida REPLACE(entrada 'Ä''Ä');
        --
SET salida REPLACE(entrada 'Ë''Ë');
        --
SET salida REPLACE(entrada 'Ã''Ï');
        --
SET salida REPLACE(entrada 'Ö''Ö');
        --
SET salida REPLACE(entrada 'Ãœ''Ü');
    RETURN 
salida;
END;

Prueba:
select convertir_uai('Programación');

resultadoprogramación 
los que estan con -- son porque no los necesito ya que todos los datos estan en minuscula, a demas sale un error

ahora la comparacion solo es Select * from TABLE where convertir_uai(`celda`) = 'programacion'
__________________
Manual de Javascript
  #9 (permalink)  
Antiguo 01/11/2013, 16:20
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

si existia otro metodo por favor avisar ;)
__________________
Manual de Javascript
  #10 (permalink)  
Antiguo 01/11/2013, 16:37
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: como convertir de UTF8 a Latin1 en mysql

el procedimiento es correcto. Con expresiones regulares hubiese sido menos laborioso.
  #11 (permalink)  
Antiguo 01/11/2013, 18:15
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: como convertir de UTF8 a Latin1 en mysql

Lo más óptimo y correcto sería tener todas tus fuentes de datos (tablas, campos, archivos php, txt, etc.) con la misma codificación y evitas tener que estar haciendo parches que te servirán solo para los caracteres que has tenido en cuenta por ahora, quien sabe si después necesites agregar otros.
__________________
- León, Guanajuato
- GV-Foto
  #12 (permalink)  
Antiguo 01/11/2013, 21:25
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por Bier Ver Mensaje
el procedimiento es correcto. Con expresiones regulares hubiese sido menos laborioso.
el problema es que REPLACE de mysql no acepta expreciones regulares, si conoces alguna otra funcion que si los acepte por favor avisame
__________________
Manual de Javascript
  #13 (permalink)  
Antiguo 01/11/2013, 21:29
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por Triby Ver Mensaje
Lo más óptimo y correcto sería tener todas tus fuentes de datos (tablas, campos, archivos php, txt, etc.) con la misma codificación y evitas tener que estar haciendo parches que te servirán solo para los caracteres que has tenido en cuenta por ahora, quien sabe si después necesites agregar otros.
todo esta con la misma codificacion (UTF8), el problema es que para mysql, programación es diferente a programacion y peor programación.
La unica forma de resolver el error ubiera sido ponerlo todo en ISO pero ISO es muy limitado para el tipo de web que estoy haciendo
__________________
Manual de Javascript
  #14 (permalink)  
Antiguo 01/11/2013, 22:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
todo esta con la misma codificacion (UTF8)
Error. En alguna parte hay algo que está haciendo otra cosa. En alguna etapa hay un error, que no estás viendo.
Si todo estuviese unificado, este problema no lo tendrías, como no lo tengo yo en las bases que manejo, ni otros tampoco.
El problema es que verificar qué y donde puede ser algo muy laborioso... Con un solo script que falle, por menor que sea, alcanza.
Cita:
el problema es que para mysql, programación es diferente a programacion y peor programación.
Nop. El problema no es MySQL. La base sólo almacena lo que recibe, y devuelve lo que tiene. No transforma cosas porque si, y en especial si está en UTF8.
Una prueba que puedes hacer es no usar tu aplicación para leer los datos, sino alguna otra interfaz (phpMyadmin sirve, pero yo preferiría usar MySQL Workbench). Sin con una interfaz distinta, los caracteres se ven mal, entonces es que la base los está recibiendo mal. Pero si en esa interfaz se ven bien, entonces la devolución de MySQL está siendo mal interpretada.
Cuidado: Tienes que hacer esta verificación con una interfaz que no sea la que tu has programado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #15 (permalink)  
Antiguo 01/11/2013, 22:36
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Error. En alguna parte hay algo que está haciendo otra cosa. En alguna etapa hay un error, que no estás viendo.
Si todo estuviese unificado, este problema no lo tendrías, como no lo tengo yo en las bases que manejo, ni otros tampoco.
El problema es que verificar qué y donde puede ser algo muy laborioso... Con un solo script que falle, por menor que sea, alcanza.

Nop. El problema no es MySQL. La base sólo almacena lo que recibe, y devuelve lo que tiene. No transforma cosas porque si, y en especial si está en UTF8.
Una prueba que puedes hacer es no usar tu aplicación para leer los datos, sino alguna otra interfaz (phpMyadmin sirve, pero yo preferiría usar MySQL Workbench). Sin con una interfaz distinta, los caracteres se ven mal, entonces es que la base los está recibiendo mal. Pero si en esa interfaz se ven bien, entonces la devolución de MySQL está siendo mal interpretada.
Cuidado: Tienes que hacer esta verificación con una interfaz que no sea la que tu has programado.
gracias por contestar, pero desde mi phpmyadmin, cuando pongo a buscar la palabra programacion en una celda que contiene programación no lo encuentra. ese era el problema, lo que queria era que lo encontrara desde una sentencia SQL sin usar PHP y no estaba dispuesto a cambiar de utf8 a latin1

si en las bases de datos que manejas tu y otros, el resultado es diferente acepto tu comentario. ;)
__________________
Manual de Javascript
  #16 (permalink)  
Antiguo 01/11/2013, 22:40
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: como convertir de UTF8 a Latin1 en mysql

Una vez más, esto es una configuración en el código o permanente en el servidor que tienes que realizar:

intenta con esto antes de mandar la consulta

Código PHP:
Ver original
  1. mysql_query('SET NAMES utf8') or die(mysql_error());
  2. mysql_query('SET CHARACTER SET utf8') or die(mysql_error());
  3. mysql_query('SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error());

el asunto es que puede que tengas tu BD en utf8, y tus archivos tambien, más no la comunicación entre php y mysql, y lo que hace esto es realizar la conexión o la comunicación en la misma codificación.

Lo mejor para no batallar es poner estas directivas en el archivo de my.cnf en tu servidor, quedarian algo como esto:

Código BASH:
Ver original
  1. init_connect='SET collation_connection = utf8_general_ci'
  2. init_connect='SET NAMES utf8'
  3. character-set-server=utf8
  4. collation-server=utf8_general_ci
  5. skip-character-set-client-handshake

Esto claro, si tienes acceso al servidor.

De esta manera no tienes que realizar ningun tipo de conversión y mantienes todo en UTF-8 que es muchisimo mejor que LATIN1

Espero te sirva, hazlo y me dices cual fue el resultado.

http://www.forosdelweb.com/f18/probl...raros-1058387/
__________________
Hasta que el hombre no es nada, Dios no puede hacer nada con el.
  #17 (permalink)  
Antiguo 12/11/2013, 00:43
 
Fecha de Ingreso: abril-2009
Mensajes: 162
Antigüedad: 15 años
Puntos: 6
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por alvidales Ver Mensaje
Una vez más, esto es una configuración en el código o permanente en el servidor que tienes que realizar:

intenta con esto antes de mandar la consulta

Código PHP:
Ver original
  1. mysql_query('SET NAMES utf8') or die(mysql_error());
  2. mysql_query('SET CHARACTER SET utf8') or die(mysql_error());
  3. mysql_query('SET COLLATION_CONNECTION="utf8_general_ci" ') or die(mysql_error());

el asunto es que puede que tengas tu BD en utf8, y tus archivos tambien, más no la comunicación entre php y mysql, y lo que hace esto es realizar la conexión o la comunicación en la misma codificación.

Lo mejor para no batallar es poner estas directivas en el archivo de my.cnf en tu servidor, quedarian algo como esto:

Código BASH:
Ver original
  1. init_connect='SET collation_connection = utf8_general_ci'
  2. init_connect='SET NAMES utf8'
  3. character-set-server=utf8
  4. collation-server=utf8_general_ci
  5. skip-character-set-client-handshake

Esto claro, si tienes acceso al servidor.

De esta manera no tienes que realizar ningun tipo de conversión y mantienes todo en UTF-8 que es muchisimo mejor que LATIN1

Espero te sirva, hazlo y me dices cual fue el resultado.

[url]http://www.forosdelweb.com/f18/problema-con-caracteres-raros-1058387/[/url]
HOLA, gracias por contestar, pero ponerle eso hizo que toda la web que se muestra en el navegador apareciera con los caracteres raros en vez de tilde, o sea de la base de datos donde aparece la palabra (Programación) la muestra en el navegador con (Programación) con sus ó en UTF-8. abran otras soluciones, pero por el momento tenemos la que expongo arriba.
__________________
Manual de Javascript
  #18 (permalink)  
Antiguo 12/11/2013, 20:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: como convertir de UTF8 a Latin1 en mysql

Ahora resulta que la culpa es de quien te sugiere como hacer las cosas correctamente.

Como ya te había mencionado, el hacer parches para el problema que tienes actualmente quizá te solucione algo por ahora, pero después irán apareciendo más cosas, por lo que:

1- Insisto en que tengas todas tus fuentes de datos en la misma codificación
2- Descarga todas tus tablas a un archivo de texto, corrige los caracteres raros manualmente
3- Sube todas tus tablas ya corregidas
4- Fin del problema

Te recuerdo que si intentas saltar el primer paso, no funcionará todo lo demás.
__________________
- León, Guanajuato
- GV-Foto
  #19 (permalink)  
Antiguo 23/11/2013, 00:37
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: como convertir de UTF8 a Latin1 en mysql

Cita:
Iniciado por Triby Ver Mensaje
Ahora resulta que la culpa es de quien te sugiere como hacer las cosas correctamente.

Como ya te había mencionado, el hacer parches para el problema que tienes actualmente quizá te solucione algo por ahora, pero después irán apareciendo más cosas, por lo que:

1- Insisto en que tengas todas tus fuentes de datos en la misma codificación
2- Descarga todas tus tablas a un archivo de texto, corrige los caracteres raros manualmente
3- Sube todas tus tablas ya corregidas
4- Fin del problema

Te recuerdo que si intentas saltar el primer paso, no funcionará todo lo demás.
Tienes toda la razón, me he topado con muchos "desarrolladores" sin ofender a nadie, que lo unico que hacen es rascarle por encimita y no escarbar e ir a la raiz de la solución, y cierto, hay que hacer todo bien desde un principio.
__________________
Hasta que el hombre no es nada, Dios no puede hacer nada con el.
  #20 (permalink)  
Antiguo 23/11/2013, 00:40
Avatar de alvidales  
Fecha de Ingreso: febrero-2012
Mensajes: 108
Antigüedad: 12 años, 2 meses
Puntos: 11
Respuesta: como convertir de UTF8 a Latin1 en mysql

1.- Base de datos en utf8_general_ci
2.- Archivos php en codificación utf8 (te recomiendo usar netbeans y no tendras problemas con eso).
3.- Haz lo que inique del servidor.

similar a lo que dijo Triby un poco más técnico y general.
__________________
Hasta que el hombre no es nada, Dios no puede hacer nada con el.
  #21 (permalink)  
Antiguo 24/11/2013, 01:30
 
Fecha de Ingreso: enero-2002
Mensajes: 1.174
Antigüedad: 22 años, 3 meses
Puntos: 21
Respuesta: como convertir de UTF8 a Latin1 en mysql

Triby ha puesto una opción válida.
Yo dije que con expresiones regulares, y lo podrías hacer así:

1- Insisto en que tengas todas tus fuentes de datos en la misma codificación (Triby)
2- Leer el registro (con PHP), aplicarle una expresión regular para intercambiar caracteres y UPDATE.

Etiquetas: mysql, select, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:16.