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 / 124546
Accepted
ReynierPM
ReynierPM
Asked: 2015-12-25 10:58:39 +0800 CST2015-12-25 10:58:39 +0800 CST 2015-12-25 10:58:39 +0800 CST

Tipo de dados para número de telefone: VARCHAR, INT ou BIGINT?

  • 772

Então essa será a pergunta fictícia do ano, mas eu preciso perguntar já que não é a primeira vez que passo por isso. Dê uma olhada na seguinte definição de tabela:

insira a descrição da imagem aqui

Dê uma olhada na coluna from_numberque é VARCHAR(45)agora, mas conterá um número de telefone. Como não sei quantos números um telefone pode ter em todo o mundo, estou tentando cobrir quase todos eles. Eu quero manter a integridade do banco de dados o máximo possível, então acho que VARCHARnão é um tipo adequado para armazenar esse tipo de informação - talvez eu esteja errado, você me diz - então estou pensando em mudar para INTou mesmo BIGINT.

Quando estou definindo uma coluna no Workbench devo especificar o número entre parênteses ()não em todos os casos, mas naqueles que mencionei anteriormente tive que fazer. Então, se eu fizer isso: BIGINT()recebi este erro:

insira a descrição da imagem aqui

O que me orienta a ler um pouco sobre esse tipo de MySQL aqui . Basicamente a informação é esta:

Um grande número inteiro. ... O intervalo não assinado é de 0 a 18446744073709551615.

O que me faz perguntar: qual valor devo definir para parênteses quando estou definindo um BIGINT()tipo. (Estou usando o BIGINT porque não sei se o INT pode conter tantos números quanto um telefone poderia ter - talvez eu também esteja errado). Qual é a maneira correta de criar|projetar uma coluna em bancos de dados MariaDB/MySQL?

De qualquer forma gostaria de saber sua opinião, experiência e claro gostaria de obter uma resposta

Nota: Estou usando a última edição do MySQL Workbench para criar o diagrama ER. Estou usando também MariaDB 10.0.x

mysql mariadb
  • 4 4 respostas
  • 110065 Views

4 respostas

  • Voted
  1. Best Answer
    Hannah Vernon
    2015-12-25T11:19:56+08:002015-12-25T11:19:56+08:00

    Como você lidaria com um número de telefone com um ramal, como "+1-000-000-0000 ext 1234" ?

    Observe que o "+" indica que as regras de discagem internacional devem ser aplicadas; então da América do Norte, o sistema reconhece automaticamente "011" na frente de chamadas internacionais, etc.

    Além disso, e os números de telefone como "1-800-DBA-HELP"?

    Eu normalmente armazenaria números de telefone como texto. Dito isto, realmente depende de quão crítica é sua coluna de número de telefone. Se você estiver executando discadores automatizados dessa coluna, você realmente deseja garantir que apenas os números sejam incluídos e os dados representem números de telefone bem formados.

    Você pode ter colunas separadas para ramais e números de telefone com texto, como o exemplo "1-800-DBA-HELP" que forneci.

    • 15
  2. Vérace
    2015-12-27T13:00:38+08:002015-12-27T13:00:38+08:00

    Anteriormente estava escrito:

    "Com MariaDB você pode usar um computedcampo para extrair apenas os dígitos para um discador automático. Também funciona para MySQL 5.7."

    Em resposta à pergunta do OP sobre isso ("você pode explicar um pouco o que você está me dizendo?"), aqui está uma explicação.

    Muitos sistemas de banco de dados já introduziram esse recurso. Estes são campos que são conhecidos como " computed", " virtual" ou " generated" que são derivados de valores em outros campos. O poder deste recurso irá variar dependendo do seu RDBMS. Eu sei que Oracle, Firebird, MariaDB e agora MySQL 5.7 os têm. Outros provavelmente também o fazem.

    Um exemplo fácil seria ter uma coluna de sobrenome e ter uma coluna computada que "armazena" (lembre-se, elas podem ser virtuais - ou seja, calculadas em tempo real, ou podem ser armazenadas fisicamente em disco) o sobrenome em letras maiúsculas, tornando assim pesquisa mais fácil. Dessa forma, você só precisa pesquisar em CAPs (usando, digamos, LIKE), sabendo que os dados que estão sendo pesquisados ​​no [ computed| virtual| generated] campo está em texto em maiúsculas.

    O conceito do MySQL 5.7 é explicado aqui e aqui . Está no MariaDB há um pouco mais de tempo e o conceito também é explicado aqui . Alguns usos possíveis são sugeridos aqui , mas você está realmente limitado apenas pela sua imaginação. Eles podem ser vistos como um substituto conveniente (e menos propenso a erros) para gatilhos.

    Para o seu caso de uso específico, você pode derivar um número discável de um campo de texto "+" --> "00" (ou qualquer que seja o seu código de discagem internacional). Apenas um pensamento.

    • 2
  3. greenlitmysql
    2017-05-02T12:24:58+08:002017-05-02T12:24:58+08:00

    Hum. Os números de telefone são feitos de números. Usar varchar permite que o usuário armazene qualquer tipo de formatação, com ( ou não, com - ou . e cria rapidamente uma confusão com seus dados. Um formato de telefone # depende do "país", a máscara deve ser vinculada ao país. Extensão é uma extensão e é opcional, então deve ser armazenado em um "campo de extensão". (int também). Para 1-800-DBA-HELP, eu converteria isso rapidamente e armazenaria o número real. Se você realmente precisar deles telefone legível por humanos #, armazene-o em um campo varchar separado.

    • 1
  4. Rathish Kumar B
    2017-05-04T03:05:02+08:002017-05-04T03:05:02+08:00

    Eu costumo armazenar os números de telefone em texto simples . A formatação e a exibição deixam para o código do cliente.

    Aqui, mais do que, como você armazena? o que você vai fazer com esse número de telefone é muito importante.

    Se sua empresa deseja realizar chamadas de saída do seu sistema, o aplicativo extrairá apenas números. Se sua empresa quiser fazer chamadas internacionais , armazene o código do país e o código de área em colunas separadas.

    Caso sua empresa deseje relatórios , o aplicativo irá formatar e exibir com extensão e números separadamente.

    Do meu entendimento, projetar um modelo de dados universal para número de telefone não é uma boa ideia. Cada país tem diferentes números, ramais e código de área além do código do país. Além disso, fiquei sabendo que alguns países não têm código de área.

    Isso pode não responder à sua pergunta, mas ajudará a ampliar nossa compreensão. Obrigada.

    • 1

relate perguntas

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

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