由導出CSV文件格式錯誤的小結

問題描述:
目前、通常狀況下,在web開發過程當中,使用導入導出報表的情形不少。咱們先說導出。項目數據量多導出行數較多,50萬行左右,選擇的是csv方式導出。針對如下應用場景,導出過程有幾點須要注意的的地方。
(測試使用環境、php7.1,mysql5.7.22,mysql5.5.53,mac自帶numbers 6.0版本,Windows系統 Excel2007版)php

應用場景:
一、用戶只習慣用Excel處理數據,csv導出可是用excel打開。
二、不管導入導出,用戶均對數據表格格式沒有要求(邊框、底紋、對齊等),僅對數據格式有基本要求(數字、文本、浮點數等)。
三、後端對xls/xlsx大文件的導入性能較差。(目前php導出excel方式佔用內存較大。大數據導出極可能就是內存溢出)mysql

導出注意點:
一、導出數據龐大,儘量少用漢字。好比有些狀態字段,數據庫存的就是數字或只佔一個字節,徹底換成中文狀態的話,可能達6個字節甚至更多。效率受影響。如果必需要用中文形式。儘量精簡。web

二、其餘常見問題。先看一組圖:
這是待導出的數據
這是初始要導出的數據
圖片描述
這是csv格式展現,這是咱們想要的結果。
圖片描述
這是windows系統excel2007版本打開的樣子。
仔細觀察,咱們發現了幾個問題:zifunumebr字段前導0都沒了。number字段有個長整型變成了科學計數法。zifu字段中文漢字變成了亂碼。最後一行zifu、fudian字段在excel中顯示的時候合併了。
這裏解決方法其實也很簡單。就是在插入字段後面加一個製表符 「t」,注意,不能使用單引號。這樣一來除了中文亂碼不能解決,其餘類型字段都能解決。中文亂碼解決的話,其實也很簡單,iconv函數,將urf-8轉爲GBK編碼,在Excel中打開就不會錯了sql

相關文章
相關標籤/搜索