Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Inserire unix timestamp in campo varchar (14)

    Ciao, come da oggetto ho una tabella con un campo varchar (14), in cui provo ad inserire il tempo, indicato in MYSQL timestamp di inserimento del record.

    Uso varchar e non timestamp per evitare l'aggiornamento del record ad ogni operazione sulla riga, per inserirlo utilizzo NOW()*1 che dovrebbe restituire il valore senza il separatore "-".

    In realtà, noto che il valore restituito è il corretto timestamp di 14 cifre piu sei 0 decimali (ad esempio: 20071203221225.000000) e in fase di inserimento mi restituisce l'errore "Data too long for column"

    Come mai? come posso evitare l'errore inserendo NOW()*1 in query?
    Ciao!

  2. #2
    Aggiornamento!

    se inserisco il valore NOW()*1 in un campo timestamp, anche se uso appunto il *1 o il +0 il campo rimane con i divisori tra le cifre.

    e cioè "2007-12-03 22:25:24"

    Io voglio inserirlo senza, come devo fare?
    Ciao!

  3. #3
    Originariamente inviato da fmortara
    Aggiornamento!

    se inserisco il valore NOW()*1 in un campo timestamp, anche se uso appunto il *1 o il +0 il campo rimane con i divisori tra le cifre.

    e cioè "2007-12-03 22:25:24"

    Io voglio inserirlo senza, come devo fare?
    pastis & gateaux...

    metti il valore NOW() in un campo datetime e fregatene delle separazioni...... ma se vuoi un unix timestamp, che comunque si guarda bene dall'aggiornarsi in modo automatico sia questo che datetime, usa UNIX_TIMESTAMP() al posto di now e mettilo in un campo INT numerico.....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da piero.mac
    pastis & gateaux...

    metti il valore NOW() in un campo datetime e fregatene delle separazioni...... ma se vuoi un unix timestamp, che comunque si guarda bene dall'aggiornarsi in modo automatico sia questo che datetime, usa UNIX_TIMESTAMP() al posto di now e mettilo in un campo INT numerico.....
    Ciao Piero, (Sapevo avresti risposto tu! grazie!)

    se ho ben capito il campo timestamp di aggiorna ad ogni inserimento mentre il campo datetime no, e inoltre potrei usare il valore UNIX_TIMESTAMP() al posto di NOW() per inserirlo in un campo numerico (INT), giusto?

    ma i campi datetime e int sono poi validi per fare la sottrazione tra date?
    es. SELECT * FROM tabella WHERE campo > SUBDATE(NOW(), INTERVAL 1 DAY)?
    Ciao!

  5. #5
    Originariamente inviato da fmortara
    se ho ben capito il campo timestamp di aggiorna ad ogni inserimento mentre il campo datetime no, e inoltre potrei usare il valore UNIX_TIMESTAMP() al posto di NOW() per inserirlo in un campo numerico (INT), giusto?

    ma i campi datetime e int sono poi validi per fare la sottrazione tra date?
    es. SELECT * FROM tabella WHERE campo > SUBDATE(NOW(), INTERVAL 1 DAY)?
    devi fare un po di chiarezza... accendi la luce.

    unix timestamp e' un numero. datetime (inserito con now()) e' una data. Sono due valori diversi che "possono" anche dire la stessa cosa, ma la ragionano in modo totalmente diverso. Ci sono funzioni sia per il valore numerico che per il valore datatime. Per unix timestamp dato che si tratta di un numero puoi applicare tutto quello che si applica ad un numero. Per le date tutte le funzioni che gestiscono i dati temporali.

    quindi unix_timestamp() rende un numero e va messo in un campo INT (4 byte)
    NOW() rende una data/ora e va messo in campo DATETIME

    http://forum.html.it/forum/showthrea...hreadid=459634
    http://forum.html.it/forum/showthrea...hreadid=839754

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    devi fare un po di chiarezza... accendi la luce.

    unix timestamp e' un numero. datetime (inserito con now()) e' una data. Sono due valori diversi che "possono" anche dire la stessa cosa, ma la ragionano in modo totalmente diverso. Ci sono funzioni sia per il valore numerico che per il valore datatime. Per unix timestamp dato che si tratta di un numero puoi applicare tutto quello che si applica ad un numero. Per le date tutte le funzioni che gestiscono i dati temporali.

    quindi unix_timestamp() rende un numero e va messo in un campo INT (4 byte)
    NOW() rende una data/ora e va messo in campo DATETIME

    http://forum.html.it/forum/showthrea...hreadid=459634
    http://forum.html.it/forum/showthrea...hreadid=839754
    ALT!! Errore mio, intendevo MYSQL TIMESTAMP

    Piero scusa, ma ho visto solo ora il mio errore, chiedo ad un moderatore di editare l'errore!

    prova però a rispondere sostituendo mentalemte unix con MySQL...

    Grazie!
    Ciao!

  7. #7
    Originariamente inviato da fmortara
    ALT!! Errore mio, intendevo MYSQL TIMESTAMP

    Piero scusa, ma ho visto solo ora il mio errore, chiedo ad un moderatore di editare l'errore!

    prova però a rispondere sostituendo mentalemte unix con MySQL...

    Grazie!
    ci provo ma non ci riesco.

    il TIMESTAMP MYSQL e' cambiato di formato a partire da mysql 4.1.3

    ora il formato e' lo stesso del datetime e se lo metti in un campo varchar ti mette "tutto" quello che rende NOW() data/ora e millisecondi (finti perche' tutti a 0000).

    il campo timestamp si autoaggiorna quando fai un update che modifica un qualsiasi valore della tupla. Questo detto brevemente, perche' e' possibile avere piu' campi timestamp e far aggiornare quello che ti pare.

    Se ti serve una data/ora "storica", cioe' non aggiornabile se non per espressa volonta', usa un datetime che popolerai con NOW().

    Se ti serve solo una data usa un campo DATE che ignora le ore.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Perfetto, quello che io non sapevo era stà storia dei finti millisecondi! che poi, non sono millisecondi ma micro, visto che seono 6!

    in ogni caso, se inserisco un valore con NOW() ottendo tutto fino ai secondi, se lo inserisco con NOW()*1 (o NOW()+0) il campo rimane con i separatori e non come mi aspetto senza...

    questo nel campo datetime o timestamp, mentre se lo faccio in un campo varchar allora mi viene nel formato yyyymmaahhmmss.000000

    cavolo!

    il mio problema adesso è capire come mai il moltiplicatore non funziona per togliere i separatori nella stringa!
    Ciao!

  9. #9
    Originariamente inviato da fmortara
    Perfetto, quello che io non sapevo era stà storia dei finti millisecondi! che poi, non sono millisecondi ma micro, visto che seono 6!

    in ogni caso, se inserisco un valore con NOW() ottendo tutto fino ai secondi, se lo inserisco con NOW()*1 (o NOW()+0) il campo rimane con i separatori e non come mi aspetto senza...

    questo nel campo datetime o timestamp, mentre se lo faccio in un campo varchar allora mi viene nel formato yyyymmaahhmmss.000000

    cavolo!

    il mio problema adesso è capire come mai il moltiplicatore non funziona per togliere i separatori nella stringa!
    se tu fossi a Milano ti darebbero del pirla....

    se metti una data in un campo che gestisce delle date mysql la mettera' sempre nel formato previsto con il divisore anche se gliela passi senza. Mettila in un campo BIGINT che ti tagli i decimali... ma sinceramente... perche' non la lasci come diavolo te la rende? cos'e' che ti da fastidio?

    quello e' un formato ANSI/ISO http://homepages.ihug.co.nz/~jedward.../ANSIDate.html

    al limite lo puoi convertire al momento dell'uso.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    ok, grazie per il pirla! Avrei preferito che mi dessi del Pirlo, ma comunque...


    Sei sicuro che in qualche vecchia versione NOW()*1 non venisse reso in yyyymmddhhmmss?
    mi pareva di ricordarmelo...

    cmq, il tutto nasce dal fatto che il cmio mysql non mi faceva inserire il dato in un campo varchar(14), ho imparato una cosa nuova...

    Grazie mille Piero!
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.