다음 쿼리의 content
에 사실은 데이터가 더 있는데 그게 잘려서 나온다면:
$sql = $pdo->prepare("SELECT content FROM foo WHERE bar = 'dee'");
$sql->execute();
var_dump($sql->fetchAll(\PDO::FETCH_OBJ));
다음과 같이 처리한다.
ini_set('mssql.textlimit', '2147483647');
ini_set('mssql.textsize', '2147483647');
$pdo->exec('SET TEXTSIZE 2147483647;');
$sql = $pdo->prepare("SELECT content FROM foo WHERE bar = 'dee'");
// 생략
여전히 답 없이 돌아가는 우리 회사.. 사업팀은 네이버 블로그에 작성했던 알록달록한 홍보글을 그대로 복사해서 공식사이트 공지사항에도 쓰고 싶어한다. 물론 그 안에는 다음과 같은 아무짝에도 쓸모없는 HTML 태그들도 방실방실 웃으면서 포함돼 들어와 있다.
<span class="se-fs-fs16 se-ff-system se-style-unset " id="SE-2af68e91-3b2d-448d-947b-c0684e8f9d82" style="margin: 0px; padding: 0px; border: 0px; font-variant: inherit; font-weight: inherit; font-stretch: inherit; font-size: 16px; line-height: inherit; font-family: HelveticaNeue, "Helvetica Neue", helvetica, AppleSDGothicNeo, arial, "malgun gothic", "맑은 고딕", sans-serif, Meiryo; vertical-align: baseline;"></span>
마음 같아서는 다 발라내버린 다음 마크다운 에디터 쓰라고 강제하고 싶지만.. 행여나 사업팀에서 뭐라고 할까봐 그렇게는 못하겠고 그냥 붙여넣기 가능하도록 위지윅을 제공하고 있다.
그랬더니.. 공지사항이 잘린다. 에이 설마 하고 var_dump()
를 찍어봐도 마찬가지다.
string(4096) "(중간 생략) erit; font-size: 12px; line-height: inherit; font-family: "Apple SD Gothic Neo", "맑은 고딕", "Malgun Gothic", 돋움, dotum, sans-serif; vertical-align: baseline; position: relative; color: rgb(0, 0, 0); text-align: center;"><div class="se-component-content se-component-content-fit" style="margin: 0px auto; padding: 0px; border: 0px; font: inherit; vertical-align: baseline; max-width: 800px;"><div cla"
longtext
형이라고 해도 기본값이란 건 있어야 하는 법이다. MSSQL의 경우 php.ini에서 odbc.defaultlrl
설정을 안 해주면 기본적으로 그 값이 4096
이 되는 모양이다.
뭐? 그걸로는 턱도 없지! 내가 지금 뿌려야 하는 텍스트는 네이버 스마트에디터가 무책임하게 만들어놓은 HTML 마크업 문자열이며 그 크기가 족히 188kb
(!!!)에 달하는데 말이다.
하긴 DB 입장에서는 이해 못할 바도 아니다. 이렇게 큰 텍스트 자료를 왜 파일로 떨구지 않고 인덱싱과 정렬과 검색이 가능한 하나의 자료로서 DB에 저장해놓고 쓰려고 드느냐 이거지. 지금껏 잘 쓰고 있던 DBeaver가 이 컬럼 데이터 미리보기를 시키면 무조건 크래시를 일으키는데... 그것만 보아도 이게 얼마나 수상쩍은 사태인지 알 수가 있다.
사실 이건 위지윅 에디터가 잘못이다. 고객의 텍스트를 직접 입력받는 입장이면 최소한의 thresholding은 해 줘야지 말이다. 위에 첨부한 span
태그 같은 innerText
가 전혀 없는 노드 정도는 검출해서 날려줘도 되지 않을까 싶은데 말이다. 그걸 에라 모르겠다고 입력받은 그대로 올리니 이모양 이꼴이 나는 것이다.
아무튼 백방으로 검색해서 겨우 답을 찾았고 적용을 했더니 일단 되긴 된다.
textarea
를 줄 때는, 사용자들이 거기에 100KB 이상의 글을 적어넣을 수도 있다는 걸 한번쯤은 되새겨 보자.