LINUX下從mysql檔案匯出後標題合併

2022-03-27 22:20:27 字數 2530 閱讀 8247

這兩天在做資料匯出,真實折磨死了,記錄下來。匯出的格式是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...