Rispondo in lista, è argomento di comune interesse.
Il giorno 24/mar/09, alle ore 11:19, Cristiano Ferrari ha scritto:
una Vista ad hoc, da quando ho aggiunto la clausola
IF(regione<>@prev_r, regione, '') mi restituisce questo errore:
Database error: Invalid SQL: SELECT IF(regione<>@prev_r, regione,
'') AS regione_formattata, title, numerofax, prefissotel,
@prev_r:=regione FROM `recapitifax` WHERE visible='Y' ORDER BY
regione, title ASC
MySQL Error: 1267 (Illegal mix of collations
(latin1_swedish_ci,IMPLICIT) and (latin1_general_ci,IMPLICIT) for
operation '<>')
Forse l'editor delle viste è in svedese?
Ritolta la parte aggiunta ed è tornato italiano... beati voi se ci
capite :)
Ora faccio senza quella variabile quindi non preoccupatevi, spero
solo vi possa servire per capire cosa successo.
Capito.
MySQL è inutilmente complesso quando si tratta di gestire i set di
caratteri, perché fa differenza non solo tra ISO e Unicode ma anche
per le collation, cioè i canoni di ordinamento (per dire, nell'ordine
alfabetico tedesco la ß sta sotto alla s perché si legge ss).
Inutilmente perché prende in considerazione la collation non solo per
mettere in ordine ma anche per paragonare, e se io dico IF a=b c'è
poco da ordinare.
Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and
(latin1_general_ci,IMPLICIT) for operation '<>'
vuol dire: mi hai chiesto di paragonare regione<>@prev_r. Secondo me
il primo termine, regione, è svedese. Il secondo termine, @prev_r, è
occidentale.
Nel tuo database abbiamo alcune tabelle, probabilmente create con una
beta di Sar-At, che sono convinte di dover usare la collation svedese.
Quando vengon usate per far paragoni con le variabili, che sono in
collation europa occidentale "case insensitive", MySQL dà fuori di
testa.
La soluzione dunque è:
alter table NOMESEZIONE modify NOMECAMPO DEFINIZIONECAMPO collate
latin1_general_ci;
L.A.