Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Cannot resolve collation conflict for equal to operation

Îåêßíçóå áðü ôï ìÝëïò axaros. Τελευταία δημοσίευση από το μέλος axaros στις 24-06-2005, 15:43. Υπάρχουν 13 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  27-05-2005, 10:10 2253

    Cannot resolve collation conflict for equal to operation

    Γεια σας ανύσηχοι !!!!!!
    Μπορεί κάποιος να με βοηθήσει με αυτό το error???
    (SQL server 2000)


    Πάνος Αβραμίδης
  •  27-05-2005, 12:12 2257 σε απάντηση της 2253

    Re: Cannot resolve collation conflict for equal to operation

    Δεν μου έχει τύχει αλλά υποθέτω οτι κάπου συγκρίνεις δύο πεδία τύπου char/varchar με διαφορετικά collations


    Vir prudens non contra ventum mingit
  •  27-05-2005, 12:17 2258 σε απάντηση της 2253

    Re: Cannot resolve collation conflict for equal to operation

    Αν μπορούσαμε να δούμε και ένα απόσπασμα του κώδικα θα ήταν καλύτερα , αν και αυτό το βγάζει όταν κανείς  JOIN πεδία VARCHAR με διαφορετικό COLLATION.Δες τι τιμές έχουν τα Server,Database,Table Collation.Αν στο JOIN τα Collation είναι διαφορετικά πρέπει να τα αλλάξεις ώστε να είναι ίδια ή να προσθέσεις το “collate 'όνομα Collation' ” στο JOIN αν δεν μπορείς να τα αλλάξεις .Κάνε Post το απόσπασμα του κώδικα για να σου πω τι αλλαγές χρειάζεσαι.


    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  27-05-2005, 12:25 2261 σε απάντηση της 2258

    Re: Cannot resolve collation conflict for equal to operation

    Και καλύτερα να κάνεις post και το Error Code! Αλλιώς χρειάζεται χοντρό ψάξιμο στα τυφλά για να βρούμε ποιό Error έγινε! Άσε που κι εσύ θα μπορείς να κάνεις πολύ καλύτερο search στό BOL ή το MSDN ή το Google με το Error Code. Αυτό πάντως είναι το 446.

    Το πρόβλημα τώρα οφείλεται στα διαφορετικά collations. Θα δεις την περιγραφή στο Collation Precedence. Θα είχες αποφύγει το πρόβλημα πάντως αν χρησιμοποιούσες nchar και nvarchar


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  27-05-2005, 12:34 2263 σε απάντηση της 2257

    Re: Cannot resolve collation conflict for equal to operation

     KelMan wrote:

    Δεν μου έχει τύχει αλλά υποθέτω οτι κάπου συγκρίνεις δύο πεδία τύπου char/varchar με διαφορετικά collations



    Ακριβώς κάνω ένα Join με ένα πίνακα μιας Βάσης με Greek_CI_AS collation με έναν άλλο σε άλλη βάση στο ίδιο server instance με Latin1_General_CI_AS με αποτέλεσμα να παίρνω το error.

    Άλλαξα τα collation σε επίπεδο columns (nvarchar σε Latin1_General_CI_AS) και το Big Smileπρόβλημα λύθηκε Big Smile....


    Τι λέτε γι' αυτό είμαι εντάξει ή θα έπρεπε να κάνω rebuild τη master?
    Πάνος Αβραμίδης
  •  27-05-2005, 12:49 2267 σε απάντηση της 2261

    Re: Cannot resolve collation conflict for equal to operation

     pkanavos wrote:

    Θα είχες αποφύγει το πρόβλημα πάντως αν χρησιμοποιούσες nchar και nvarchar


    Παιδιά,
    όντως και εγώ αυτό περίμενα ...
    Nvarchar έχω και στους δύο πίνακες και όμως δεν ... Το default collation του Server είναι Greek_CI_AS της πρώτης βάσης Latin1_General_CI_AS και της δεύτερης Greek_CI_AS ...
    Πάνος Αβραμίδης
  •  27-05-2005, 12:53 2268 σε απάντηση της 2267

    Re: Cannot resolve collation conflict for equal to operation

    Όχι δεν νομίζω ότι χρειάζεται , απλά καλό θα είναι οι βάσεις σου να έχουν ίδια Collation (αν γίνετε ) και στο σύνολο των table να έχει 1 collation αυτό της Database.
    Όπως είπα και ποιο πάνω , χωρίς να αλλάξεις την βάση μπορείς να χρησιμοποιήσεις και το
    COLLATE στο JOIN
    αν π.χ. ήταν βάση τρίτου.


    Sex is like programing; One mistake, and you will have to support it for the rest of your life…
  •  27-05-2005, 13:00 2269 σε απάντηση της 2268

    Re: Cannot resolve collation conflict for equal to operation

     raPhaeL wrote:

    Όχι δεν νομίζω ότι χρειάζεται , απλά καλό θα είναι οι βάσεις σου να έχουν ίδια Collation (αν γίνετε ) και στο σύνολο των table να έχει 1 collation αυτό της Database.
    Όπως είπα και ποιο πάνω , χωρίς να αλλάξεις την βάση μπορείς να χρησιμοποιήσεις και το
    COLLATE στο JOIN
    αν π.χ. ήταν βάση τρίτου.



    Υποθέτω χωρίς να χρειάζεται να αλλάξω και το collation των columns ...
    Τι από τα δύο είναι καλύτερο κατά τη γνώμη σου ;
    Collate στο Join ή αλλαγή του collation στα columns?
    Πάνος Αβραμίδης
  •  28-05-2005, 09:02 2281 σε απάντηση της 2269

    Re: Cannot resolve collation conflict for equal to operation

    H αλλαγή του collation στα columns είναι one-off και μετά από 'κει και πέρα όλες οι νέες εγγραφές θα έχουν το νέο collation. Αν το αλλάζεις στο Join θα έχεις το overhead της αλλαγής κάθε φορά που κάνεις Select...
    Vir prudens non contra ventum mingit
  •  28-05-2005, 10:03 2282 σε απάντηση της 2281

    Re: Cannot resolve collation conflict for equal to operation

    Τα πραγματα είναι όπως στα περιγράφει ο Μάνος. Καλύτερα να το κάνεις μια φορά.

    Ο λογικός τρόπος είναι να κάνεις script τη βάση, δημιουργήσεις μια καινούργια βάση με το collation που θες, να τρέξεις τα script που έφτιαξες, αλλά έχεις διορθώσει να μην έχουν collation attributes μέσα και μετά να χρησιμοποιήσεις τα DTS για να μεταφέρεις τα δεδομένα από την μια βάση στην άλλη. Λογικός δρόμος αλλά θα πάρει λίγη ώρα.

    Πριν από κάτι μήνες είχα βρει κάπου ένα script που με είχε γλυτώσει όλη τη παραπανω διαδικασία:

    SELECT 'ALTER TABLE ' + sysobjects.name + ' ' +
        'ALTER COLUMN ' + syscolumns.name + ' ' +
        systypes.name + '(' + CAST(syscolumns.length AS VARCHAR) + ') ' +
        'COLLATE ' + syscolumns.collation + ' ' +
        CASE WHEN syscolumns.isnullable = 1 THEN 'NULL' ELSE 'NOT NULL' END sql
        FROM syscolumns
        INNER JOIN sysobjects ON sysobjects.id = syscolumns.id
        INNER JOIN systypes ON systypes.xtype = syscolumns.xtype
        WHERE syscolumns.collation IS NOT NULL
        AND sysobjects.name='Customers'

    Αυτό το SQL script σου φτιάχνει ένα SQL script που όταν το τρέχεις αλλάζει τα collation στηλών μέσα στην βάση που το τρέχεις. - Προσοχή μην το τρέξεις μέσα στην master! - Αν βάλεις εκεί που λέει 'Customers' το όνομα του table του οποίου θες να αλλάξεις στις στήλες του Collation θα σου βγάλει τα SQL statements που χρειάζεσαι για την αλλαγή.

    Αυτά τα statements θα έχουν το collation που τώρα έχουν οι στήλες: Latin1_General_CI_AS και θα το αντικαταστήσεις με το Greek_CI_AS που θες εσύ. Στην συνέχεια τα τρέχεις στην βάση, και ... έτοιμος!

    George J.



    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
  •  28-05-2005, 10:13 2283 σε απάντηση της 2282

    Re: Cannot resolve collation conflict for equal to operation

    Εναλλακτικά, μπορείς να αφήσεις τον Enterprise Manager να κάνει όλη αυτή τη βρωμοδουλειά Wink. Αλλά εμείς δεν το φοβόμαστε το πληκτρολόγιο και τα κάνουμε με queries! Big Smile Άν όμως το κάνεις αυτό (βιάζεσαι βρε αδερφέ), μπορείς να βάλεις τον Profiler για να δεις πως το κάνει ο EM...
    Vir prudens non contra ventum mingit
  •  28-05-2005, 12:29 2284 σε απάντηση της 2283

    Re: Cannot resolve collation conflict for equal to operation

    Big SmileΠαιδιά σας ευχαριστώ για άλλη μια φορά Big Smile...
    Με καλύψατε πλήρως !!!!!


    Πάνος Αβραμίδης
  •  24-06-2005, 13:03 3074 σε απάντηση της 2253

    Re: Cannot resolve collation conflict for equal to operation

    Για την ιστορία ....
    Για περιπτώσεις στις οποίες δεν μπορείς να αλλάξεις το Collate του πίνακα στη βάση
    μπορείς να το αλλάξεις μόνο για τις ανάγκες του SQL Statement.

    Εστω πίνακας tpGreek με πεδίο fcGreek με Collate greek_ci_as
    και πίνακας tpOtiNaNai με πεδίο fcOtiNaNai με Collate otinanai_ci_as

    select g.*
    from tpGreek g
    left join tpOtiNaNai a
    ON g.fcGreek = a.fcOtiNaNai collate greek_ci_as



  •  24-06-2005, 15:43 3077 σε απάντηση της 3074

    Re: Cannot resolve collation conflict for equal to operation

     dbaltas wrote:
    Για την ιστορία ....
    Για περιπτώσεις στις οποίες δεν μπορείς να αλλάξεις το Collate του πίνακα στη βάση
    μπορείς να το αλλάξεις μόνο για τις ανάγκες του SQL Statement.
    Εστω πίνακας tpGreek με πεδίο fcGreek με Collate greek_ci_as
    και πίνακας tpOtiNaNai με πεδίο fcOtiNaNai με Collate otinanai_ci_as
    select g.*
    from tpGreek g
    left join tpOtiNaNai a
    ON g.fcGreek = a.fcOtiNaNai collate greek_ci_as


     axaros wrote:

    Υποθέτω χωρίς να χρειάζεται να αλλάξω και το collation των columns ...
    Τι από τα δύο είναι καλύτερο κατά τη γνώμη σου ;
    Collate στο Join ή αλλαγή του collation στα columns?


    Φίλε dbaltas,
    προφανώς δεν διάβασες όλα τα posts Big Smile!!!!
    Πάνος Αβραμίδης
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems