데이터베이스 필드의 저장 가능한 길이가 너무 작게 설정되어 설정된 문자 유형의 저장 한계에 도달하여 오류가 발생하고 데이터 저장에 일반적으로 사용되는 데이터 유형

프로젝트 시나리오:

提示:这里简述项目相关背景:

MySQL 데이터베이스를 사용하는 경우 데이터베이스 필드의 저장 길이가 너무 작게 설정되어 설정된 문자 유형의 저장 제한에 도달하여 데이터 저장 시 오류가 발생했습니다.

문제 설명

提示:这里描述项目中遇到的问题:

데이터베이스 필드의 저장 길이가 너무 작게 설정되었기 때문에 데이터 저장에 대한 오류가 보고되고 오류 메시지는 다음과 같습니다.

Cause: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Data too long for column 'remark' at row 1


원인 분석:

팁: 여기에 문제 분석을 입력하십시오.

데이터베이스 필드에 저장할 수 있는 문자 길이가 너무 작게 설정되어 있고 필드의 저장 유형이 적절한 유형으로 선택되지 않았습니다 데이터 유형마다 다른 문자 길이를 저장합니다.
여기에 이미지 설명 삽입
따라서 데이터베이스의 필드에 대해 합리적인 저장 공간을 설정해야 합니다. 그렇지 않으면 저장 실패 또는 공간 낭비로 이어집니다.

해결책:

도움말: 여기에 문제에 대한 구체적인 해결책을 입력하세요.

적절한 필드 유형을 선택하고 실제 필요에 따라 적절한 문자 길이를 설정해야 합니다.

요약하다:

필드 유형 설계 및 선택

1. 하나의 테이블*에 너무 많은 필드가 있으면 안 됩니다.

최대 30개를 권장합니다.

더 많은 분야는 성능 저하로 이어지고 개발 난이도가 높아질 것입니다.

**

2. 작고 단순하며 적합한 데이터 유형 사용*

1. 문자열 유형

고정 길이에는 char , 비고정 길이에는 varchar를 사용 하고 적절하고 충분한 공간을 할당하십시오.

char 이 쿼리 되면 끝에 있는 공백이 제거됩니다.

b. 십진수 유형

일반적으로 공간을 덜 차지하는 float 또는 double 을 사용할 수 있지만 스토리지는 정밀도를 잃을 수 있습니다.

Decimal은 정확한 소수점을 저장할 수 있으며 재무 데이터 또는 경도 요구 사항을 저장할 때 소수점을 사용할 수 있습니다.

C. 시간 및 날짜

일반적으로 타임스탬프를 사용하십시오 . 공간을 덜 차지하고 자동으로 시간대를 변환하므로 지역 시차에 신경 쓸 필요가 없습니다.

datetimetimestamp는 가장 작은 세분성인 초만 저장할 수 있으며, BIGINT 유형을 사용하여 마이크로초 수준에서 타임스탬프를 저장할 수 있습니다.

d. 빅 데이터 blob 및 텍스트

blobtext는 매우 큰 데이터를 저장하도록 설계된 문자열 데이터 유형이지만 일반적으로 사용을 피하는 것이 좋습니다.

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), 이진 데이터 유형
여기에 이미지 설명 삽입

추천

출처blog.csdn.net/YHLSunshine/article/details/129388628