Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

campos UTF8_general_ci

Estas en el tema de campos UTF8_general_ci en el foro de Mysql en Foros del Web. Buenas, espero tener suerte y que alguien me ayude :) Es posible rellenar un campo varchar UTF_general sin signos extraños? los caracteres de nuestro abecedario ...
  #1 (permalink)  
Antiguo 25/11/2010, 15:10
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
campos UTF8_general_ci

Buenas, espero tener suerte y que alguien me ayude :)

Es posible rellenar un campo varchar UTF_general sin signos extraños? los caracteres de nuestro abecedario latino son rellenados correctamente , pero otros abecedarios como el cirilico presentan simbolos extraños
  #2 (permalink)  
Antiguo 25/11/2010, 18:10
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: campos UTF8_general_ci

Hes estado mirando detalladamente mi problema, y mysql me transforma las palabras a UTF8 , como si hiciera un utf8_encode desde php, hay alguna manera de quitar esto?
  #3 (permalink)  
Antiguo 25/11/2010, 20:00
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, 5 meses
Puntos: 2658
Respuesta: campos UTF8_general_ci

Estás confundiendo collation con charset. UTF-8 es un charset, y utf8_general_ci es una collation, que usa UTF-8 como charset. Además, eso no es la causa de tus problemas, porque el UTF-8 si incluye la posibilidad de caracteres cirílicos...

El problema es que le estás pifiando a la collation a usar. Lee un poco más de la documentación: 10.10.1. Conjuntos de caracteres Unicode, verás que incluso ni siquiera te conviene la que pretendes utilizar, sino más bien la utf8_unicode_ci, en todo caso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 26/11/2010, 07:58
 
Fecha de Ingreso: agosto-2010
Mensajes: 16
Antigüedad: 13 años, 8 meses
Puntos: 0
Respuesta: campos UTF8_general_ci

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Estás confundiendo collation con charset. UTF-8 es un charset, y utf8_general_ci es una collation, que usa UTF-8 como charset. Además, eso no es la causa de tus problemas, porque el UTF-8 si incluye la posibilidad de caracteres cirílicos...

El problema es que le estás pifiando a la collation a usar. Lee un poco más de la documentación: [URL="http://dev.mysql.com/doc/refman/5.0/es/charset-unicode-sets.html"]10.10.1. Conjuntos de caracteres Unicode[/URL], verás que incluso ni siquiera te conviene la que pretendes utilizar, sino más bien la utf8_unicode_ci, en todo caso.
Gracias por contestar, pero por desgracia no me sirve de ayuda; voy a explicar un poco más mi problema.

Estoy integrando el foro SMF a mi web ,el cual guarda los usuarios en MYSQL es una columna tipo UTF8_general_ci.

Por culpa de esta integración , tengo que guardar el nombre de usuario desde mi web , y me encuentro el problema que los registros de nombres en cirilico por ejemplo no funcionan.

He investigado más, y el problema radica en que SMF graba los nombres en su formato cirilico (o chino), mientras que cuando yo lo realizo a traves de la web con un INSERT , el nombre pasa a codificarse a formato UTF8

Mi pregunta es si existe alguna forma de hacer un INSERT en la tabla sin que me haga esa codificacion a UTF8
  #5 (permalink)  
Antiguo 26/11/2010, 08: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, 5 meses
Puntos: 2658
Respuesta: campos UTF8_general_ci

La respuesta se cae de madura: Si el utf8_general_ci que utiliza tu tabla usa (como lo dice el manual) el charset UTF-8, la única forma en que puede entrar un dato en ella correctamente es que ese dato esté previamente convertido a UTF-8, y no puede ser de otra forma porque ese es el charset que tiene definido tu tabla...
El problema lo debes atacar de una de las dos formas:
1) Realizas la conversión en tus script antes de enviar los datos a las tablas.
2) Realizas la conversión en el INSERT y también al leerlas con SELECT, a fin de obtener los datos correctamente.

Si tu problema es que los datos los estás leyendo y aparecen mal, debes primero ver si el error es de la interfase o de la base.

Para ejemplificarlo mejor: Yo uso PHP para enviar datos a una web, cuyos campos están definidos como latin1. Para poder guardarlos y recibirlos bien debo forzosamente usar funciones de conversión, porque el envío y recepción de los datos se hacen como XML con charset UTF-8...
Ahora bien, si no uso esas conversiones en el PHP cuando leo la tabla, cuando los datos se reciben los caracteres están mal, pero si los reviso directamente con el phpMyAdmin en la web, los caracteres están bien... ¿Están bien grabados o no? Están bien. El error esta en la aplicación, no en los datos.

En síntesis: A mi entender el problema no está en la estructura de la tabla ni en la definición de los campos (el UTF-8 soporta el cirílico). Yo sostengo que el problema está en la codificación que estás usando para enviarlos (la conexión portadora) y el modo de construir la inserción (la conversion en servidor).

Yo te sugiero que preguntes esos detalles en el Foro de PHP (PHP - Foros del Web ), porque ellos tratan con esos problemas más habitualmente.

Temas a revisar:

10.3.6. Conjunto de caracteres y colación de la conexión
10.5. Soporte Unicode

Si revisas estos temas, verás que la conexión de transporte afecta la codificación, y además que el UTF-8 si sioporta cirilico.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 26/11/2010 a las 08:57

Etiquetas: campos
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 11:18.