Cenário do projeto:
提示:这里简述项目相关背景:
Usando o banco de dados MySQL, porque o comprimento de armazenamento do campo do banco de dados é muito pequeno, o limite de armazenamento do tipo de caractere definido foi atingido, resultando em um erro quando os dados são armazenados
Descrição do Problema
提示:这里描述项目中遇到的问题:
Como o comprimento de armazenamento do campo do banco de dados é muito pequeno, um erro é relatado para armazenamento de dados e a mensagem de erro é a seguinte:
Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'remark' at row 1
Análise de causa:
Dica: Preencha a análise do problema aqui:
O comprimento do caractere que pode ser armazenado no campo do banco de dados é muito pequeno, o tipo de armazenamento do campo não é selecionado como o tipo apropriado e o comprimento do caractere armazenado em diferentes tipos de dados é diferente.
Portanto, precisamos definir um espaço de armazenamento razoável para os campos no banco de dados, caso contrário, haverá falha de armazenamento ou desperdício de espaço.
solução:
Dica: Preencha a solução específica para o problema aqui:
O tipo de campo apropriado deve ser selecionado e o comprimento de caractere apropriado deve ser definido de acordo com as necessidades reais
Resumir:
Design e seleção de tipo de campo
1. Não deve haver muitos campos em uma única tabela*
Recomenda-se um máximo de 30
Mais campos levarão à degradação do desempenho e aumentarão a dificuldade de desenvolvimento
**
2. Use tipos de dados adequados pequenos e simples*
a. Tipo de string
Use char para comprimento fixo , varchar para comprimento não fixo e aloque espaço apropriado e suficiente
Quando char é consultado, o espaço no final será removido
b. Tipo decimal
Em geral, você pode usar float ou double , que ocupam menos espaço, mas o armazenamento pode perder a precisão
Decimal pode armazenar decimais precisos, use decimal ao armazenar dados financeiros ou requisitos de longitude
c. Hora e data
Normalmente tente usar timestamp , pois ocupa menos espaço, e irá converter automaticamente o fuso horário, não precisa se preocupar com a diferença de horário regional
datetime e timestamp podem armazenar apenas a menor granularidade em segundos, você pode usar o tipo BIGINT para armazenar timestamps no nível de microssegundos
d. Blob e texto de big data
blob e text são tipos de dados de string projetados para armazenar dados muito grandes, mas geralmente é recomendado evitar seu uso
O MySQL tratará cada blob e texto como um objeto independente, e o mecanismo de armazenamento fará um processamento especial ao armazenar. Quando o valor é muito grande, o InnoDB usa uma área de armazenamento externo dedicada para armazenamento, armazena o ponteiro na linha e, em seguida, armazena o valor real externamente. Isso pode causar sérias sobrecargas de desempenho
Blob é uma string binária e text é uma string não binária , e ambas podem armazenar uma grande quantidade de informações. O Blob armazena principalmente imagens, informações de áudio, etc., enquanto o texto pode armazenar apenas arquivos de texto simples.
Terceiro, tente definir a coluna como NOT NULL
a. Quando uma coluna que pode ser NULL é indexada, ela ocupa mais espaço de armazenamento. Geralmente, alterar uma coluna que pode ser NULL para NOT NULL traz menos melhorias.
b. Para colunas que podem ser NULL, o MySQL precisa fazer um processamento especial ao usar índices e comparações de valor, o que consome uma certa quantidade de desempenho e é mais difícil de otimizar
Sugestão: Geralmente é melhor especificar as colunas como NOT NULL, a menos que você realmente precise armazenar valores NULL
4. Tente usar inteiro como chave primária
a. Os tipos inteiros geralmente são a melhor escolha para colunas de identidade porque são rápidos e podem usar AUTO_INCREMENT
b. Os tipos de string devem ser evitados como colunas de identidade, pois consomem espaço e geralmente são mais lentos que os tipos numéricos
c. Mais atenção também é necessária para strings completamente "aleatórias". Por exemplo: strings geradas por MD5(), SHAI() ou UUID(). Os novos valores gerados por essas funções também são distribuídos arbitrariamente em um grande espaço, o que pode fazer com que as instruções INSERT e algumas SELECT fiquem lentas
5. Tipo de dados e configuração de comprimento correspondente
Cada coluna da tabela possui um tipo de dado correspondente, que limita (ou permite) os dados armazenados naquela coluna.
Os tipos de dados comuns são: string, numérico, data e hora, tipos de dados binários.
(1), tipo de dados string
(2), tipo de dados numéricos
(3), tipo de dados de data e hora
(4), tipo de dados binários