Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554

    [Mysql] operatore uguale stranezza

    Ciao a tutti,
    perchè se faccio una query
    select id from utenti where id='3f2c608b3ba0e51895d9317c486d6f79'
    ottengo un record quando il valore di id nella tabella è 3 e id è un smallint(5), unsigned, not null ed è anche la chiave primaria?

    ho osservato che viene confrontato il 3 con il primo 3 della stringa, nel senso che se la query è
    select id from utenti where id='f2c608b3ba0e51895d9317c486d6f79' non restituisce nessun record.

    Come posso fare?
    Vivrò una vita intera e fortunatamente morirò una volta sola

  2. #2
    Ciao,
    ti rispondo con una domanda.

    Se il campo ID per impostazione può assumere solo valori numerici, che senso ha eseguire una query di cui già conosci il risultato quanso il valore che ricerchi non è numerico?
    Full Stack Developer presso Advice Lab
    Bonus Bitcoin
    Moon Bitcoin

  3. #3
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Originariamente inviato da Magicale
    Ciao,
    ti rispondo con una domanda.

    Se il campo ID per impostazione può assumere solo valori numerici, che senso ha eseguire una query di cui già conosci il risultato quanso il valore che ricerchi non è numerico?
    nessuno, ma io volevo capire perche Mysql considera 3 uguale a 3f2c608b3ba0e51895d9317c486d6f79 e se c'è un sistema a livello di mysql di non incappare nell'errore
    Vivrò una vita intera e fortunatamente morirò una volta sola

  4. #4
    Il sistema c'è: non inserire stringhe all'interno di una SMALLINT e soprattutto non usare gli apici per i valori numerici nella stringa SQL.

    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  5. #5
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Originariamente inviato da alcio74
    Il sistema c'è: non inserire stringhe all'interno di una SMALLINT
    ma è una select io non inserisco nulla ??
    Vivrò una vita intera e fortunatamente morirò una volta sola

  6. #6
    Dovrebbe tradurla come:
    3 = (int) 3f
    se la colonna è smallint taglia la stringa al primo valore non numerico visto che dopo il primo 3 c'è una 'f' lui taglia la stringa al primo 3

  7. #7
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    Originariamente inviato da n0t
    Dovrebbe tradurla come:
    3 = (int) 3f
    se la colonna è smallint taglia la stringa al primo valore non numerico visto che dopo il primo 3 c'è una 'f' lui taglia la stringa al primo 3
    Questa è la spiegazione che preferisco.
    Grazie a tutti.
    Vivrò una vita intera e fortunatamente morirò una volta sola

  8. #8
    Originariamente inviato da pyotrex
    Questa è la spiegazione che preferisco.
    Grazie a tutti.
    A prescindere dal tuo gusto personale nello scegliere le risposte e a prescindere dal fatto che si stia parlando di una query di SELECT, io volevo dirti che se tu in una strringa SQL vai a scrivere ID = '3hdfjdf", dove nella colonna ID possono essere segnati solo SMALLINT, comunque la query non ti restituirà nessun risultato utile.
    <ALCIO />
    Per cortesia: no PVT Tecnici
    ******* LINKS *******
    SRL
    MetalWave

  9. #9
    Utente di HTML.it L'avatar di pyotrex
    Registrato dal
    Feb 2003
    Messaggi
    554
    A prescindere dal tuo gusto personale nello scegliere le risposte
    quelle + coerenti con la domanda

    e a prescindere dal fatto che si stia parlando di una query di SELECT, io volevo dirti che se tu in una strringa SQL vai a scrivere ID = '3hdfjdf", dove nella colonna ID possono essere segnati solo SMALLINT, comunque la query non ti restituirà nessun risultato utile.
    il punto è che essendo una select e non sapendo il tipo di dato con cui vado a confrontare l'id ero convinto che se non era dello stesso tipo non mi restituisse nessun record invece non accade proprio questo, molto probabilmente per il motivo "supposto" da n0t

    Dovrebbe tradurla come:
    3 = (int) 3f
    se la colonna è smallint taglia la stringa al primo valore non numerico visto che dopo il primo 3 c'è una 'f' lui taglia la stringa al primo 3
    e intuito da me

    ho osservato che viene confrontato il 3 con il primo 3 della stringa, nel senso che se la query è
    select id from utenti where id='f2c608b3ba0e51895d9317c486d6f79' non restituisce nessun record.
    Vivrò una vita intera e fortunatamente morirò una volta sola

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 © 2025 vBulletin Solutions, Inc. All rights reserved.