2017-02-06 3 views
-1

MySQL DB에 저장하는 base64_encoded 문자열이 많이 있습니다. 그러나 base64_encoded 문자열이 33 % 더 커지므로 내 DB 저장 공간을 최적화 할 수있는 방법을 알고 싶습니다. 이제 LONGTEXT 필드에 내 문자열을 저장하지만 LONGBLOB 또는 이와 비슷한 것은 무엇입니까? 그래서, 어떻게 저장 공간을 절약 할 수 있도록 (현재 base64로 인코딩 된) 내 데이터를 더 최적화 할 수 있습니까? (값을 선택할 때 여전히 안전하게 다시 base64로 인코딩 할 수 있어야합니다).Base64 MySQL 저장 공간 최적 화

감사

+0

[바이너리 데이터가 MySQL에 제대로 저장되지 않았습니다.] (https://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql#comment71308438_42067769)에서 의견에 따르면 : * " 질문은 내가 base64_encoded 데이터의 저장소를 최적화하는 방법입니다 ... mysql에서 "*. 이 질문은 이전 질문과 어떻게 다른가요? 코드를 보여줘야합니다. – jww

+0

[바이너리 데이터가 MySQL에 제대로 저장되지 않음]의 가능한 복제본 (http://stackoverflow.com/questions/42064646/binary-data-not-stored-properly-in-mysql) – jww

+0

@jww - 이러한 링크는 blob을 문자열로 처리해서는 안됩니다. –

답변

0

당신이 TO_BASE64/FROM, 5.6.1 이상이있는 경우는()의 MySQL에서 사용할 수 있습니다.

Base64는 일반 ASCII 텍스트입니다. TEXT에 base64를 저장하면 문제가 없습니다. 장난 꾸러기 인물이 없기 때문에 탈출 할 필요가 없습니다. 그러나 FROM_BASE64의 결과를 저장하려면 BLOB (약간의 크기)이 필요합니다. FROM_BASE64 원본 (프리베이스 64)의 데이터를 재구성한다

INSERT INTO t (myblob) VALUES (FROM_BASE64('UmljayBKYW1lcw==')); 

SELECT TO_BASE64(myblob) FROM t; 

그래서

....

더 나은 대신 압축하는 것입니다 :

INSERT INTO t (myblob) VALUES (COMPRESS('UmljayBKYW1lcw==')); 

SELECT UNCOMPRESS(myblob) FROM t; 

그런 식으로, 당신은 (아마도) 원의 (전 64 기수) 데이터를 압축했다 33 % _if 이상을 얻을 것이다. 원본이 .jpg 또는 이미 압축 된 다른 데이터 인 경우 COMPRESS 대신 FROM_BASE64을 사용할 수도 있습니다.

+0

그래서 to_base64 압축을 사용하면 33.3 %의 오버 헤드를 줄일 수 있습니다. base64_encoded가 있습니까? 그래서 COMPRESS (TO_BASE64 (STRING))를 사용하고 UNCOMPRESS (FROM_BASE64 (SELECTED STRING))를 선택하겠습니까? –

+0

당신이 무엇을 시작 하느냐에 달려 있습니다. 뭔가 base64 문자열을 생성하는 것처럼 들리는 및 테이블에 압축식으로 저장할 싶어요. 이 경우 압축하기 전에 변환 TO_BASE64를 반복 할 필요가 없습니다. (참고 : 나는 내 대답을 고쳤다.) –

+0

릭, 고마워. 게다가 첫 번째 예제에서 FROM_BASE64를 두 번 호출하는 것이 맞습니까? –