mysql管理數據當然可以很方便的導出數據,但是當數據量很大是,phpmyadmin很可能會發生執行超時,其實很容易用select into outfile解決!
SELECT...INTO OUTFILE語句的主要作用是讓您可以非常快速地把一個表轉儲到服務器機器上。如果您想要在服務器主機之外的部分客戶主機上創建結果文件,您不能使用SELECT...INTO OUTFILE。在這種情況下,您應該在客戶主機上使用比如“mysql –e "SELECT ..." > file_name”的命令,來生成文件。
SELECT...INTO OUTFILE是LOAD DATA INFILE的補語;用於語句的exort_options部分的語法包括部分FIELDS和LINES子句,這些子句與LOAD DATA INFILE語句同時使用
如下:(將數據庫wordpress中的wp_posts表導出到D盤)
select * into outfile 'd:data.txt' from wp_posts
需要注意的是:使用select into outfile語句,必須要有執行權限,路徑必須存在,否則使用當前數據庫目錄,
例2
代碼如下 復制代碼表結構及測試數據
CREATE TABLE `tab`(
`id` INT(1) NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(10) NOT NULL,
`add` VARCHAR(20) CHARACTER SET gbk NOT NULL
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `tab`(`name`,`add`) VALUES
('中文', '這列不會亂碼'),
('漢字', '這列不會亂碼');
SELECT * FROM `tab`;
+----+------+--------------+
| id | name | add |
+----+------+--------------+
| 1 | 中文 | 這列不會亂碼 |
| 2 | 漢字 | 這列不會亂碼 |
+----+------+--------------+
rows in set (0.00 sec)
代碼
代碼如下 復制代碼在 INTO OUTFILE 中使用變量
SET @tmp_sql = CONCAT(
"SELECT * INTO OUTFILE 'C:\\sql_", DATE_FORMAT(NOW(), '%Y%m%d%H%i%s'),
".txt' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY "'" LINES TERMINATED BY 'rn' FROM `tab`;");
PREPARE s1 FROM @tmp_sql;
EXECUTE s1;
DROP PREPARE s1;
上面的代碼會在C盤下生成“sql_當前時間.txt”的文件,避免INTO OUTFILE文件已存在錯誤
注:直接在命令行中SELECT顯示無亂碼,但使用 INTO OUTFILE 導出後有亂碼,此時必須修改顯示亂碼的列的字符集