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 movietbl values(1, '쉰들러 리스트', '스필버그', '리암 니슨', load_file('D:\Code\movies\Schindler.txt'), load_file('D:\Code\movies\Schindler.mp4'));
select * from movietbl;
어디감???
mysql 기본 설정을 확인해보면 출력 허용된 용량이 4MB 정도고, 신뢰할 수 있는 경로에 위 file 경로도 등록되어 있지 않으므로 등록해야 한다.
신뢰할 수 있는 경로는 기본적으로 설치된 경로의 Uploads 폴더가 지정되어 있다.
필자의 경우 (C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\)
Linux에서는 /etc/my.cnf를 보면 된다.
show variables like 'max_allowed_packet'; -- 출력 허용된 용량(default 4MB)
show variables like 'secure_file_priv'; -- 신뢰할 수 있는 파일 경로
// C:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
우선 신뢰할 수 있는 경로를 추가하기 위해
C:\ProgramData\MySQL\MySQL Server 8.0 경로에 존재하는 my.ini를 수정해보도록하자.
vim으로 수정해도 되고 그냥 메모장으로 열어서 수정해도 된다.
아래와 같이 수정해주자
# Secure File Priv.
# 이 속성은 여러개 있어도 되지만 맨 마지막 것만 적용된다.
# 따라서 그냥... 기본값으로 쓰는 것도 나쁘지 않다만 연습삼아 바꿔보자
secure-file-priv="C:/ProgramData/MySQL/MySQL Server 8.0/Uploads"
secure-file-priv="D:\Code\movies"
# default 4M에서 1024M로 수정~
# The maximum size of one packet or any generated or intermediate string, or any parameter sent by the
# mysql_stmt_send_long_data() C API function.
max_allowed_packet=1024M
이런 작업을 거치면 longtext는 보인다. 그러나 longblob은 보이지 않는다.
해당 blob을 확인하기 위해서는 다운로드 받아야 한다.
text 는 outfile로 다운로드받고, blob은 dumpfile로 다운로드 받는다.
select movie_script from movietbl where movie_id=1
into outfile 'D:\Code\movies\script.txt'
lines terminated by '\\n'; -- 이 녀석은 줄바꿈 문자도 그대로 저장하기 위한 옵션
select movie_film from movietbl where movie_id=1 into dumpfile 'D:\Code\movies\moive.mp4';
'DB, ORM > 🧊 MySQL' 카테고리의 다른 글
inner join, outer join / union과 in/not in (0) | 2020.11.04 |
---|---|
pivot, json 관련 함수들 (0) | 2020.11.02 |
MySQL 함수와 @변수의 사용 (0) | 2020.10.31 |
MySQL 데이터 형식, 형 변환 (0) | 2020.10.30 |
[Workbench] 간략한 사용 방법, 사용자 관리, tips (0) | 2020.10.30 |