19 เมษายน 2554

วิธี Import ข้อมูลใน Excel (xls , xlsx) เข้าสู่ MySQL

Update 3-5-2011 !!!!
ให้อ่านเป็นภาษาไทยใน database ได้แล้ว


          หลายๆ คนคงเจอปัญหาประมาณว่า มีข้อมูลอยู่ในไฟล์ Excel แล้วต้องการที่จะนำข้อมูลไปใช้กับ MySQL ผมก็เจอกับปัญหานี้เช่นกัน ลองมาหลายๆวิธีแล้วพบปัญหา import แล้ว error หรือไม่แสดงออกมาเป็นภาษาไทย


          วันนี้ผมมีวิธีการ Import ข้อมูลจาก Excel เข้าสู่ MySQL และสามารถแสดงออกมาเป็นภาษาไทยในรูปแบบ UTF-8 แบบไม่มีปัญหาใดๆ ^^ มาเริ่มกันเลยดีกว่า




ก่อนอื่นผมมีตัวอย่างจากไฟล์ xls ดังนี้

ทำการ Save File Excel ให้เป็น CSV ก่อนดังนี้
ไปที่ File -> Save As -> OtherFormats


จากนั้นเลือก Formats เป็น CSV (Comma delimited) (*.csv)


จากนั้นทำการแปลง Encode ของไฟล์เป็น UTF-8 โดย
เปิดไฟล์ CVS ด้วย Notepad


หาก Save ถูก Formats จะพบข้อมูลดังรูป


ทำการลบข้อมูลหัวตารางออกให้เลือกแต่ข้อมูลที่เราต้องการนำไปใส่ใน MySQL


ไปที่ File -> Save As


ด้านล่างเลือก Encoding เป็น UTF-8


เข้าไปสร้างฐานข้อมูลและตารางใน MySQL ตามข้อมูลที่เราต้องการ
ตัวอย่างของผมเป็นดังนี้
สร้างฐานข้อมูลชื่อ slayer_project และเลือก MySQL connection collation: เป็น utf8_unicode_ci


สร้างตารางตามข้อมูลที่มีอยู่


จากนั้นทำการเขียน Code PHP เพื่ออ่านข้อมูลจากไฟล์ CVS ลงฐานข้อมูล MySQL
ตัวอย่าง Code ของผมเป็นดังนี้

<?php
//ส่วนของการเชื่อมต่อฐานข้อมูล MySQL
$objConnect = mysql_connect("localhost","username","password") or die("Error Connect to Database"); // Conect to MySQL
$objDB = mysql_select_db("database_name");

//ทำการเปิดไฟล์ CSV เพื่อนำข้อมูลไปใส่ใน MySQL
$objCSV = fopen("member.csv", "r");
while (($objArr = fgetcsv($objCSV, 1000, ",")) !== FALSE) {
        //นำข้อมูลใส่ในตาราง member
 $strSQL = "INSERT INTO member ";

        //ข้อมูลใส่ใน field ข้อมูลดังนี้
 $strSQL .="(id,name,lastname,age,tel) ";
 $strSQL .="VALUES ";
        
        //ข้อมูลตามที่อ่านได้จากไฟล์ลงฐานข้อมูล
 $strSQL .="('".$objArr[0]."','".$objArr[1]."','".$objArr[2]."' ";
 $strSQL .=",'".$objArr[3]."','".$objArr[4]."') ";
 
 //ให้ข้อมูลอยู่ในรูปแบบที่อ่านได้ใน phpmyadmin (By.SlayerBUU Credits พี่ไผ่)
 mysql_query("SET NAMES UTF8");

 //เพิ่มข้อมูลลงฐานข้อมูล
 $objQuery = mysql_query($strSQL);
}
fclose($objCSV);

echo "Import Done.";
?>
ขอขอบคุณ Code จาก thaicreate.com

นำไฟล์ cvs ไว้ที่เดียวกับไฟล์ php เพื่อทำการ import


หากการ Import ข้อมูลไม่มีปัญหาจะขึ้นข้อความว่า Import Done.

เมื่อลองดูในฐานข้อมูลก็จะพบว่ามีข้อมูลที่เราต้องการอยู่ในฐานข้อมูลแล้ว



ลองเขียน Code ดึงข้อมูลออกมาแสดงเปิดดูในรูปแบบ UTF-8 ก็แสดงภาษาไทยได้อย่างไม่มีปัญหา ก่อนที่จะ query ข้อมูลออกมาต้อง mysql_query("SET NAMES UTF8");ก่อนด้วยครับ

ตัวอย่าง Code

<?php
$objConnect = mysql_connect("localhost","username","password") or die("Error Connect to Database"); // Conect to MySQL
$objDB = mysql_select_db("database_name");

$sql = ("SELECT * from member");
mysql_query("SET NAMES UTF8");

$result = mysql_query($sql);
While($row= mysql_fetch_array($result)){
echo "id = ".$row['id'];
echo "name = ".$row['name'];
echo "lastname = ".$row['lastname'];
echo "age = ".$row['age'];
echo "tel = ".$row['tel'];
}
?>


ตัวอย่างข้อมูลที่แสดง



Credits : พี่ตั้ม , อ.กบ , thaicreate.com , พี่ไผ่
Link เกี่ยวข้อง : http://www.thaicreate.com/php/php-convert-csv-to-mysql.html


16 ความคิดเห็น:

  1. ไม่ระบุชื่อ23 พฤษภาคม 2554 เวลา 17:24

    มันก็ขึ้น Import Done แต่ข้อมูลไม่มีในฐานข้อมูลเลยอะครับ

    ต้องทำงัยครับ

    ตอบลบ
  2. ถ้าไม่มีข้อมูล แสดงว่าแก้ไข Code ผิดหรือเชื่อมต่อกับฐานข้อมูลไม่ได้ครับ

    ผมใช้อยู่ ทำดูหลายรอบ ไม่มีปัญหาอะไรนะครับ

    ตอบลบ
  3. ไม่ระบุชื่อ14 กรกฎาคม 2554 เวลา 16:43

    ของผมมันขึ้นแบบนี้ครับ...
    Warning: copy(customer.csv) [function.copy]: failed to open stream: Permission denied in F:\AppServ\www\PSU2\Excel Import to MySql\phpCSVMySQLUpload.php on line 7
    Upload & Import Done.

    ข้อมูลสามารถเพิ่มได้แต่ว่ามันขึ้นอย่างที่เห็นครับ

    ตอบลบ
  4. Permission denied ประมาณว่าไม่มีสิทธิ์ในการเข้าถึง ลองเปลี่ยน Permission ดูนะครับ

    ตอบลบ
  5. รบกวนถามหน่อยครับ พอดีผมต้องการเปลี่ยนจาก insert ไปเป็น update ผมต้องแก้ไขตรงไหนบ้างครับ ^^" ขอบคุณครับ

    ตอบลบ
  6. มีประโยชน์ครับ เดี๋ยวลองเอาไปใช้ดูก่อน

    ตอบลบ
  7. ไม่ระบุชื่อ6 สิงหาคม 2555 เวลา 09:20

    พอเปิดแล้วเป็นภาษาต่างด้าวค่ะ
    ต้องแก้ยังไงค่ะ ????????

    ตอบลบ
  8. ผมลองแล้ว ภาษาไทยเข้าไม่ครบครับ ไม่แน่ใจว่ามีปัญหาอะไร เลยลองอีกวิธี พอได้ CSV ที่เป็น UTF-8 แล้ว import upload เข้าทาง phpadmin ตรง ๆ เลยได้ ไม่ติดปัญหาอะไร และสะดวกดีครับ

    ตอบลบ
  9. ไม่ระบุชื่อ4 ตุลาคม 2555 เวลา 16:10

    ขอบคุณมากครับ พี่เอาวิธีของน้องไปทำได้ผลดีครับ :0) กดไลค์ให้เลย

    ตอบลบ
  10. อ้อ ท่านที่ Save เป็น CSV แล้ว พอมาเปิด กับ Notepad เห็นเป็นตัวยึกยือ ผมเจอเหมือนกัน แต่เคยทำอะไรแนวนี้มาก่อน เลยลองดูแล้วก็ได้ผลเชื่อไหม เส้นผมบังภูเขาครับ นั่นคือ Font ของ Excel ครับ ให้ Select All ข้อมูลทุกฟิลด์และแถว หรือ Hightlight ด้วยตัวเองก็ได้ จากนั้น กดเลือก Font ตามปกติ แต่เลือกเป็นที่มี UPC เช่น AngsanaUPC แล้วค่อย Save as เป็น CSV เรียบร้อยครับ

    อีกกรณี ทำแบบนี้แล้ว เปิดมาดูก็ยึกยือ เจอเหมือนกัน ให้ปิด Notepad ให้หมดแล้วเปิดใหม่ แล้ว Open ก็จะได้ครับ มันอยู่ที่ 2 อันนี้ หากไม่ได้ ก็ปิด Excel แล้วทำใหม่ ได้แน่ๆ ครับผม ของผมตอนนี้ข้อมูล ไทย ไปอยู่ใน ฐานข้อมูลอย่างสมบูรณ์ เพราะเจ้าของ บล็อคนี้แท้ๆ ขอบคุณมากๆ ครับผม :0)
    คุณสันต์

    ตอบลบ
  11. ผมลองทำตามที่ท่านคมสันบอกแล้ว แต่ก็ยังไม่หาย ผมใช้ office 2013 จะเกี่ยวมั้ยครับ

    ตอบลบ
  12. ติดปัญหาช่วยเซฟไฟล์ excel พอเปิดใน notepad อ่านภาษาไทยไม่ได้ เช็ค encoding ก็เป็น utf-8 แล้วด้วยค่ะ

    ตอบลบ
  13. ไม่ระบุชื่อ21 มีนาคม 2557 เวลา 11:19

    ทาง webhosting บางราย บอกว่า จะ import ข้อมูลที่เป็น excel ไม่ได้ ถ้าเขาใช้ Linux ทั้งๆ ที่ excel file ที่จะ import ถูกแปลงเป็น .csv แล้งแปลงเป็นรูปของ notepad แล้ว เรื่องนี้จริงหรือไม้ ช่วยแชร์ที trick หรือมี อะไรดีก็รบกวนด้วย

    จิ๊ก@Bangkok

    ตอบลบ
  14. ยอดไปเลย ขอบคุณมว๊ากกกกกกกกกกกกกกกก เลยจ้า

    ตอบลบ
  15. ตามหามานาน ขอบคุณมากๆๆๆๆๆๆ นะคะ

    ตอบลบ
  16. Invalid field count in CSV input on line 1.
    หมายความว่าอะไรครับ

    ตอบลบ