none
Problemas com acentuação em pacote ETL RRS feed

  • Pergunta

  • Bom dia,

    A base onde faço SELECT é SQL_AltDiction_CP850_CI_AI e a base que insiro os dados é SQL_Latin1_General_CP1_CI_AI.
    Estou com um problema de acentuação, quando pego dados da base SQL_AltDiction_CP850_CI_AI  e insiro na SQL_Latin1_General_CP1_CI_AI, através de OLEDB Source e OLEDB Destination.

    Exemplo:

    Origem: Sicredi Débito

    Destino: Sicredi D‚bito

    Origem: Cheque Eletrônico

    Destino: Cheque Eletr“nico


    Gostaria de saber porque isso está ocorrendo e como fazer, no Integration Services, para tratar isso.

    Obrigada


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    quinta-feira, 19 de julho de 2012 12:59

Respostas

  • Mariana,

    Os agrupamentos do SQL Server são uma opção de compatibilidade para corresponder os atributos de combinações comuns de número de página de código e ordens de classificação que foram especificados nas versões anteriores do SQL Server. Muitos desses agrupamentos oferecem sufixos para letras maiúsculas e minúsculas, acentuação, kana e distinção de largura, mas nem sempre.

    Os agrupamentos do SQL Server aplicam regras de classificação não-Unicode a dados não-Unicode e regras de classificação Unicode a dados Unicode usando um agrupamento do Windows correspondente para os dados Unicode. Essa diferença pode causar resultados inconsistentes para comparações dos mesmos caracteres. Portanto, se você tiver uma combinação de colunas Unicode e não-Unicode em seu banco de dados, todas elas devem ser definidas usando-se agrupamentos do Windows, de modo que as mesmas regras de classificação sejam usadas em dados Unicode e não-Unicode.

    Para manter a compatibilidade com versões anteriores do SQL Server ou com aplicativos desenvolvidos com agrupamentos do SQL Server em versões anteriores do SQL Server, o SQL Server oferece o agrupamento SQL_Latin1_General_CP1_CI_AS como agrupamento padrão para instalações de servidor em computadores que usam a localidade do sistema Windows Inglês (Estados Unidos).

    Além disso, as localidades do Windows especificam atributos que não são abrangidos por agrupamentos do Windows suportados pelo SQL Server, como formatos de moeda, data e hora. Pelo fato de países e regiões como Grã-Bretanha e Estados Unidos terem formatos de moeda, data e hora diferentes, eles exigem diferentes localidades do Windows. Eles não requerem diferentes agrupamentos do SQL Server porque têm o mesmo alfabeto e as mesmas regras de classificação e comparação de caracteres. No SQL Server, os agrupamentos do Windows são combinados com sufixos que definem regras de classificação e comparação com base na diferenciação de maiúsculas e minúsculas, de acentos, de katakana e de largura.

    Basicamente, você esta utilizando um Collate que possui a seguinte estrutura:

    SQL--Definição do Collate aplicado ao SQL Server;
    AltDiction -- Definição do dicionário utilizado no Collate;
    CP850 -- Código de página para armazenamento de valores em relação a quantidade de digitos de ano.
    CI -- Case insensitive.
    AI -- Accent insensitive.

    Com isso:

    SQL_AltDiction_Cp850_CI_AI --> Ordem do dicionário alternativo, não diferencia maiúsculas de minúsculas, não diferencia acentos

    CI_AI --> Não distingue maiúsculas e minúsculas, não distingue acentuação, não distingue caracteres kana, não distingue largura.

    Agora qual é a configuração de linguagens dos seus usuários no SQL Server?

    Este outro servidor qual é o Idioma do Windows, definição de linguagem nas configurações regionais e também do próprio SQL Server?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 23 de julho de 2012 16:30
    Moderador

Todas as Respostas

  • Boa tarde,

    Eu alterei o Collate das bases para ficar igual, as duas. Criei as duas bases com SQL_AltDiction_CP850_CI_AI  e mesmo assim o problema com acentuação continua ocorrendo..

    Alguma luz??

    Obrigada.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    sexta-feira, 20 de julho de 2012 19:33
  • Mariana,

    A pergunta que eu gostaria de fazer seria a seguinte:

    1. Porque você esta utilizando este Collation SQL_AltDiction_CP850_CI_AI na base de dados de origem?

    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 23 de julho de 2012 13:54
    Moderador
  • Junior,

    Esse collation está na base de produção do cliente desde antes de eu entrar na empresa.

    Quando eu crio uma nova base, sempre utilizo SQL_Latin1_General_CP1_CI_AI.
    Já propus mudar o collation da base do cliente, mas isso não tem previsão para ser feito.

    Esse problema que eu estou tendo com acentuação, é por causa desse collate (SQL_AltDiction_CP850_CI_AI)? Se sim, porque? E como posso resolver?

    Obrigada!!


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    segunda-feira, 23 de julho de 2012 15:48
  • Mariana,

    Os agrupamentos do SQL Server são uma opção de compatibilidade para corresponder os atributos de combinações comuns de número de página de código e ordens de classificação que foram especificados nas versões anteriores do SQL Server. Muitos desses agrupamentos oferecem sufixos para letras maiúsculas e minúsculas, acentuação, kana e distinção de largura, mas nem sempre.

    Os agrupamentos do SQL Server aplicam regras de classificação não-Unicode a dados não-Unicode e regras de classificação Unicode a dados Unicode usando um agrupamento do Windows correspondente para os dados Unicode. Essa diferença pode causar resultados inconsistentes para comparações dos mesmos caracteres. Portanto, se você tiver uma combinação de colunas Unicode e não-Unicode em seu banco de dados, todas elas devem ser definidas usando-se agrupamentos do Windows, de modo que as mesmas regras de classificação sejam usadas em dados Unicode e não-Unicode.

    Para manter a compatibilidade com versões anteriores do SQL Server ou com aplicativos desenvolvidos com agrupamentos do SQL Server em versões anteriores do SQL Server, o SQL Server oferece o agrupamento SQL_Latin1_General_CP1_CI_AS como agrupamento padrão para instalações de servidor em computadores que usam a localidade do sistema Windows Inglês (Estados Unidos).

    Além disso, as localidades do Windows especificam atributos que não são abrangidos por agrupamentos do Windows suportados pelo SQL Server, como formatos de moeda, data e hora. Pelo fato de países e regiões como Grã-Bretanha e Estados Unidos terem formatos de moeda, data e hora diferentes, eles exigem diferentes localidades do Windows. Eles não requerem diferentes agrupamentos do SQL Server porque têm o mesmo alfabeto e as mesmas regras de classificação e comparação de caracteres. No SQL Server, os agrupamentos do Windows são combinados com sufixos que definem regras de classificação e comparação com base na diferenciação de maiúsculas e minúsculas, de acentos, de katakana e de largura.

    Basicamente, você esta utilizando um Collate que possui a seguinte estrutura:

    SQL--Definição do Collate aplicado ao SQL Server;
    AltDiction -- Definição do dicionário utilizado no Collate;
    CP850 -- Código de página para armazenamento de valores em relação a quantidade de digitos de ano.
    CI -- Case insensitive.
    AI -- Accent insensitive.

    Com isso:

    SQL_AltDiction_Cp850_CI_AI --> Ordem do dicionário alternativo, não diferencia maiúsculas de minúsculas, não diferencia acentos

    CI_AI --> Não distingue maiúsculas e minúsculas, não distingue acentuação, não distingue caracteres kana, não distingue largura.

    Agora qual é a configuração de linguagens dos seus usuários no SQL Server?

    Este outro servidor qual é o Idioma do Windows, definição de linguagem nas configurações regionais e também do próprio SQL Server?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    segunda-feira, 23 de julho de 2012 16:30
    Moderador
  • Junior, primeiro muito obrigada pela explicação. Show!!!

    Por enquanto, como estou no ambiente de desenvolvimento, as duas bases estão na minha máquina.
    A origem é um RESTORE da base do cliente e o destino é uma base que eu criei, com o collate diferente.

    O SQL Server está em inglês e todos os usuários estão também configurados para inglês. Mas o meu Windows está em português.
    Esse pode ser o problema?

    Eu achei que não enfrentaria problemas com acentuação sendo que os dois collates são accent insensitive.

    Os servidores de homologação e produção, nos quais o projeto será publicado após o término da implementação, estão com o SO em inglês.


    Muito obrigada.


    Mariana Del Nero /* Se a resposta foi útil, não esqueça de marcá-la */

    segunda-feira, 23 de julho de 2012 17:35
  • Mariana,

    Sim o idioma do Windows não poderia interferir mas em alguns casos as configurações regionais em relação a linguagem do usuário e collate de banco podem ser incompatíveis dependendo do tratamento que a sua aplicação poderá estar realizando.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]

    sexta-feira, 31 de agosto de 2012 17:40
    Moderador