Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093

    [mysql 4.1.4] character set

    Salve a tutti,
    oggi mi ritrovo di fronte ad uno strano errore, ho una tabella con un campo testuale con collaction latin1_swedish_ci (copia incolla da phpmyadmin )

    quando in una select faccio un classico confronto con una stringa ottengo:

    query:
    SELECT .... WHERE mioCampo = 'valore'

    errore:
    #1267 - Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (utf8_general_ci,COERCIBLE) for operation '='

    è strano... anche perché si tratta di uno script che con le versioni precedenti ha sempre funzionato, è il segno di una prima potenziale incompatibilità fra le versioni di mysql?

  2. #2
    anche a me succede
    debian:~$ uname -r
    2.6.18-1-686
    debian:~$

    Il quiz manager è nato!!! visitate http://shenk.altervista.org !!

  3. #3
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    mi son documentato un po', diciamo pure che ho passato le ultime due ore a spulciare il manuale online

    ho capito tutto il meccanismo dei characterset introdotti nella 4.1 ma evidentemente qualcosa ancora mi sfugge in quanto non riesco a trovare una spiegazione a quest'errore, e quindi non riesco ancora a trovare una soluzione elegante

    scarsa documentazione in merito?? nell'operatore di confronto '=' i character set non vengono menzionati

  4. #4
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    up

  5. #5
    Originariamente inviato da kuarl
    mi son documentato un po', diciamo pure che ho passato le ultime due ore a spulciare il manuale online

    ho capito tutto il meccanismo dei characterset introdotti nella 4.1 ma evidentemente qualcosa ancora mi sfugge in quanto non riesco a trovare una spiegazione a quest'errore, e quindi non riesco ancora a trovare una soluzione elegante

    scarsa documentazione in merito?? nell'operatore di confronto '=' i character set non vengono menzionati
    Ho trovato questa affermazione che mi pare parecchio significativa:
    In these respects, not only is MySQL 4.1 far more flexible than MySQL 4.0, it also is far ahead of other DBMSs. However, to use the new features effectively, you will need to learn what character sets and collations are available, how to change their defaults, and what the various string operators do with them.
    Visto che la cosa mi interessera' provo ad installare la 4.1.4 e far delle prove....

    Intanto se ottieni risultati fai sapere...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    c'e' un bug... se fai una ricerca con google "illegal mix of collations" trovi tutto.

    http://bugs.mysql.com/bug.php?id=3611

    http://downloads.mysql.com/snapshots.php

    "dovrebbe" esserci una patch..... ma non posso provare... vedi tu e fai sapere.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    allora, ho la 4.1.4gamma installata su winxp, le prove fino ad ora le ho fatte con php e con phpmyadmin (provo sempre tutte le mie query prima su phpmyadmin). Vi posto la struttura della tabella:

    codice:
    CREATE TABLE `allegati` (
      `nome` char(255) NOT NULL default '',
      `descrizione` char(255) NOT NULL default '',
      `cartella` char(255) NOT NULL default '',
      `group` char(255) NOT NULL default '',
      `references` char(255) NOT NULL default '',
      `display` enum('false','true') NOT NULL default 'true',
      PRIMARY KEY  (`nome`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
    ed ora la query:
    codice:
    SELECT n.ID, n.titolo, n.testo, n.data, n.rilievo, c.nome AS categoria, u.username AS autore, COUNT( a.nome ) AS immagini
    FROM nws_news AS n
    LEFT JOIN allegati AS a ON a.references = n.ID AND a.group = 'news'
    JOIN nws_category AS c ON c.ID = n.categoria
    LEFT JOIN user AS u ON n.autore = u.username
    GROUP BY n.ID
    se si elimina la parte in grassetto la query funziona perfettamente

    sul manuale ho letto diversi capitoli, cominciando dalla teoria del character set:
    http://dev.mysql.com/doc/mysql/en/Charset-MySQL.html
    alcune note sui collation:
    http://dev.mysql.com/doc/mysql/en/Ch...te-tricky.html

    fra le funzioni varie potrebbe risultare utile COERCIBILITY
    http://dev.mysql.com/doc/mysql/en/In...functions.html

    naturalmente io vorrei rendere le mie query funzionanti anche (soprattutto dire) sulle vecchie versioni di mysql, cambiando solo, se possibile, la struttura delle tabelle



    un ultima nota, da quanto mi sembra di aver capito mysql assegna alle stringhe presenti nelle query (come nel mio caso) il charcter set utf8 e collation utf8_general_ci, quindi assegnando lo stesso character set e collation alle tabelle il tutto funziona, forse è questa la soluzione ma vorrei discuterne. C'è anche da dire che se si vuol formare un indice su più campi text, tutti i campi devono avere lo stesso character set e collation, e questo mi sembra di non averlo letto sul manuale... un bel macello inzomma

  8. #8
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da piero.mac
    c'e' un bug... se fai una ricerca con google "illegal mix of collations" trovi tutto.

    http://bugs.mysql.com/bug.php?id=3611

    http://downloads.mysql.com/snapshots.php

    "dovrebbe" esserci una patch..... ma non posso provare... vedi tu e fai sapere.

    ecco spiegato l'arcano :rollo:
    infatti non riuscivo a capire xke seguendo le regole di coercibility non dovevano sorgere problemi...

    scarico la nightly e vi faccio sapere...

  9. #9
    Domanda da 4 soldi ...

    hai provato a mettere la seconda condizione ON nella WHERE?

    codice:
    SELECT n.ID, n.titolo, ...... OMISSIS
    
    FROM nws_news AS n
    LEFT JOIN allegati AS a ON a.references = n.ID
    JOIN nws_category AS c ON c.ID = n.categoria
    LEFT JOIN user AS u ON n.autore = u.username
    WHERE a.group = 'news'
    GROUP BY n.ID

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Utente di HTML.it L'avatar di kuarl
    Registrato dal
    Oct 2001
    Messaggi
    1,093
    Originariamente inviato da piero.mac
    Domanda da 4 soldi ...

    hai provato a mettere la seconda condizione ON nella WHERE?

    codice:
    SELECT n.ID, n.titolo, ...... OMISSIS
    
    FROM nws_news AS n
    LEFT JOIN allegati AS a ON a.references = n.ID
    JOIN nws_category AS c ON c.ID = n.categoria
    LEFT JOIN user AS u ON n.autore = u.username
    WHERE a.group = 'news'
    GROUP BY n.ID
    si, le avevo provate tutte, il problema sorge anche con altre query dello stesso tipo

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.