Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: yoelrodguez en 23 Junio 2015, 17:13 pm



Título: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:13 pm
Hola a todos:

Estoy tratando de insertar una cadena  de texto que estoy leyendo de un fichero de exel con php, la cual contiene acentos.  El campo donde estoy insertando los datos es un campo Text de longitud 0 para que sea ilimitado ya que la cadena puede variar su longitud, el  character set de la tabla es UTF-8 con la colletion general.

Lo que me está sucediendo que cuando hago el insert de los datos, la cadena de texto  se me corta, al primer acento que aparece. Quedando incompleta en el campo de la base de datos. 

Cambie el tipo de character set a latin1 y problema me persiste, también ice un debug y en la variable donde se almacenan los datos,  para el insert no está cortada ni tiene caracteres raro.

Saludos


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 17:21 pm
Hola.

Si tratarás solo textos en Español lo mejor es poner la collation utf8_spanish_ci, que además tendrá la ñ y la ç.
Recuerda también cuando insertes con la SQL meter el valor entre comillas simples ( ' ).

Suerte.


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:33 pm
Hice el cambio de collation, el problema me sigue. El texto a la hora de insertarlo lo tengo dentro de comillas simple.


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 17:37 pm
El collation lo tienes asignado a la base de datos, la tabla o al campo? Revisa los 3 porque peude que tengas una collaction distinta en cada uno.


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:38 pm
Se la tengo asignada a la tabla no al campo.


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 17:40 pm
Puedes pegar un ejemplo de la sql? con datos no reales.


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:45 pm
Este es el ejemplo de la cadena de texto.

(Abono por cobranza Sucursal: 999 Referencia Númerica: EM00000000  Referencia Alfanúmerica: Autorización: 0000000)

Solo se me inserta hasta la N de numérica.

Voy a revisar lo que me dice de la collation en toda la base de datos.



Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:48 pm
En los tres lugares esta la misma colección.  spanish


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 17:52 pm
-Dices que has hecho un var_dump del valor justo antes de insertarlo? Sale todo correcto?

-Usas algún framework que haga filtrado o algún tipo de filtrado de carácteres antes de la inserción?

-En el caso de que no uses framework, usas mysql o mysqli?


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 17:54 pm
Si y los datos se me imprimen bien y no estoy usando ningún framework sino php puro con mysql.


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 17:58 pm
Supongo que no filtras los datos. Pero estoy seguro de que el fallo no está en las collation.

Prueba con utf8_unicode_ci pero de todas formas debería de irte con spanish, prueba con el utf8_spanish2_ci también, pero es my raro, no creo que sea eso.
Cuando cambies asegurate de cambiar el campo, así seguro que se aplica esa collation.

Aparte de eso si no veo código poco puedo hacer ya.

Suerte.


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 18:02 pm
En otras páginas que he visto en internet se dice que se pase el valor de la variable por utf8-encode pero cuando lo hago el contenido se me muestra mal.


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 18:09 pm
En otras páginas que he visto en internet se dice que se pase el valor de la variable por utf8-encode pero cuando lo hago el contenido se me muestra mal.
Si eso es porque se codifican los carácteres "extraños".

Una cosa, a veces me ha pasado, no muchas, que con problemas de carácteres ha resultado ser al final el fichero que lleva la programación, en este caso php, que lleva una codificacioón no completa. Hay programas para revisarlo, ahora mismo no se cual porque hace mucho tiempo que no me pasa. Pero puede que sea eso.


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 18:12 pm
Este es el código del Insert.

Código:

function insert($descrip){
$sql ="INSERT INTO tabla (descrip) values '".$descrip."'";
$insertResult = mysql_query($sql) or die (mysql_error());
return $insertResult;
}



Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 18:15 pm
Lo que Ud. me dice que si es script esta en UTF-8 también.   


Título: Re: Problema de inserat acentos en mysql
Publicado por: moikano→@ en 23 Junio 2015, 18:16 pm
Has mirado la codificación de carácteres del fichero? Es decir, si el mismo fichero php está codificado en unicode, ascii,... en tu editor de textos puede que salga. Aunque también, cuando hay problemas en el fichero, se ve mal en el propio editor de texto.

Lo que Ud. me dice que si es script esta en UTF-8 también.  

Exacto. Mira a ver si es eso.


Este es el código del Insert.

Código:

function insert($descrip){
$sql ="INSERT INTO tabla (descrip) values '".$descrip."'";
$insertResult = mysql_query($sql) or die (mysql_error());
return $insertResult;
}


Ese código lo veo que no afecta. El resto ya no se si tendrá que ver con el el problema.



Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 18:19 pm
Revise lo que Ud. me dijo si esta en utf-8 solamente. 


Título: Re: Problema de inserat acentos en mysql
Publicado por: yoelrodguez en 23 Junio 2015, 18:31 pm
Hice lo siguiente, pase el valor de la variable por utf8_encode que lo que me devuelve es un string. El cual se me imprime mal a la hora de mostrar el contenido de la variable pero continúe el proceso del insert, a ver si no se me cortaba en la base de datos.  Para mi sorpresa se me inserto bien, no se me corto el texto en la N como antes.


Título: Re: Problema de inserat acentos en mysql
Publicado por: WHK en 27 Junio 2015, 20:10 pm
Ese no es problema de la base de datos, intenta hacer el insert y el select desde el terminal y verás que tengo razón ya que una base de datos utf8_* debería soportar caracteres especiales latinos.

Tu problema está en el script que muestra el valor que guardaste o el que guarda el valor escrito, recuerda que no basta solamente con tener un archivo con codificación utf8, es necesario establecer cabeceras de tipo header http y html. O si no puede ser que tu conexión a la base de datos no sea por defecto utf-8 (eso pasa cuando instalas distribuciones en español):

https://foro.elhacker.net/desarrollo_web/inquietud_por_que_utf8_no_exporta_tildes_y_iso88591_si-t420426.0.html;msg1962508#msg1962508