{"id":1104,"date":"2012-01-10T20:00:46","date_gmt":"2012-01-10T22:00:46","guid":{"rendered":"http:\/\/fabriciolima.net\/blog\/?p=1104"},"modified":"2017-03-15T21:34:42","modified_gmt":"2017-03-16T00:34:42","slug":"casos-do-dia-a-dia-erro-de-collation-em-uma-consulta","status":"publish","type":"post","link":"https:\/\/fabriciolima.net\/blog\/2012\/01\/10\/casos-do-dia-a-dia-erro-de-collation-em-uma-consulta\/","title":{"rendered":"Casos do Dia a Dia &#8211; Erro de Collation em uma Consulta"},"content":{"rendered":"<p>Fala Pessoal,<\/p>\n<p>O foco desse post n\u00e3o \u00e9 explicar o que \u00e9 uma collation, mas sim contar uma experi\u00eancia de duas situa\u00e7\u00f5es que j\u00e1 passei.<\/p>\n<p>Quando instalamos o SQL Server ele possui uma collation default chamada <strong>SQL_Latin1_General_CP1_CI_AS<\/strong>. Eu particularmente, utilizo na maioria das vezes a collation <strong>SQL_Latin1_General_CP1_CI_AI<\/strong>.<\/p>\n<p>Agora, imaginem que voc\u00eas por algum motivo possuam bases com diferentes collations em um servidor e precisem de dar um join entre duas tabelas dessas bases. O que voc\u00ea faria?<\/p>\n<p>Para simular essa situa\u00e7\u00e3o, criei duas databases com collations diferentes:<\/p>\n<ul>\n<li>DBTeste1 com a <strong>collate SQL_Latin1_General_CP1_CS_AS<\/strong><\/li>\n<li>DBTeste2 com <strong>a collate SQL_Latin1_General_CP1_CI_AI<\/strong><\/li>\n<\/ul>\n<p>Em seguida, criei uma tabela em cada database para tentar fazer um join entre elas por um campo char.<\/p>\n<pre class=\"lang:tsql decode:true\">\r\nUSE DBTeste1\r\nUSE DBTeste1\r\n\r\nCREATE TABLE Cliente(Nr_CPF CHAR(11))\r\nINSERT INTO Cliente VALUES('11111111111')\r\n\r\nGO\r\n\r\nUSE DBTeste2\r\n\r\nCREATE TABLE Funcionario(Nr_CPF CHAR(11))\r\nINSERT INTO Funcionario VALUES('11111111111')\r\n<\/pre>\n<p>Ao tentar executar esse join:<\/p>\n<pre class=\"lang:tsql decode:true\">\r\nSELECT *\r\nFROM DBTeste1..Cliente A\r\nJOIN DBTeste2..Funcionario B ON A.Nr_CPF = B.Nr_CPF\r\n<\/pre>\n<p>Recebi o erro abaixo:<\/p>\n<p><a href=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1106\" title=\"ErroCollation\" src=\"https:\/\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1.png\" alt=\"\" width=\"978\" height=\"67\" srcset=\"https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1.png 978w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-300x21.png 300w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-768x53.png 768w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-700x48.png 700w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-410x28.png 410w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-100x7.png 100w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-275x19.png 275w, https:\/\/fabriciolima.net\/blog\/wp-content\/uploads\/2012\/01\/ErroCollation1-20x1.png 20w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/a><\/p>\n<p>Nessa mesma hora algu\u00e9m vai te perguntar se \u00e9 poss\u00edvel alterar a Collation de uma dessas databases (isso j\u00e1 aconteceu comigo). Entretanto, alterar a collation de uma database pode gerar problemas em outras queries.<\/p>\n<p>Para sair dessa situa\u00e7\u00e3o, voc\u00ea pode converter a collation de uma das tabelas antes de realizar a compara\u00e7\u00e3o no join:<\/p>\n<pre class=\"lang:tsql decode:true\">SELECT *\r\nFROM DBTeste1..Cliente A\r\nJOIN DBTeste2..Funcionario B on A.Nr_CPF COLLATE SQL_Latin1_General_CP1_CI_AI = B.Nr_CPF\r\n<\/pre>\n<p>Parece m\u00e1gica mas agora a query rodou com sucesso. Nesse exemplo, o comando <em><b>collate SQL_Latin1_General_CP1_CI_AI<\/b><\/em> realiza algo parecido com um CAST, convertendo a coluna A.Nr_CPF para outra collation.<\/p>\n<p>Outra situa\u00e7\u00e3o em que essa convers\u00e3o me ajudou foi a seguinte:<\/p>\n<p>Uma pessoa estava precisando retirar todos os acentos de uma coluna para utilizar em uma compara\u00e7\u00e3o e tamb\u00e9m me falaram que algu\u00e9m j\u00e1 tinha feito uma fun\u00e7\u00e3o massa que varria toda a string e fazia essa opera\u00e7\u00e3o.<\/p>\n<p>Contudo, bastava converter a collation conforme o exemplo abaixo para retirar toda acentua\u00e7\u00e3o dessas colunas:<\/p>\n<pre class=\"lang:tsql decode:true\">\r\nDeclare @String varchar(30)\r\nSet @String = 'aeiou\u00e1\u00e9\u00ed\u00f3\u00fa\u00e0\u00e8\u00ec\u00f2\u00f2\u00e2\u00ea\u00ee\u00f4\u00fb\u00e3\u00f5\u00e4\u00eb\u00ef\u00f6\u00fc\u00e7'\r\nSelect @String collate sql_latin1_general_cp1251_ci_as\r\n<\/pre>\n<p>Acho que esse c\u00f3digo ficou um pouco mais r\u00e1pido de se fazer do que uma fun\u00e7\u00e3o que varre toda a string. =)<\/p>\n<p><b>OBS:<\/b> Eu j\u00e1 tinha visto esse script em algum lugar na Internet.<\/p>\n<p>&nbsp;<\/p>\n<p><b>Gostou dessa Dica?<\/b><\/p>\n<p>Curta, comente, compartilhe\u2026<\/p>\n<p>Assine meu canal no <a href=\"https:\/\/www.youtube.com\/channel\/UCeBRAO_LLrUdSrOXIywjzRA\" target=\"_blank\">Youtube<\/a> e curta minha p\u00e1gina no <a class=\"external-link wpel-icon-left\" href=\"https:\/\/www.facebook.com\/FabricioLimaSolucoesemBancodeDados\/\" target=\"_blank\" rel=\"nofollow external noopener noreferrer\" data-wpel-link=\"external\">Facebook<\/a> para receber Dicas de Leituras, V\u00eddeos e Eventos sobre SQL Server.<\/p>\n<p>Confira mais experi\u00eancias do Dia a Dia de um DBA no meu <a href=\"https:\/\/www.fabriciolima.net\/cursos-online\/treinamento-tarefas-do-dia-a-dia-de-um-dba-online\/\" target=\"_blank\">Treinamento de Tarefas do Dia a Dia de um DBA<\/a>.<\/p>\n<p>At\u00e9 a pr\u00f3xima.<\/p>\n<p>Fabr\u00edcio Lima<\/p>\n<p>MCITP \u2013 Database Administrator<\/p>\n<p>Consultor e Instrutor SQL Server<\/p>\n<p>Trabalha com SQL Server desde 2006<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Fala Pessoal, O foco desse post n\u00e3o \u00e9 explicar o que \u00e9 uma collation, mas sim contar uma experi\u00eancia de duas situa\u00e7\u00f5es que j\u00e1 passei. Quando instalamos o SQL Server ele possui uma collation default chamada SQL_Latin1_General_CP1_CI_AS. Eu particularmente, utilizo na maioria das vezes a collation SQL_Latin1_General_CP1_CI_AI. Agora, imaginem que voc\u00eas por algum motivo possuam [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[3,6,280],"tags":[477,482,479,481,475,483,476,480,33,478,474],"class_list":["post-1104","post","type-post","status-publish","format-standard","hentry","category-administracao-de-bd","category-casos-do-dia-a-dia","category-virtual-pass-br","tag-alterar-collation-sql-server","tag-cannot-resolve-the-collation-conflict","tag-collate","tag-collate-sql_latin1_general_cp1251_ci_as","tag-collation","tag-collation-conflict","tag-collation-default-sql-server","tag-converter-collation","tag-sql-server","tag-sql_latin1_general_cp1_ci_ai","tag-sql_latin1_general_cp1_ci_as"],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":7342,"url":"https:\/\/fabriciolima.net\/blog\/2017\/02\/08\/improve-the-query-performance-with-like-string-changing-only-the-collation\/","url_meta":{"origin":1104,"position":0},"title":"Improve the performance of a query that uses &#8221; like &#8216;%String%&#8217; &#8221; changing only the collation","author":"Fabr\u00edcio Lima","date":"8 de fevereiro de 2017","format":false,"excerpt":"Hi Folks, In this blog post, I will give you a very useful tip to improve the performance of a query that uses \" like '%String%' \". How often do you have to use a query like this? Select Columns,... from Table where Name like '%String%' Reading the great book\u2026","rel":"","context":"Em &quot;SQL Server&quot;","block_context":{"text":"SQL Server","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.fabriciolima.net\/blog\/wp-content\/uploads\/2017\/02\/PostCollationTable.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":9693,"url":"https:\/\/fabriciolima.net\/blog\/2018\/11\/30\/managed-instance-12-configuracao-da-collation-da-instancia\/","url_meta":{"origin":1104,"position":1},"title":"Managed Instance (#12) \u2013 Configura\u00e7\u00e3o da Collation da inst\u00e2ncia","author":"Fabr\u00edcio Lima","date":"30 de novembro de 2018","format":false,"excerpt":"Fala Pessoal, Esse \u00e9 mais um post da s\u00e9rie sobre o Azure SQL Database Managed Instance. Caso ainda n\u00e3o tenha visto, seguem os posts anteriores: Azure SQL DB Managed Instance \u2013 Introdu\u00e7\u00e3o Managed Instance \u2013 Criando minha primeira inst\u00e2ncia Managed Instance \u2013 Como se conectar direto do SSMS utilizando uma\u2026","rel":"","context":"Em &quot;Azure SQL Database&quot;","block_context":{"text":"Azure SQL Database","link":"https:\/\/fabriciolima.net\/blog\/category\/azure-sql-database\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Collation_1.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Collation_1.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Collation_1.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/11\/Managedinstance_Collation_1.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":7307,"url":"https:\/\/fabriciolima.net\/blog\/2017\/02\/06\/video-melhorando-a-performance-de-uma-consulta-com-like-string-alterando-a-collation\/","url_meta":{"origin":1104,"position":2},"title":"V\u00eddeo: Melhorando a performance de uma consulta com like &#8216;%String%&#8217; alterando a Collation","author":"Fabr\u00edcio Lima","date":"6 de fevereiro de 2017","format":false,"excerpt":"Fala Pessoal, Nesse v\u00eddeo de hoje vou\u00a0dar uma dica de tuning que\u00a0s\u00f3 aprendi agora em 2017. Uma coisa simples que\u00a0pode melhorar drasticamente uma consulta como essa abaixo: Select\u00a0Colunas,XXX FROM Tabela WHERE Coluna like '%String%' \u00c9 s\u00e9rio... Parece m\u00e1gica... Assista... Teste... Compartilhe... Veja no v\u00eddeo abaixo: https:\/\/www.youtube.com\/watch?v=cyteAND34I0 Segue os scripts utilizados\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/cyteAND34I0\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":9911,"url":"https:\/\/fabriciolima.net\/blog\/2018\/12\/05\/managed-instance-15-anuncios-do-dia-04-12-2018\/","url_meta":{"origin":1104,"position":3},"title":"Managed Instance  (#15) \u2013 An\u00fancios do dia 04-12-2018","author":"Fabr\u00edcio Lima","date":"5 de dezembro de 2018","format":false,"excerpt":"Fala Pessoal, Ontem (04\/12\/2018) foi anunciado algumas novidades para o Managed Instance. Segue o post completo do Borko Novakovic: https:\/\/azure.microsoft.com\/en-us\/blog\/migrate-mission-critical-sql-workloads-to-the-most-economical-cloud-destination\/ General Availability (GA) Business Critical Service Tier Esse \u00e9 o an\u00fancio que est\u00e1vamos esperando para o in\u00edcio de Dezembro. Todos os posts e testes que realizei foram em um Preview\u2026","rel":"","context":"Em &quot;Azure SQL Database&quot;","block_context":{"text":"Azure SQL Database","link":"https:\/\/fabriciolima.net\/blog\/category\/azure-sql-database\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Anuncioy_7.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Anuncioy_7.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Anuncioy_7.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Anuncioy_7.png?resize=700%2C400&ssl=1 2x, https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2018\/12\/Managedinstance_Anuncioy_7.png?resize=1050%2C600&ssl=1 3x"},"classes":[]},{"id":19034,"url":"https:\/\/fabriciolima.net\/blog\/2023\/10\/05\/power-alerts-gerando-uma-documentacao-dinamica-de-configuracoes-da-minha-instancia-sql-server\/","url_meta":{"origin":1104,"position":4},"title":"[Power Alerts] Gerando uma documenta\u00e7\u00e3o din\u00e2mica de configura\u00e7\u00f5es da minha inst\u00e2ncia SQL Server","author":"Fabr\u00edcio Lima","date":"5 de outubro de 2023","format":false,"excerpt":"Fala Pessoal, Passando aqui para deixcar a dica de um v\u00eddeo onde mostrei uma feature top que temos no Power Alerts. https:\/\/www.youtube.com\/watch?v=VOTnFWh5FQ8&t=9s Imagina que voc\u00ea teve um problema grave e precise reinstalar seu SQL Server do ZERO. Qual collation eu utilizava? Em quais pastas estavam minhas bases? Quais logins, Jobs\u2026","rel":"","context":"Em &quot;Administra\u00e7\u00e3o de Banco de Dados&quot;","block_context":{"text":"Administra\u00e7\u00e3o de Banco de Dados","link":"https:\/\/fabriciolima.net\/blog\/category\/sql-server\/administracao-de-bd\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/img.youtube.com\/vi\/VOTnFWh5FQ8\/0.jpg?resize=350%2C200","width":350,"height":200},"classes":[]},{"id":18550,"url":"https:\/\/fabriciolima.net\/blog\/2023\/01\/24\/managed-instance-26-maintenance-window\/","url_meta":{"origin":1104,"position":5},"title":"Managed Instance (#26) \u2013 Maintenance Window","author":"Fabr\u00edcio Lima","date":"24 de janeiro de 2023","format":false,"excerpt":"Fala Pessoal, Ap\u00f3s um longo inverno voltei a criar uma inst\u00e2ncia gerenciada no azure (managed Instance) e vi uma op\u00e7\u00e3o que ainda n\u00e3o tinha documentado aqui no Blog, a Maintenance Window: Quando fiz esse post em 2018 n\u00e3o era poss\u00edvel escolher a collation da inst\u00e2ncia: Collation Managed Instance Devo ter\u2026","rel":"","context":"Em &quot;Azure SQL Database&quot;","block_context":{"text":"Azure SQL Database","link":"https:\/\/fabriciolima.net\/blog\/category\/azure-sql-database\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/fabriciolima.net\/blog\/wp-content\/uploads\/2023\/01\/Managed_instance_timezone-e-maintenance-window-297x300.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/1104","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/comments?post=1104"}],"version-history":[{"count":0,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/posts\/1104\/revisions"}],"wp:attachment":[{"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/media?parent=1104"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/categories?post=1104"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fabriciolima.net\/blog\/wp-json\/wp\/v2\/tags?post=1104"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}