2012-11-20 17 views
7

Ho un problema estremamente strano, che mi fa impazzire per tutto il giorno. Ho una semplice tabella MySQL con poche colonne. Una colonna è int (11) NULL. Quando aggiorno il suo valore, funziona come previsto. Tuttavia, quando aggiorno il suo valore per la seconda volta, viene assegnato il valore "0".MySQL aggiorna erroneamente la colonna integer quando viene aggiornata la seconda volta

Ho provato questo stesso comportamento sul mio MySQL 5.1.58-1ubuntu1 e su altra comunità MySQL 5.0.96 ed entrambi si comportano esattamente allo stesso modo. Quindi apparentemente non è un problema di una versione di MySQL.

È difficile per me spiegare, ma ho allegato 2 schermate che ti diranno molto meglio dove è il meglio.

primo screenshot è la struttura del mio tavolo sto aggiornando:

table structure

E qui viene mostrato query SQL beeing eseguito, dove si può vedere, che il primo aggiornamento è corretta e il secondo produce "0" valore nella colonna "INVOICE_NUMBER" senza alcun motivo:

enter image description here

Am I si affaccia qualcosa di ovvio? Si spinge veramente mi fa impazzire, perché non ha alcun senso per me ...

Grazie per qualsiasi aiuto in anticipo ...

EDIT: Ho provato con solo i numeri nelle mie query e questo è risultato (molto strano anche per me):

enter image description here

+2

'+ 1' per weirdiness: D –

+0

+1 per strano problema, il che mi fa impazzire tutti day..I so questa sensazione –

+2

Perché stai specificando le stringhe nel tuo codice? ''35'' è una stringa e' 35' è un numero. Perché non stai facendo '= 35 WHERE id = 55'? – MatBailie

risposta

0

Ok, finalmente l'ho capito. Il problema era da qualche altra parte, non in MySQL stesso. Ho copiato tutte quelle query SQL mostrate nella mia domanda dal log delle query di MySQL, quindi non ho mai sospettato che potesse esserci qualcosa di strano. Tuttavia, all'inizio del valore "35" c'era il segno di ordine UTF-8 Byte (EF BB BF), che ovviamente non era visibile.

La prima query di aggiornamento ha avuto origine da una posizione diversa della mia app e il suo valore "30" era solo stringa (2). Ma quando ho fatto var_dump su valori nella seconda query, ho notato che "35" è in realtà string (5). Questo valore proviene dalla chiamata $ .get() di jQuery e aveva questo BOM allegato ad esso ...

Due giorni di vita trascorsi in un tale "invisibile" ...

2

questa non è una risposta, ma i commenti sono sempre affollati. Il comportamento che mostri indica qualche tipo di problema, tuttavia più probabile nello strumento che stai utilizzando per interfacciare il database piuttosto che nel database.

Il problema con le virgolette singole è un'aringa rossa (vale a dire la distrazione). Anche se "55" fosse interpretato diversamente da 55, sarebbe interpretato allo stesso modo nell'istruzione where. Inoltre, "35" funzionava ma "30" no.

Un'intuizione chiave è l'errore quando si rimuovono le virgolette. La dichiarazione:

update i_orders 
    set invoice_number = 30 
    where id = 55 

non dovrebbe essere alla ricerca di un indice di colonna per 30. L'errore colonna di sconosciuto che state vedendo suggerisce che la query inviata al database non è quella che si vede nello strumento.

È possibile registrare le query nel database per vedere cosa viene effettivamente inviato?

+0

Le query di registrazione sono esattamente ciò che ho fatto quando stavo impazzendo oggi. secondo screenshot sono esattamente le linee copiate dal log MySQL – Frodik

+0

Il problema intero è più curioso: MySQL non dovrebbe cercare un riferimento di colonna nell'istruzione 'set'. sembra che appartenga al nome della tabella in un inserto. Non vedo come analizzare la tua query per ottenere quell'errore. Né perché la stringa non causerebbe questo problema. –

Problemi correlati