AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 167645
Accepted
carlo.borreo
carlo.borreo
Asked: 2017-03-21 07:40:03 +0800 CST2017-03-21 07:40:03 +0800 CST 2017-03-21 07:40:03 +0800 CST

SQL Server: insira caracteres franceses sem usá-los em uma consulta

  • 772

Eu tenho uma consulta inserindo um caractere especial em uma tabela, por exemplo:

INSERT drinks VALUES( 'Café' )

Eu gostaria de fazer a mesma coisa, da maneira mais portátil possível, usando apenas ASCII na minha consulta, por exemplo:

INSERT drinks VALUES( 'Caf' + <something> )

É possível?

sql-server sql-server-2016
  • 3 3 respostas
  • 6278 Views

3 respostas

  • Voted
  1. Solomon Rutzky
    2017-03-21T14:44:38+08:002017-03-21T14:44:38+08:00

    da maneira mais portátil possível, usando apenas ASCII na minha consulta

    Exigir somente ASCII tornará mais difícil atingir esse objetivo de maneira realmente confiável. Se você tiver apenas um banco de dados ou se tiver vários bancos de dados com o mesmo Collation padrão, usar CHAR(asciiValue)conforme mencionado na resposta de @Nelson funcionaria. Apenas tenha em mente que o caractere que você obtém usando CHAR(someValue)depende do Collation padrão do banco de dados "atual" ou "ativo" no qual a consulta está sendo executada. O Collation determina a página de código, e isso pode ser diferente para cada banco de dados. O seguinte simula o que aconteceria se o mesmo valor ASCII fosse usado em diferentes bancos de dados que tivessem agrupamentos padrão diferentes que utilizassem páginas de código diferentes:

    DECLARE @Test TABLE
    (
      [Latin1] VARCHAR(10) COLLATE Latin1_General_100_CI_AS_SC,
      [Hebrew] VARCHAR(10) COLLATE Hebrew_100_CI_AS_SC,
      [Greek] VARCHAR(10) COLLATE Greek_100_CI_AS_SC
    );
    
    SELECT CONVERT(BINARY(1), 233);
    
    INSERT INTO @Test ([Latin1], [Hebrew], [Greek]) VALUES (0xE9, 0xE9, 0xE9);
    
    SELECT * FROM @Test;
    -- é      י       ι
    

    quando envio consultas para uma contraparte para realizar alterações no banco de dados, o arquivo de texto é aberto e editado em máquinas diferentes e os caracteres especiais são danificados.

    ASCII, é inerentemente difícil de tornar portátil. Os arquivos de texto ASCII não têm a capacidade de indicar qual codificação foi usada para criá-los. O problema que você está vendo é que o arquivo está sendo escrito com uma página de codificação/código e depois sendo lido com outra. Se você abrir o arquivo em seu computador, ele ficará exatamente como deveria? Ou já foi alterado? Como éexiste em muitas páginas de código, suspeito que ainda pareça bom em seu computador, o que significa que está sendo lido com a codificação errada.

    Uma maneira de evitar isso é garantir que a pessoa que abre o arquivo o abra com a codificação correta. Você pode usar a caixa de diálogo Abrir arquivo no SSMS para selecionar um arquivo, mas não clique no botão Abrir . Em vez disso, clique na seta para baixo no lado direito do botão Abrir e selecione Abrir com... . Em seguida, selecione SQL Query Editor with Encoding e clique em OK . Uma nova caixa de diálogo aparecerá e será uma lista suspensa de codificações. A lista suspensa será padronizada para (Detecção automática), mas isso não funcionará aqui. Basta selecionar a codificação que você está usando ao salvar o arquivo e clicar em OK .

    Uma maneira mais fácil e confiável é usar uma codificação Unicode (UTF-8 ou UTF-16) com uma marca de ordem de byte. A Byte Order Mark (BOM) é de 2 a 4 bytes no início de um arquivo que indica a codificação usada para criar o arquivo. A BOM é usada para detectar automaticamente a codificação, o que significa que você não precisa informar à pessoa para quem está enviando o arquivo qual codificação usar. E não requer que você use dados Unicode no script; sua declaração atual INSERTcom os VARCHARdados não deve ser afetada.

    Você pode fazer isso indo em Arquivo | Salvar como... Então, assim como na caixa de diálogo Abrir , clique na seta para baixo no botão Salvar e selecione Salvar com codificação . Em seguida, selecione Unicode (UTF-8 com assinatura) - Codepage 65001 ou Unicode - Codepage 1200 e clique em OK .

    • 4
  2. Best Answer
    Nelson
    2017-03-21T08:51:40+08:002017-03-21T08:51:40+08:00

    Use a representação ASCII:

    select 
        ascii('Ç'), -- 199
        ascii('é'), -- 233
        ascii('â'), -- 226
        ascii('ê'), -- 234
        ascii('î'), -- 238
        ascii('ô'), -- 244
        ascii('û'), -- 251
        ascii('à'), -- 224
        ascii('è'), -- 232
        ascii('ù'), -- 249
        ascii('ë'), -- 235
        ascii('ï'), -- 239
        ascii('ü')  -- 252
    
    select 
        char(199),
        char(233),
        char(226),
        char(234),
        char(238),
        char(244),
        char(251),
        char(224),
        char(232),
        char(249),
        char(235),
        char(239),
        char(252)
    

    Então, para o seu exemplo:

    DECLARE @SomeString VARCHAR(20) = 'caf' + CHAR(233)
    INSERT INTO #Table (value1) VALUES (@SomeString) -- café
    
    • 3
  3. Grimaldi
    2017-03-21T10:17:29+08:002017-03-21T10:17:29+08:00
    1. Use uma função para converter de alguma representação compatível com ASCII para a respectiva codificação do seu banco de dados, que esperamos ser Unicode. Existem várias possibilidades, por exemplo, entidades HTML ou esquemas de codificação de URL.
    2. Verifique como seu banco de dados suporta pontos de código Unicode nativamente, por exemplo, como referências do formulário &#999;ou &#xhhhh;ou U+9999.
    • 1

relate perguntas

  • SQL Server - Como as páginas de dados são armazenadas ao usar um índice clusterizado

  • Preciso de índices separados para cada tipo de consulta ou um índice de várias colunas funcionará?

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve