{"id":13,"date":"2008-07-09T16:43:56","date_gmt":"2008-07-09T14:43:56","guid":{"rendered":"https:\/\/www.lelcomunicazione.it\/blog\/?p=13"},"modified":"2016-08-31T11:05:47","modified_gmt":"2016-08-31T09:05:47","slug":"risolvere-il-collation-conflict-in-sql-server","status":"publish","type":"post","link":"https:\/\/www.lelcomunicazione.it\/blog\/risolvere-il-collation-conflict-in-sql-server\/","title":{"rendered":"Risolvere il Collation Conflict in SQL Server"},"content":{"rendered":"<p>Penso che tutti quelli che abbiamo iniziato a lavorare con SQL Server 7, quando poi sono passati alla versione 2000 abbiano avuto a che fare con il seguente fastidioso errore<\/p>\n<pre>Cannot resolve collation conflict for equal to operation.<\/pre>\n<p>L\u2019errore deriva dal fatto che dalla versione 2000 \u00e8 stato introdotto in SQL Server il concetto di Collation, ovvero un set di caratteri che facilita la gestione dei dati per i diversi linguaggi. tutto ci\u00f2 che ha a che fare con i confronti tra caratteri (campi di tipo char e varchar) \u00e8 soggetta alle regole imposte dalla collation. Ogni campo di tipo carattere ha un suo collation.<\/p>\n<p><!--more--><\/p>\n<p>Di fatto si incorre in questo errore quando si cerca di confrontare due campi che hanno diverso collation e quindi SQL Server non riesce a decidere l\u2019esito del confronto.<\/p>\n<p>Questo accade soprattutto quando si confrontano dati da ambienti diversi o da db nati inizialmente con la versione 7 di SQL Server. Infatti la maggior parte dei casi riguarda confronti di campi con collate <strong>SQL_Latin1_General_CP1_CI_AS<\/strong> (il default di quando si importa un db da SQL Server 7) e <strong>Latin1_General_CI_AS<\/strong> (il default di quando si installa SQL Server 2000). Bisogna fare molta attenzione, sempre che siano necessarie join tra campi di tipo testo.<\/p>\n<h2>La soluzione<\/h2>\n<p>Per ovviare a questo errore \u00e8 necessario fare un cast (la conversione) di uno dei campi Supponiamo di avere la tab1 con il campo c1 di tipo char(2) e collation SQL_Latin1_General_CP1_CI_AS, e la tabella tab2 con il campo c2 di tipo char(2) e collation Latin1_General_CI_AS, la query seguente<\/p>\n<pre>select *\r\nfrom tab1\r\njoin tab2 on tab1.c1 = tab2.c2<\/pre>\n<p>inevitabilmente restituir\u00e0 il famoso errore, mentre<\/p>\n<pre>select *\r\nfrom tab1\r\njoin tab2 on CAST(tab1.c1 as char(2)) collate Latin1_General_CI_AS = tab2.c2<\/pre>\n<p>permette di far funzionare la join. E\u2019 chiaro che eventuali indici sul campo c1 della tabella tab1 andranno a farsi benedire per\u00f2 almeno si risolve il problema.<\/p>\n<div style=\"float: right;\"><script type=\"text\/javascript\">\/\/ < ![CDATA[\n&lt;! \ngoogle_ad_client = \"pub-1199874801787884\";\ngoogle_alternate_color = \"FFFFFF\";\ngoogle_ad_width = 468;\ngoogle_ad_height = 60;\ngoogle_ad_format = \"468x60_as\";\ngoogle_ad_type = \"text_image\";\ngoogle_ad_channel =\"\";\ngoogle_color_border = \"FFFFFF\";\ngoogle_color_link = \"0000FF\";\ngoogle_color_bg = \"FFFFFF\";\ngoogle_color_text = \"000000\";\ngoogle_color_url = \"008000\";\n\/\/ &gt;\n\/\/ ]]><\/script><script type=\"text\/javascript\" src=\"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js\"><\/script><\/div>\n<p>Di fatto le join su campo di tipo stringa \u00e8 il caso di non farli, gli id devono essere di tipo numerico, questo risolverebbe il problema alla base.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Penso che tutti quelli che abbiamo iniziato a lavorare con SQL Server 7, quando poi sono passati alla versione 2000 abbiano avuto a che fare con il seguente fastidioso errore Cannot resolve collation conflict for equal to operation. L\u2019errore deriva&hellip; <a href=\"https:\/\/www.lelcomunicazione.it\/blog\/risolvere-il-collation-conflict-in-sql-server\/\" class=\"more-link\">Leggi tutto <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[14],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-news-da-l-l"],"_links":{"self":[{"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":0,"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lelcomunicazione.it\/blog\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}