經常遇到MYSQL導出長數字或純數字字符串(如身份證、卡券號、條碼、流水號等)到csv或excel文件,用excel打開會顯示為科學記數法,甚至后幾位轉為0。這是由Excel的特性決定的:Excel顯示11位以上的數字時,會自動轉化為科學計數法,如果長度大於15位,15位以后數字還會轉成0。
網上搜到的解決辦法是在該長數字前增加tab字符:
即:
CONCAT("\t",str)
其中 \t 為制表符(即鍵盤上的Tab鍵)的轉義符
實踐時發現按此方法導出的文件打開后雖然顯示為文本字符,但長度多了1,在字符前多了一個不可見空格(制表符),刪掉才是原來的字符。
如果只是展示、打印倒無妨,但如果需要后續引用該字符串(如用VLOOKUP匹配),因為前面多了一個不可見的空格,長度也多了一位,則可能會出錯。
后來想起excel輸入長數字的可在數字前輸入單引號”‘”強制轉為文本,在 mysql輸出時也可以試試,測試可用:
即:
CONCAT("'",str)
或者
CONCAT("\'",str)
另外注意需保存為excel文件,即xls或xlsx文件,該數字即已強轉為文本格式;如保存為csv,用excel打開則顯示為可見單引號+數字形式,原因尚不明。
總結:
1.如果只需要導出展示、打印:可使用CONCAT("\t",str)
2.如果需要后續處理,引用,最好使用CONCAT("'",str)
或者CONCAT("\'",str)
,並導出為EXCEL文件。
解決辦法:在導出查詢時,使用MySQL中concat函數給長數字的字段加上單引號",",再點擊【導出向導】導出excel,excel打開就顯示正常的長數字了,
SELECT CONCAT("`",p_card_num),card_num FROM ppos_member_card_src WHERE p_card_num=002580986
SELECT CONCAT("\t",p_card_num),card_num FROM ppos_member_card_src WHERE p_card_num=002580986