none
nvarchar x varchar RRS feed

  • Pergunta

  • Qual a principal diferença entre eles? Existe algum caracter que o varchar ñ consegue armazenar que o nvachar consegue?!
    valeu
    sábado, 18 de outubro de 2008 23:18

Respostas

  • Olá Bruno,

     

    A grosso modo, no mundo CHAR e VARCHAR, cada caractér ocupa 1 byte. Um byte é um conjunto de 8bits e considerando todas as posições desses bits (ligado e desligado) podemos ter 256 combinações (2^8). Isso quer dizer que um byte é capaz de representar 256 combinações diferentes. Para o alfabeto americano isso é mais que suficiente, para o alfabeto latino isso também é mais que suficiente.

     

    O problema começa quando consideramos alfabetos árabes, asiáticos, gregos, etc. Nesse caso, se formos considerar todas as letras e caractéres possíveis iremos extrapolar todas as 256 combinações que 1 byte pode representar. Para essa situações surgiu o NVARCHAR e o NCHAR. Para esses tipos de dados cada caractér ocupa 2bytes. Se um byte pode expressar 256 combinações (2^8), dois bytes podem armazenar 65536 combinações (2^16). Com essa quantidade de combinações, é possível representar qualquer caractér existente só que o custo de armazenamento fica maior.

     

    Se você utilizar os tipos CHAR e VARCHAR e tentar armazenar determinados caractéres, o universo de caractéres disponíveis ficará restrito a collation que você escolheu. Se você tentar armazenar outro caractér que não esteja contemplado por essa collation, esse caractér será convertido para algum aproximado. Se você escolher NCHAR e NVARCHAR, então essa limitação não ocorre.

     

    [ ]s,

     

    Gustavo

    sábado, 18 de outubro de 2008 23:27
    Moderador

Todas as Respostas

  • Olá Bruno,

     

    A grosso modo, no mundo CHAR e VARCHAR, cada caractér ocupa 1 byte. Um byte é um conjunto de 8bits e considerando todas as posições desses bits (ligado e desligado) podemos ter 256 combinações (2^8). Isso quer dizer que um byte é capaz de representar 256 combinações diferentes. Para o alfabeto americano isso é mais que suficiente, para o alfabeto latino isso também é mais que suficiente.

     

    O problema começa quando consideramos alfabetos árabes, asiáticos, gregos, etc. Nesse caso, se formos considerar todas as letras e caractéres possíveis iremos extrapolar todas as 256 combinações que 1 byte pode representar. Para essa situações surgiu o NVARCHAR e o NCHAR. Para esses tipos de dados cada caractér ocupa 2bytes. Se um byte pode expressar 256 combinações (2^8), dois bytes podem armazenar 65536 combinações (2^16). Com essa quantidade de combinações, é possível representar qualquer caractér existente só que o custo de armazenamento fica maior.

     

    Se você utilizar os tipos CHAR e VARCHAR e tentar armazenar determinados caractéres, o universo de caractéres disponíveis ficará restrito a collation que você escolheu. Se você tentar armazenar outro caractér que não esteja contemplado por essa collation, esse caractér será convertido para algum aproximado. Se você escolher NCHAR e NVARCHAR, então essa limitação não ocorre.

     

    [ ]s,

     

    Gustavo

    sábado, 18 de outubro de 2008 23:27
    Moderador
  • Muito obrigado! foi a melhor explicação que encontrei na internet até agora!

    grande abraço,
    Bruno
    domingo, 19 de outubro de 2008 02:15
  • Bom Dia Bruno,

     

    Fico lisonjeado pelo elogio. Tomára que você já tenha procurado bastante (rs).

     

    [ ]s,

     

    Gustavo

     

    domingo, 19 de outubro de 2008 13:01
    Moderador