Domanda

Appena ricevuto questa risposta da una domanda precedente e funziona a meraviglia!

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount 
FROM ratings WHERE month='Aug' GROUP BY username HAVING TheCount > 4
ORDER BY TheAverage DESC, TheCount DESC

Ma quando mi attengo questo qualcosa in più in esso dà questo errore:

  

Documentazione # 1267 - Illegal mix di   Le regole di confronto   (Latin1_swedish_ci, implicito) e   (Latin1_general_ci, implicita) per   operazione '='

SELECT username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM 
ratings WHERE month='Aug' 
**AND username IN (SELECT username FROM users WHERE gender =1)**
GROUP BY username HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC

Il tavolo è:

id, username, rating, month

È stato utile?

Soluzione

Controllare il tipo di confronto di ogni tabella, e assicurarsi che essi hanno la stesse regole di confronto.

Dopo che il check anche il tipo di confronto di ciascun campo tabella che si dispone di utilizzare in funzione.

che avevo incontrato lo stesso errore, e che funziona trucchi su di me.

Altri suggerimenti

Ecco come verificare quali colonne sono le regole di confronto sbagliato:

SELECT table_schema, table_name, column_name, character_set_name, collation_name

FROM information_schema.columns

WHERE collation_name = 'latin1_general_ci'

ORDER BY table_schema, table_name,ordinal_position; 

Ed ecco la query per risolvere il problema:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET latin1 COLLATE 'latin1_swedish_ci';

link

[MySQL]

In questi (molto rari) casi:

  • due tabelle che realmente hanno bisogno di diversi tipi di confronto
  • I valori non provenienti da un tavolo, ma da un'enumerazione esplicita, per esempio:

    SELEZIONARE 1 AS numeri UNION ALL SELEZIONA 2 UNION ALL SELEZIONA 3

è possibile confrontare i valori tra le diverse tabelle utilizzando CAST o convertire:

CAST('my text' AS CHAR CHARACTER SET utf8)

CONVERT('my text' USING utf8)

convertire e CAST documentazione sul sito di MySQL .

mi è stato sempre lo stesso errore su phpMyAdmin e ho la soluzione, qui, che ha lavorato per me

ALTER TABLE table CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci

illegale mix di regole di confronto di MySQL Error Anche io consiglierei di andare con il generale al posto dello svedese dal momento che uno è predefinita e non usare la lingua a meno che l'applicazione utilizza svedese.

Credo che si dovrebbe convertire in utf8

--set utf8 for connection
SET collation_connection = 'utf8_general_ci'
--change CHARACTER SET of DB to utf8
ALTER DATABASE dbName CHARACTER SET utf8 COLLATE utf8_general_ci
--change CHARACTER SET of table to utf8
ALTER TABLE tableName CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci
  • Verificare che la vostra colonna users.gender è un numero intero.
  • Prova: alter table users convert to character set latin1 collate latin1_swedish_ci;

È necessario modificare ogni colonna regole di confronto da latin1_general_ci a latin1_swedish_ci

ho ottenuto questo stesso errore all'interno di una stored procedure, nella clausola WHERE. ho scoperto che il problema occurred con una variabile dichiarata locale, precedentemente caricato dallo stesso tavolo / colonna.

ho risolto che la fusione dei dati per singolo tipo char.

In breve, questo errore è causato da MySQL cercando di fare un'operazione su due cose che hanno diverse impostazioni di confronto. Se si effettua la partita impostazioni, l'errore andrà via. Naturalmente, è necessario scegliere il giusto setting per il database, a seconda di ciò che sta per essere utilizzato per.

Ecco qualche buon consiglio su come scegliere tra due regole di confronto di utf8 molto comuni: Qual è la differenza tra utf8_general_ci e utf8_unicode_ci

Se si sta usando phpMyAdmin è possibile farlo in modo sistematico, lavorando attraverso le tabelle indicate nel messaggio di errore, e controllando il tipo di confronto per ogni colonna. In primo luogo si dovrebbe verificare che è il confronto complessiva impostazione per il database - phpMyAdmin può dire questo e cambiarlo se necessario. Ma ogni colonna in ogni tabella può avere la propria impostazione. Normalmente si vuole tutto questo a partita.

In un piccolo database questo è abbastanza facile da fare a mano, e in ogni caso se si legge il messaggio di errore in piena che di solito si punta al posto giusto. Non dimenticate di guardare le impostazioni di 'struttura' per le colonne con sottotabelle in pure. Quando si trova un confronto che non corrisponde si può cambiare usando direttamente phpMyAdmin, non c'è bisogno di usare la finestra di query. Quindi provare di nuovo l'operazione. Se l'errore persiste, continuate a cercare!

Il problema qui principalmente, proprio nei sondaggi il campo come questo cast (campo come varchar) o ghisa (campi come data)

Inoltre ho ottenuto lo stesso errore, ma nel mio caso problema principale era in dove le condizioni del parametro che sto controllando stava avendo qualche personaggio nascosto sconosciuto ( +% A0 )

Quando A0 convertire ho ottenuto 160 ma 160 era fuori dalla portata del personaggio che db sa, è per questo database non può riconosce come personaggio altra cosa è il mio tavolo colonna è varchar

  • la soluzione che ho fatto è stato ho controllato ci sono alcuni personaggi del genere e rimuovere quelli prima eseguire il comando SQL

  • es: - preg_replace ( '/ \ D /', '', $ myParameter);

SELECT  username, AVG(rating) as TheAverage, COUNT(*) as TheCount
FROM    ratings
        WHERE month='Aug'
        AND username COLLATE latin1_general_ci IN
        (
        SELECT  username
        FROM    users
        WHERE   gender = 1
        )
GROUP BY
        username
HAVING
        TheCount > 4
ORDER BY
        TheAverage DESC, TheCount DESC;

Usa ascii_bin dove mai possibile, sarà abbinare con quasi tutti i collazione. Un nome utente accetta raramente i caratteri speciali in ogni caso.

Se si vuole evitare di modificare la sintassi per risolvere questo problema, provate questo:

Aggiorna il tuo MySQL alla versione 5.5 o superiore.

Questo risolto il problema per me.

Ho lo stesso problema con avviso di raccolta per un campo che è impostato da 0 a 1. Tutte le collezioni Colonne era lo stesso. Cerchiamo di cambiare di nuovo le collezioni, ma niente di risolvere questo problema.

Alla fine si aggiorna il campo per NULL e dopo che aggiorniamo a 1 e questo supera il problema di raccolta.

È necessario impostare 'utf8' per tutti i parametri di ogni funzione. E 'il mio caso:

entrare descrizione dell'immagine qui

HAvING TheCount > 4 AND username IN (SELECT username FROM users WHERE gender=1)

, ma il motivo per cui sto rispondendo, mi dont votato come risposta giusta:)

Assicurati che la versione di MySQL supporta subquery (4.1+). Successivamente, si potrebbe provare a riscrivere la query a qualcosa di simile:

SELECT ratings.username, (SUM(rating)/COUNT(*)) as TheAverage, Count(*) as TheCount FROM ratings, users 
WHERE ratings.month='Aug' and ratings.username = users.username
AND users.gender = 1
GROUP BY ratings.username
HAVING TheCount > 4 ORDER BY TheAverage DESC, TheCount DESC
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top