1. 기본 인코딩 설정 문제
프런트엔드 데이터 표시 시 t_news에서 all select *를 쿼리하면 모든 콘텐츠를 찾을 수 있습니다. 그러면 쿼리를 매개변수화할 때 작동하지 않습니다. 예:
'%소스 코드 교육%'와 같은 제목이 발견된 t_news에서 *를 선택하세요.
ID = 1인 t_news에서 *를 선택하세요. 1개의 데이터가 검색되었습니다.
빨간색으로 표시된 필드에 주목하세요. 원래는 latin1이었습니다.
해결책:
Windows에서 MySQL의 구성 파일은 my.ini이며, 일반적으로 설치 디렉터리의 루트 디렉터리에 있습니다.
Linux에서 MySQL의 구성 파일은 my.cnf이며 일반적으로 /etc/my.cnf, /etc/mysql/my.cnf에 위치합니다. 찾을 수 없으면 find 명령을 사용하여 찾을 수 있습니다.
my.ini/my.cnf를 열고 다음 두 필드를 수정하세요.
Ps: 구성 파일을 수정한 후에는 mysql을 다시 시작해야 합니다.
2. 데이터는 롤백되지 않습니다
프로그래밍 중에 Spring은 트랜잭션을 구성하지만 예외가 발생하면 데이터베이스의 데이터가 계속 변경됩니다. 트랜잭션 및 코드 구성에 문제가 없음을 확인한 후 데이터베이스의 특화 가능성을 고려합니다. "Navicat" 도구를 사용하여 테이블을 디자인합니다. "옵션" 열에서 테이블에 사용되는 스토리지 엔진이 MyISAM임을 확인합니다.
MyISAM은 트랜잭션을 지원하지 않습니다. 롤백으로 인해 불완전한 롤백이 발생하고 원자성이 없습니다.
MyISAM을 InnoDB로 변경하세요.
MySQL 구성 파일(my.ini)에도 기본 스토리지 엔진이 있습니다. 테이블 생성 시 특별한 구문이 없으면 기본 스토리지 엔진이 사용됩니다.
3. 대용량 데이터 가져오기 최적화
업무를 하다 보면 필연적으로 대량의 데이터를 가져오는 상황에 직면하게 됩니다. 예를 들어 이전에 백업한 데이터를 쿼리하고, 테스트를 위해 실제 데이터를 로컬로 가져오고, 정기적으로 데이터를 백업 데이터베이스로 가져오는 등의 비즈니스 시나리오가 필요합니다.
MySQL은 데이터 파일을 로드하는 가져오기 방법을 제공합니다. 그러나 구성이 잘못되면 가져오기 속도가 느려질 수도 있습니다.
해결책:
다음 매개변수 값을 늘리십시오. 일반적으로 물리적 메모리의 80%입니다. 그러나 32비트 시스템은 2~3.5G로 제한됩니다.
4. 커스텀 함수 기능 켜기(클라우드 데이터베이스)
가끔 다른 사람의 코드를 실행하거나 서버를 이식할 때 데이터베이스에서 이전에 정의한 기능을 사용할 수 없는 상황이 발생할 수 있습니다. 특히 데이터베이스의 경우 기본적으로 함수 기능이 활성화되어 있지 않아 해당 기능이 실행되지 않습니다.
먼저 기능이 활성화되어 있는지 확인합니다. 아래와 같이:
여기의 사용자 정의 기능은 기본적으로 꺼져 있습니다.
해결책: 사용자 정의 기능을 활성화하려면 "set global log_bin_trust_function_creators = 1;"을 사용하세요.
다시 쿼리:
그러나 이 방법은 임시 해결 방법일 뿐이며 MySQL을 다시 시작한 후에는 기본적으로 기능이 꺼집니다.
사용자 정의 기능을 영구적으로 활성화하려면 구성 파일에 "log-bin-trust-function-creators=1"을 추가해야 합니다.
5. Linux 환경에서 테이블 이름 대소문자 문제
Linux 시스템 환경에서 MySQL 테이블 이름은 기본적으로 대소문자를 구분합니다. 가끔 테이블 이름에 대문자를 잘못 입력하면 쿼리를 찾을 수 없는 경우가 있습니다.
해결책: my.cnf 구성 파일 끝에 "lower_case_table_names=1"을 추가하세요. 그런 다음 MySQL을 다시 시작하십시오.
"lower_case_table_names=1 " "이 문장은 입력문을 강제로 소문자로 만든 후 실행하라는 의미입니다.