這兩天在做資料匯出,真實折磨死了,記錄下來。匯出的格式是csv。
由於我們的資料量比較大,匯出到excel時,幾百萬上千萬行的時候用程式去寫入肯定是不行,所以自然就想到了mysql的outfile功能,但是這個方面好像沒有匯出標題的功能,只能匯出資料,然後我就想先導出資料,然後再在linux下將標題插入到檔案第一行,思路是沒問題,就是到來倒去,標題寫進去了,但是放到window下就亂碼了。
如果將資料從mysql匯出的時候,用utf8格式,在window下就亂碼,在linux下顯示正常,如果在mysql匯出時用gbk,那麼在linux下就亂碼,真的時候頭痛的問題。
我們肯定是要保證在window下用excel開啟正常,所以,匯出時用gbk。現在問題是如何將標題插入到檔案中去並且還能在window下開啟。
之前用正常的變數接收插入檔案,怎麼搞都亂碼,後來查到linux有個iconv命令,可以將檔案轉換為不同的格式,然後想到了乙個折中的辦法。
就是將標題寫入乙個臨時檔案,然後再將檔案轉換為gbk的格式檔案,然後再將轉換後的檔案內容取出放到乙個變數,然後再將變數寫入匯出的資料檔案,問題終於解決。
下面是所有的**:
mysql匯出:注意
character set gbk
if(p_pagesize>100000) then
set@exe_sql
= concat('
select
',@grid_field,'
into outfile
''',p_file_name,'
.csv
''character set gbkfields terminated by '',
''enclosed by
''\"
''lines terminated by
''\n
''',@maintable,'
',@jointable,'
',@grid_whr,'
',@sort
);else
set@exe_sql
= concat('
select
',@grid_field,'
into outfile
''',p_file_name,'
.csv
''character set gbkfields terminated by '',
''enclosed by
''\"
''lines terminated by
''\n
''',@maintable,'
',@jointable,'
',@grid_whr,'
',@sort, '
limit
', @lmt, '
,', `p_pagesize`,'');
endif;--
select @exe_sql;
prepare stmt from
@exe_sql;
execute stmt
linux下合併的**:
#!/bin/sh#lang=latin1
#export lc_all=utf-8
databasename=$1
filename=$2
headcol=$3
# sed -i '
1i '$ /home/dwgl/test3.csv
#echo $ > /home/dwgl/out.log
# linux default utf-8
format
echo $>/home/dwgl/download/$_1.csv # utf-8
format
# from utf-8
convert to gb18030
iconv -f utf-8 -t gb18030 /home/dwgl/download/$_1.csv > /home/dwgl/download/$_2.csv
# read first line to variable
headcol2=`sed -n '
1p' /home/dwgl/download/$_2.csv`
# insert format
head
to outfile
mv /home/mysql/mysql_data/data/$/$.csv /home/dwgl/download/
sed -i '
1i '$ /home/dwgl/download/$.csv
tar -cvf /home/dwgl/download/$.tar /home/dwgl/download/$.csv
gzip /home/dwgl/download/$.tar
# mv $.tar /home/dwgl/download/
rm -f /home/dwgl/download/$_*.csv
Linux下Oracle資料幫浦檔案匯入匯出
準備工作 匯入匯出前最好新建乙個directory create orreplace directory 名稱 as 目錄 如 sqldmp資料夾是自己建立的,建立完要賦予oracle使用者許可權,這裡指的是linux系統使用者 這個資料夾下放需要匯入的資料幫浦dmp檔案,同時也賦予oracle使用...
使用SparkSql從Mysql中匯入匯出資料
匯入資料 建立properties物件,配置mysql的密碼和使用者名稱 val properties new properties properties.setproperty user username properties.setproperty password password 呼叫spa...
Linux下mysql資料庫的資料匯入匯出
資料的匯入匯出 1 文字資料轉到資料庫中 文字資料應符合的格式 字段資料之間用tab鍵隔開,null值用來代替。例 1 name duty 2006 11 23 資料傳入命令 load data local infile 檔名 into table 表名 2 匯出資料庫和表 mysqldump op...