منبع اصلی نوشتار زیر در این لینک قرار دارد

انتقال اطلاعات از CSV به MySQL

بعضی وقتها یه سری کارهای کوچیک میتونه دردسر ساز باشه. مثلا من امروز نیاز داشتم که یه فایل CSV رو توی یه جدول MySQL ببرم. واسه فایلهای کوچیک معمولا از PHP استفاده میکردم،‌ ایندفعه هم قصد داشتم از Perl استفاده کنم، چون فایل یه چیزی در حدود ۳۰ مگا بود و خواستم که یه کدی هم با Perl بنویسم. ولی آخرش با پرل هم ننوشتم :)‌
خود MySQL میتونه اینکارو به راحت ترین روش بدون نیاز به هر گونه ابزار جانبی انجام بده. خیلی ساده کنسول MySQL رو باز کنید، مثلا با یه دستوری مثل این :

mysql -u root -p -h 127.0.0.1

–اگه دقت کرده باشید من Host رو هم به صورت IP دادم،‌نمیدونم چه مرگشه همینجوری اگه IP ندم، مثلا ولش کنم به صورت پیشفرض یا localhost سعی میکنه از طریق socket اتصال برقرار کنه که نمیتونه :(‌منظورم لینوکسه، ویندوز مشکلی نداشتم البته اون موقع که ویندوز کار میکردم :)‌ کسی میدونه راه حلش چیه؟؟)–

بعد از انتخاب دیتابیس (معمولا اینطوری : use database_name ) میتونید از این دستور :

LOAD DATA INFILE \'data.csv\' INTO TABLE tbl_name
  FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\'
  LINES TERMINATED BY \'\\r\\n\'
  IGNORE 1 LINES;

استفاده کنید برای وارد کردن یک فایل CSV به داخل یه جدول. چند تا نکته مهمه که باید در نظر گرفته شه.

  1. قبلش جدول رو بسازید و با فایل CSV اونو هماهنگ کنید. یعنی تعداد و جنس فیلدهای فایل CSV و جدولتون باید یکی باشه، همینطور ترتیبشون. این روش راهی ارایه نمیده که فیلدها رو وقت قرار دادن جابجا هم بکنی، که البته لازم هم نیست معمولا.
  2. FIELDS TERMINATED BY \',\' میگه که فیلدها با کاما از هم جدا شدن،‌اگه برای شما یه چیز متفاوته خوب طبیعیه که باید اینجا بگید، مثلا سمی کالون یا هر کاراکتر دیگه. واسه Tab هم میتونید از \\t استفاده کنید.
  3. ENCLOSED BY \'\"\' میگه که فیلدها با کاراکتر ” محصور شدن. اگه فایل شما به اینصورت نیست، یعنی همه فیلدها با یه کاراکتر به خصوص محصور نیستن میتونین بنویسید
    FIELDS [OPTIONALLY] ENCLOSED BY \'\"\'
    که اختیاری بودنشو میرسونه. و دقت کنید چون دو تا دستور تو یه خطه کلمه FIELDS فاکتور گرفته شده :دی و فقط یه بار استفاده شده.
  4. شما میتونید کاراکتر ها رو با FIELDS ESCAPED BY \"\" Escape کنین. مثلا اگه کاراکتر کاما که قراره جدا کننده باشه،‌توی فیلدها استفاده بشه،‌برای اینکه MySQL اونو نشکنه،‌ و فکر نکنه که یه فیلد جداست،‌باید با یه کاراکتر (معمولا \\ -بک اسلش – )‌ اونو Escape کنید. که اینجا اون کاراکتر رو معرفی میکنید. میتونید اینو به همون خط مربوط به FIELDS اضافه کنید.
  5. خط مربوط به LINE یه جورایی از همه مهمتره. هرگز نتونستم این نا هماهنگی بین لینوکس، ویندوز و مک رو درک کنم. لینوکس خطهاش با یه LF (کاراکتر ۱۰ ) خطم میشه، مک با کاراکتر CR (کاراکتر ۱۳ )‌و ویندوز با CR+LF (یه ۱۳ و بلافاصله یه ۱۰ )‌ برای اطلاعات دقیقتر اینجا رو ببینید : http://en.wikipedia.org/wiki/Newline .
    تو اون قسمت،‌ بسته به فایلتون یه کاراکتر یا دو کاراکتر مجزا بذارید. مثال ما برای ویندوز بود (چون هر دوتاشو داشت من این مثال رو انتخاب کردم :)‌ )‌ برای لینوکس از r و برای مک از n استفاده کنید. اگر هم بین دو ردیفتون کاراکتر دیگه ای هم هست، میتونید اونو انتخاب کنید، محدودیتی برای استفاده از این سه حالت نیست، فقط دقت کنید که در اون صورت فایلتون کلا باید یه خط باشه!
  6. خط بعدی هم که با IGNORE شروع میشه،‌اعلام میکنه که چند سطر از ابتدا باید چشمپوشی بشن. اکثر فایل های CSV یه خط اولشون در حقطقت اطلاعات نیست،‌بلکه اسم ستونهاست. اینه که اکثرا باید خط اول رو رد کنید.
    اگه این خط رو ننویسید -منظور خط IGNORE – که کل فایل استفاده میشه، از اول تا آخر.

من اینقدر رو برای رفع احتیاج خودم تا همین حد مطالعه کردم. شاید شما بیشتر از این مد نظرتون باشه که میتونید منبع اصلی این اطلاعات رو ببینید : http://dev.mysql.com/doc/refman/5.1/en/load-data.html

حالا اگه بخواید بعد از این، میتونید از mysqldump یا PHPMyAdmin استفاده کنید و اطلاعات رو به صورت SQL دربیارید.

پستهای مرتبط :

  1. Menu، MySQL و کلا هر چی با M شروع میشه اولین بار،‌برای ایجاد کردن یک منوی تو در تو،‌ از...
  2. MySQL , Menu قسمت دوم این پست رو برای اضافه کردن یه سری قابلیت جدید...
  3. Mysql Menu قسمت سوم چند وقت پیش در باره منو و طریقه ایجاد آن...



برچسب ها : , ,