본문 바로가기

Story/mysql

디비내용을 csv 로 저장하기

반응형


- 서버상에서 명령어 사용하여 파일로 저장
mysql -u아이디 -p비밀번호 디비명 -B -e "select * from user limit 1;" | sed 's/\t/","/g;s/^/"/;s/$/"/;s/\n//g' > filename.csv

- php 에서 csv download 로 구현 할 경우 
      디비용량이 클경우 (1만건이 넘어가니 브라우져가 멈추는현상까지 나타났다.) 일반적인 방법으로 처리할수 없을경우가 있다.
      아래의 방법으로 처리하여 7만건을 다운로드 받을때 2분이내로 처리되는걸 확인했다.

<?
$query = "
    select * from user limit 1
";

exec('mysql -u아이디 -p비밀번호 디비명 -B -e " '.$query.' ;" | sed \'s/\t/","/g;s/^/"/;s/$/"/;s/\n//g\' ',$_list);

header( "Cache-Control: must-revalidate, post-check=0, pre-check=0");
header( "Content-type: application/vnd.ms-excel;charset=euc-kr" );
header( "Content-Disposition: attachment; filename=\filename.csv\"" );
header( "Content-Description: PHP4 Generated Data" );

echo '"아이디","이름","등급","전화","휴대폰","SMS수신여부","이메일","이메일 수신여부","주소","가입일"';
echo "\n";

for( $i = 1 ; $i < count($_list) ; $i++ ){
 echo ($_list[$i]);
 echo "\n";
}
exit;
?>


참고로 asp mssql

<%
Response.ContentType = "text/csv"
Response.AddHeader "content-disposition","attachment; filename=NAME OF FILE TO DOWNLOAD.csv"


set objRs = objCn.execute(sSql)
 If Not objRs.EOF Then
  For i=0 to objRs.Fields.Count-1
   response.write objRs.Fields(i).Name
   response.write","
  Next
  response.write "," & vbcrlf
  Do Until objRs.EOF
   For i = 0 To objRs.fields.Count-1
    response.write """" & objRs.fields(i)  & """" & ","
   Next
   response.write "," & vbcrlf
  objRs.MoveNext
  Loop
 End If
objRs.Close
Set objRs=Nothing
%>

반응형