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

    La query restituisce risultati sbagliati

    Salve a tutti. Nel mio database Mysql se Faccio questa query
    codice:
    SELECT * FROM tabella WHERE colonna LIKE j%
    il database mi restituisce gli stessi risultati che ottengo mettendo al posto della 'j' la 'i'.
    come mai succede ciò?
    se per esempio ho un record che contiene 'isola' mi viene mostrato anche con la query sopraindicata.

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    In quella query mancano gli apici ma immagino sia una svista.
    Puoi postare l'output di

    show create table tabella;

    ?

  3. #3
    si gli apici sono una svista.
    ho fatto come mi hai detto lanciando la query da phpmyadmin e il risultato è queto:
    codice:
    rb_nonni 	CREATE TABLE `rb_nonni` (
     `ID` int(11) NOT NULL AUTO_INCREMENT,
     `nome` varchar(50) COLLATE utf8_roman_ci NOT NULL,
     `cognome` varchar(50) COLLATE utf8_roman_ci NOT NULL,
     `via` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `n%C2%B0` varchar(10) COLLATE utf8_roman_ci DEFAULT NULL,
     `citt%E0` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `cap` varchar(5) COLLATE utf8_roman_ci DEFAULT NULL,
     `provincia` varchar(2) COLLATE utf8_roman_ci DEFAULT NULL,
     `telefono` varchar(15) COLLATE utf8_roman_ci DEFAULT NULL,
     `cellulare` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `m%E0` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `l%E0+l%E0` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `ambulatorio` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `vetto` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `studio` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     `telefono2` varchar(50) COLLATE utf8_roman_ci DEFAULT NULL,
     PRIMARY KEY (`ID`)
    ) ENGINE=MyISAM AUTO_INCREMENT=133 DEFAULT CHARSET=utf8 COLLATE=utf8_roman_ci
    dove 'rb_nonni' è il nome della tabella.

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Il campo su cui fai la ricerca qual'è?

  5. #5
    ho provato sia su 'nome' sia su 'cognome'

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Come immaginavo è un problema di collation.

    Usa utf8_general_ci

    codice:
    select * from rb_nonni where nome like 'j%'
    Questa query in effetti restituisce sia i record che iniziano con i che con j.

    Se invece modifichi la query in

    codice:
    select * from rb_nonni where nome like 'j%' collate utf8_general_ci
    il risultato è quello atteso.
    Evita inoltre gli accenti nei nomi dei campi. (es. `citt%E0`)
    chiamalo citta.

  7. #7
    grazie mille così funziona... già che ci sono ti chiedo anche se per risolvere oltre ad aggiungere COLLATE in ogni query se c'è un altro metodo... per esempio cambiare qualcosa quando creo le colonne della tabella

  8. #8
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    detto tra di noi, inoltre, hai campi che non possono essere utf8, e che quindi stai inutilmente "ingrandendo" (di parecchio), come ad esempio il numero di telefono etc.

    può essere significativo o no, a seconda delle circostanze, ma così "a occhio" stai sprecando utf invece del più banale latin1 (o meglio, ci si può riflettere sopra)

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2011
    Messaggi
    1,469
    Originariamente inviato da pippomuzzo
    grazie mille così funziona... già che ci sono ti chiedo anche se per risolvere oltre ad aggiungere COLLATE in ogni query se c'è un altro metodo... per esempio cambiare qualcosa quando creo le colonne della tabella
    alteri la tabella

  10. #10
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,922
    Originariamente inviato da pippomuzzo
    grazie mille così funziona... già che ci sono ti chiedo anche se per risolvere oltre ad aggiungere COLLATE in ogni query se c'è un altro metodo... per esempio cambiare qualcosa quando creo le colonne della tabella
    Ti ha già risposto franzauker.
    Il mio era solo un esempio su come "forzare" l'individuazione dei record corretti partendo dalla struttura che hai.
    Cambia a monte le collation.

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.