상황)
영화 대본과 영상 데이터를 저장하는데 데이터가 NULL로 들어있는 경우
max_allowed_packet의 용량이 4MB 정도로 너무 작기 때문이고
secure_file_priv의 보안 허용 경로에 현재 작업하는 폴더의 경로를 추가 시켜야 보안 허용이 된다.
Create database moviedb;
use moviedb;
Create TABLE movietbl
(movie_id INT,
movie_title VARCHAR(30),
movie_director VARCHAR(20),
movie_star VARCHAR(20),
movie_script LONGTEXT,
movie_film LONGBLOB
) DEFAULT CHARSET = utf8mb4;
INSERT INTO movietbl VALUES (
1,
'쉰들러 리스트',
'스필버그',
'리암 니슨',
load_file('C:\SQL/Schindler.txt'),
load_file('C:\SQL/Schindler.mp4'));
SELECT * from movietbl; -- 대본과 영상이 저장되지 않았다.
-- 이유 :
-- 1. max_allowed_packet의 값이 4MB 정도로 너무 작기때문이다.
show variables LIKE 'max_allowed_packet'; -- 크기확인 4MB
-- 2. 해당 폴더가 보안상 허용이 되어야 하기 때문이다.
SHOW variables LIKE 'secure_file_priv'; -- 보안 허용된 폴더가 나오는데 여기에 추가해야함
⭐작업 순서
CD %PROGRAMDATA%
CD MySQL
CD "MySQL Server 8.0"
DIR 폴더에 있는 파일 보여줌
NOTEPAD my.ini
기존 아래에 새로 추가
설정 후 저장
⭐mysql을 재실행 해야 한다.
명령어
NET STOP MySQL
NET START MySQL
👍
TRUNCATE movietbl; -- 기존 행 전부삭제
INSERT INTO movietbl VALUES (
1,
'쉰들러 리스트',
'스필버그',
'리암 니슨',
LOAD_FILE('C:/SQL/Schindler.txt'),
LOAD_FILE('C:/SQL/Schindler.mp4'));
INSERT INTO movietbl VALUES (
2,
'쇼생크탈출',
'프랭크다라본트',
'팀 로빈스',
load_file('C:/SQL/Shawshank.txt'),
load_file('C:/SQL/Shawshank.mp4'));
INSERT INTO movietbl VALUES (
3,
'라스트모히칸',
'마이클 만',
'다니엘 데이 루이스',
load_file('C:/SQL/Mohican.txt'),
load_file('C:/SQL/Mohican.mp4'));
-- 영화 대본 다운로드
SELECT movie_script FROM movietbl WHERE movie_id=1
INTO OUTFILE 'C:/SQL/Schindler_out.txt'
LINES TERMINATED BY '\\n';
-- 영화 영상 다운로드
SELECT movie_film FROM movietbl WHERE movie_id=3
INTO DUMPFILE 'C:/SQL/Mohican_out.mp4' ;
SELECT * FROM movietbl;