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
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.
Hice el cambio de collation, el problema me sigue. El texto a la hora de insertarlo lo tengo dentro de comillas simple.
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.
Se la tengo asignada a la tabla no al campo.
Puedes pegar un ejemplo de la sql? con datos no reales.
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.
En los tres lugares esta la misma colección. spanish
-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?
Si y los datos se me imprimen bien y no estoy usando ningún framework sino php puro con mysql.
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.
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.
Cita de: 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.
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.
Este es el código del Insert.
function insert($descrip){
$sql ="INSERT INTO tabla (descrip) values '".$descrip."'";
$insertResult = mysql_query($sql) or die (mysql_error());
return $insertResult;
}
Lo que Ud. me dice que si es script esta en UTF-8 también.
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.
Cita de: yoelrodguez en 23 Junio 2015, 18:15 PM
Lo que Ud. me dice que si es script esta en UTF-8 también.
Exacto. Mira a ver si es eso.
Cita de: yoelrodguez en 23 Junio 2015, 18:12 PM
Este es el código del Insert.
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.
Revise lo que Ud. me dijo si esta en utf-8 solamente.
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.
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