프로젝트 시나리오:
提示:这里简述项目相关背景:
MySQL 데이터베이스를 사용하는 경우 데이터베이스 필드의 저장 길이가 너무 작게 설정되어 설정된 문자 유형의 저장 제한에 도달하여 데이터 저장 시 오류가 발생했습니다.
문제 설명
提示:这里描述项目中遇到的问题:
데이터베이스 필드의 저장 길이가 너무 작게 설정되었기 때문에 데이터 저장에 대한 오류가 보고되고 오류 메시지는 다음과 같습니다.
Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'remark' at row 1
원인 분석:
팁: 여기에 문제 분석을 입력하십시오.
데이터베이스 필드에 저장할 수 있는 문자 길이가 너무 작게 설정되어 있고 필드의 저장 유형이 적절한 유형으로 선택되지 않았습니다 데이터 유형마다 다른 문자 길이를 저장합니다.
![여기에 이미지 설명 삽입](https://img-blog.csdnimg.cn/0cfcece825874adcb4a76f212d356b64.png)
따라서 데이터베이스의 필드에 대해 합리적인 저장 공간을 설정해야 합니다. 그렇지 않으면 저장 실패 또는 공간 낭비로 이어집니다.
해결책:
도움말: 여기에 문제에 대한 구체적인 해결책을 입력하세요.
적절한 필드 유형을 선택하고 실제 필요에 따라 적절한 문자 길이를 설정해야 합니다.
요약하다:
필드 유형 설계 및 선택
1. 하나의 테이블*에 너무 많은 필드가 있으면 안 됩니다.
최대 30개를 권장합니다.
더 많은 분야는 성능 저하로 이어지고 개발 난이도가 높아질 것입니다.
**
2. 작고 단순하며 적합한 데이터 유형 사용*
1. 문자열 유형
고정 길이에는 char , 비고정 길이에는 varchar를 사용 하고 적절하고 충분한 공간을 할당하십시오.
char 이 쿼리 되면 끝에 있는 공백이 제거됩니다.
b. 십진수 유형
일반적으로 공간을 덜 차지하는 float 또는 double 을 사용할 수 있지만 스토리지는 정밀도를 잃을 수 있습니다.
Decimal은 정확한 소수점을 저장할 수 있으며 재무 데이터 또는 경도 요구 사항을 저장할 때 소수점을 사용할 수 있습니다.
C. 시간 및 날짜
일반적으로 타임스탬프를 사용하십시오 . 공간을 덜 차지하고 자동으로 시간대를 변환하므로 지역 시차에 신경 쓸 필요가 없습니다.
datetime 및 timestamp는 가장 작은 세분성인 초만 저장할 수 있으며, BIGINT 유형을 사용하여 마이크로초 수준에서 타임스탬프를 저장할 수 있습니다.
d. 빅 데이터 blob 및 텍스트
blob 및 text는 매우 큰 데이터를 저장하도록 설계된 문자열 데이터 유형이지만 일반적으로 사용을 피하는 것이 좋습니다.
MySQL은 각 블롭 과 텍스트를 독립 객체로 취급 하고 저장 엔진은 저장 시 특수 처리를 수행합니다.값이 너무 크면 InnoDB는 저장을 위해 전용 외부 저장 영역을 사용하고 행에 포인터를 저장한 다음 저장합니다. 외부의 실제 값. 이로 인해 심각한 성능 오버헤드가 발생할 수 있습니다.
Blob은 이진 문자열이고 텍스트는 이진이 아닌 문자열이며 둘 다 많은 양의 정보를 저장할 수 있습니다. Blob은 주로 사진, 오디오 정보 등을 저장하는 반면 텍스트는 일반 텍스트 파일만 저장할 수 있습니다.
셋째, 열을 NOT NULL로 설정하십시오.
a. NULL이 될 수 있는 컬럼을 인덱싱하면 더 많은 저장 공간을 차지하게 되는데, 일반적으로 NULL이 될 수 있는 컬럼을 NOT NULL로 변경하는 것은 성능 향상이 적습니다.
b. NULL이 될 수 있는 열의 경우 MySQL은 인덱스 및 값 비교를 사용할 때 특정 처리를 수행해야 하므로 일정량의 성능을 소모하고 최적화하기가 더 어렵습니다.
제안: 실제로 NULL 값을 저장해야 하는 경우가 아니면 일반적으로 열을 NOT NULL로 지정하는 것이 가장 좋습니다.
4. 정수를 기본 키로 사용해보세요.
정수 유형은 일반적으로 빠르고 AUTO_INCREMENT를 사용할 수 있기 때문에 ID 열에 가장 적합합니다.
b. 문자열 유형은 공간을 많이 차지하고 일반적으로 숫자 유형보다 느리므로 ID 열로 사용하지 않아야 합니다.
c.완전히 "무작위" 문자열인 경우에도 더 많은 주의가 필요합니다. 예: MD5(), SHAI() 또는 UUID()에 의해 생성된 문자열. 이러한 함수에 의해 생성된 새로운 값도 넓은 공간에 임의로 분산되어 INSERT 및 일부 SELECT 문이 느려질 수 있습니다.
5. 데이터 타입 및 해당 길이 설정
각 테이블 열에는 해당 열에 저장된 데이터를 제한(또는 허용)하는 해당 데이터 유형이 있습니다.
일반적인 데이터 유형은 문자열, 숫자, 날짜 및 시간, 이진 데이터 유형입니다.
(1), 문자열 데이터 유형
(2), 숫자 데이터 유형
(3), 날짜 및 시간 데이터 유형
(4), 이진 데이터 유형