Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

ส่งออกข้อมูลคอลัมน์เฉพาะใน MySQL ด้วย SELECT ... INTO OUTFILE

เมื่อต้องการ Export ข้อมูลเฉพาะคอลัมน์บางคอลัมน์ไปเป็นไฟล์ Text/CSV ให้ใช้ SELECT ... INTO OUTFILE ซึ่งเขียนไฟล์บน Server Side ได้โดยตรง

Syntax

SELECT yourColumnName FROM yourTableName 
INTO OUTFILE 'file_path' 
[CHARACTER SET charset] 
[FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\\']
[LINES TERMINATED BY '\\n'];

สร้างตารางและข้อมูล

mysql> create table DemoTable (
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentFirstName varchar(20),
    StudentLastName varchar(20)
);
mysql> insert into DemoTable(StudentFirstName,StudentLastName) 
values('John','Doe'),('David','Miller'),('John','Smith'),('Carol','Taylor'),('Sam','Williams');

Export เฉพาะ StudentLastName

mysql> select StudentLastName from DemoTable 
into outfile 'E:/StudentLastName.txt';

เนื้อหาไฟล์ (Tab-separated Default)

Doe
Miller
Smith
Taylor
Williams

ตัวเลือก Format ที่ใช้บ่อย

CSV Format (Excel เปิดได้)

SELECT StudentFirstName, StudentLastName FROM DemoTable
INTO OUTFILE 'E:/students.csv'
CHARACTER SET utf8mb4
FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\\'
LINES TERMINATED BY '\\r\\n';

TSV (Tab-separated)

SELECT * FROM DemoTable
INTO OUTFILE 'E:/students.tsv'
FIELDS TERMINATED BY '\\t' LINES TERMINATED BY '\\n';

ข้อจำกัดและสิทธิ์

  • FILE Privilege - User ต้องมีสิทธิ์ FILE
  • Secure File Priv - ตรวจสอบ: SHOW VARIABLES LIKE 'secure_file_priv';
  • ถ้าเป็น NULL → Export ได้ทุกที่ | ถ้าเป็น Path → Export ได้เฉพาะโฟลเดอร์นั้น
  • ไม่สามารถ Overwrite ไฟล์เดิมได้ - ต้องลบไฟล์เก่าก่อน หรือใช้ชื่อใหม่
  • Path บน Server ไม่ใช่ Client

ทางเลือกอื่นสำหรับ Export

  • mysqldump - Command line tool สำหรับ Backup/Export ทั้ง DB
  • mysql -e "SELECT ..." > file.txt - Client side export (Tab-separated)
  • MySQL Workbench - GUI Export to CSV/JSON/Excel
  • SELECT ... INTO OUTFILE ... CHARACTER SET utf8mb4 - รองรับภาษาไทย