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

longtext se llena 1,023 KB y se empieza a borrar.

Estas en el tema de longtext se llena 1,023 KB y se empieza a borrar. en el foro de Mysql en Foros del Web. Hola. Estoy haciendo una aplicación por la cual subo un archivo binario. La informacion la subo cada 1000 caracteres, y la voy concadenando. Todo funciona ...
  #1 (permalink)  
Antiguo 30/12/2012, 20:42
 
Fecha de Ingreso: enero-2007
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
longtext se llena 1,023 KB y se empieza a borrar.

Hola.
Estoy haciendo una aplicación por la cual subo un archivo binario.
La informacion la subo cada 1000 caracteres, y la voy concadenando. Todo funciona bien, mientras voy chequeando la DB, veo como el tamaño va aumentando y efectivamente si veo el registro veo como se va llenando.
El problema surge que al alcanzar lo siguiente:

Espacio utilizado
Tipo Uso
Datos 1,023 KB

Se empieza a borrar la informacion y la sobrescribe con la nueva, y en la tabla de espacio utilizado aparecen 2 nuevas cosas:

Índice 2,048 Bytes
Residuo a depurar 929,988 Bytes
Efectivo/a 120,096 Bytes
Total 1,025 KB

Efectivo y residuo a depurar, a medida que aumenta el efectivo el residuoa depurar disminuye, hasta que el efectivo llega a 999 bytes, momento en el cual todo pasa a residuo a depurar.
En fin lo que entiendo que es mi base de datos solo me esta pudiendo almacenar 1,023 KB.
El campo es:
longtext No nulo.

Muchas gracias
  #2 (permalink)  
Antiguo 30/12/2012, 22:25
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

En primer lugar haznos el favor de postear el CREATE TABLE de esa tabla. Necesitamos verificar eso antes de dato una opinión concreta, porque algunas causas tienen que ver precisamente con eso.
Nota: La descripción genérica no sirve. Necesitamos el CREATE TABLE.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 30/12/2012, 22:28
 
Fecha de Ingreso: enero-2007
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

Hola, este es el original:

Código MySQL:
Ver original
  1. CREATE TABLE shell_".$mac." (
  2.     id int,
  3.     mac varchar(50),
  4.     command varchar(200),
  5.     answer longtext,
  6.     date DATETIME,
  7.     finished boolean,
  8.     showed boolean,
  9.     PRIMARY KEY (id));

Probe manualmente poniendo el longtext en not null y lo mismo, tambien probe pasandolo a otro tipo de datos.

Gracias

Edito:

Aca pongo la imagen para que se entienda.

Asi es como termina mi base de datos luego de almacenar completamente todo lo deseado.



Lo que yo digo es que en un comienzo "Residuo a derpurar" y "Efectivo" no aparecen.
Mientras se empieza a cargar "Datos" solo existe datos indice y total.
Una vez que "Datos" alcanza 1,023 KB, ahi aparece "Residuos a depurar" y "Efectivo" y ahi es que se me borra todo el contenido de "answer"

Última edición por gnzsoloyo; 31/12/2012 a las 05:52 Razón: Codigo PHP en SQL
  #4 (permalink)  
Antiguo 31/12/2012, 05:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

Bueno, dos consideraciones:
1) Lo que el phpMyadmin informa, y los datos que realmente la base tiene son cosas... levemente diferentes.
Para que quede un poquito más claro: los datos no se almacenan en los archivos de las tablas, por lo que en realidad lo que hay que analizar es la longitud del dato en una consulta, y no lo que reporta el resumen de las tablas.
2) Crear dinámicamente tablas es una muy mala, espantosa idea.
Las bases de datos se definen como estructuras fijas, no se deben cambiar dinámicamente porque eso sólo traerá enormes dolores de cabeza en muy poco tiempo. Lo que se debe hacer es diseñar la base de modo que sea capaz de administrar los requerimientos de datos que puedan producirse en un plazo mínimo de cinco años.
Este es un tema recurrente, pero desde ya te digo que estás empezando mal el tema, y si buscas un poco en el foro, verás que lo hemos tratado muchísimas veces.

Volviendo a lo centra, lo que debes hacer, si quieres ver si están o no todos los datos es medir la longitud de datos almacenados en ese campo en la tabla.
Algo como:
Código MySQL:
Ver original
  1. SELECT ID, LENGTH(answer) TotalBytes
  2. FROM tabla

Tip: No uses palabras en inglés para los nombres de bases, tablas o columnas. Tarde o temprano terminarás poniendo una palabra clave que provocará un error de sintaxis indetectable (como por ejemplo: long, date, data, password, user, etc.)
__________________
¿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 31/12/2012, 13:09
 
Fecha de Ingreso: enero-2007
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

Gracias por la informacion y los tips.
De todas maneras ya sabia que la informacion NO estaba guardada, ya que justamente al recuperarla (lo que estoy haciendo es un subir el contenido de archivos, ya se de texto, jpg, exe, para despues volcarlos a la pc) los archivos salen corrompidos y sin el tamaño esperado.
Igual pongo el resultado de la consulta a continuacion:

Id
7115
TotalBytes
0

Es decir, la cantidad total de bytes es 0.

Acabo de probar en vez de subir la informacion por php, hacerlo directamente llamando las consultas desde c# y es lo mismo.

Última edición por krosty4782; 31/12/2012 a las 13:39
  #6 (permalink)  
Antiguo 31/12/2012, 15:08
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

Cita:
De todas maneras ya sabia que la informacion NO estaba guardada, ya que justamente al recuperarla (lo que estoy haciendo es un subir el contenido de archivos, ya se de texto, jpg, exe, para despues volcarlos a la pc) los archivos salen corrompidos y sin el tamaño esperado.
Me parece que no has entendido: Ninguna información se guarda en los archivos de las tablas.
Los datos se guardan en archivos .idb, mientras que en los archivos frm, por ejemplo, se almacenan estructuras de tablas y alguna otra información, pero no los datos.
Por otro lado, viendo que intentas almacenar archivos de imagen y ejecutables, desde ya te digo que un LONGTEXT no se usa para eso. En todo caso se almacenan en BLOB, pero por practicidad, todo archivo de ese tipo se almacena en el hosting y en las tablas sólo los nombres de los archivos y las rutas en el site.
¿Se entiende?
No se aconseja almacenar imagenes, ejecutables o documentos en una tabla.

Ahora bien, por lo que describes, tengo la impresión de que el problema de truncamiento de datos puede estar dandose en dos circunstancias: 1) El buffer de datos es insuficiente para subir los archivos a la tabla, o 2) el método usado para subir el archivo a la tabla en tus scripts no es correcto y se genera el truncado de datos.
En cualquiera de los dos casos mi consejo es que cortes por lo sano y pongas los archivos en una carpeta del servidos y sólo guardes las rutas y los nombres en las tablas.
__________________
¿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; 31/12/2012 a las 15:16
  #7 (permalink)  
Antiguo 31/12/2012, 16:04
 
Fecha de Ingreso: enero-2007
Mensajes: 12
Antigüedad: 17 años, 10 meses
Puntos: 0
Respuesta: longtext se llena 1,023 KB y se empieza a borrar.

Explico lo que hago:

Abro un archivo lo codifico a base 64 y cada 1000 caracteres lo envio, esto lo hago hasta que el total del archivo se almace no en la base de datos.
El buffer es de 1000 caracteres.
Una vez almacenado todo en la base de datos, recupero la informacion la decodifico y la vuelco, luego borro toda la informacion de la base de datos.

Por ejemplo, este es el contenido de un fichero de texto codificado:

Cita:
MjgvMDcvMjAxMiAwMzozOTowMSBwLm0uDQoNCi0tLS0tLS0tLU stWi1ILUEtQy1LLUUtUi0tLS0t LS0tLS0NCg0KDQoNClsgS2V5bG9nZ2VyIDIwMTIgQnkgW0t6XS BIYWNrZXIgXQ0KIFtGOV0gDQoN
(continua pero para dar un ejemplo). Esto mismo es lo que yo estoy subiendo a la BD, son caracteres, por eso use longtext.

Una vez terminado de subir todo (como dije antes lo subo cada 1000 caracteres), obtengo la informacion y creo el archivo, luego elimino todo el contenido de la BD.
Uso UPDATE y concat para ir encadenando los archivos. El tema como explico antes es que dada una cantidad de archivos concadenados, la informacion desaparece y se empieza a sobreescribir (esto me dice que es un problema de la base de datos, ya que si encadeno menos informacion, esta es almacenada), si el campo esta en NULL, este directamente se trunca a NULL, si el campo es not null, se guarda solo la ultima porcion de informacion que quedo guardada luego de la sobrescritura (esta sobrescritura puede suceder varias veces en la carga de un fichero completo, dependiendo el tamaño del mismo). Tambien probe usando BLOB, pero no anda.


Cita:
1) El buffer de datos es insuficiente para subir los archivos a la tabla
No, ya que el buffer es pequeño y se mandan muchas consultas de update, inclusive se puede ir viendo como la informacion se va actualizando hasta que llega un punto que se soobrescribe o se trunca a null.

Cita:
2) el método usado para subir el archivo a la tabla en tus scripts no es correcto y se genera el truncado de datos.
No se bien a que te referis con esto.
Pero lo que hago es updatear y concadenar hasta que mando el ultimo paquete con informacion.

Gracias

Etiquetas: empieza, tabla, 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 18:48.