سؤال

أحاول استيراد ملف .csv في جدول. لقد اكتشفت كيفية إدخال البيانات باستخدام الاستعلام التالي:

LOAD DATA INFILE 'examplesofdata.csv' INTO TABLE coins FIELDS TERMINATED BY ',' 
ENCLOSED BY '' ESCAPED BY '\\'  IGNORE 1 LINES;

ومع ذلك ، بالنسبة للعديد من الحقول الخاصة بي ، لدي محتوى عربي يتم إدخاله كسلسلة من؟ أفترض أن هذا لأنني لم أجمع قاعدة البيانات بشكل صحيح أو لا أفهم تمامًا استعلام Infile Data. أي نصيحة سيكون موضع تقدير كبير.

العرض إنشاء العملات المعدنية. الإخراج هو:

CREATE TABLE `coins` (
  `cat_num` int(11) NOT NULL,
  `reg_num` int(11) NOT NULL,
  `period` varchar(255) NOT NULL,
  `arb_period` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `ruler` varchar(255) NOT NULL,
  `arb_ruler` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `mint` varchar(255) NOT NULL,
  `arb_mint` varchar(255) character set utf8 collate utf8_unicode_ci NOT NULL,
  `date` varchar(255) NOT NULL,
  `weight` float NOT NULL,
  `diameter` float NOT NULL,
  `khedieval_num` varchar(255) NOT NULL,
  `ref` text NOT NULL,
 PRIMARY KEY  (`cat_num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8
هل كانت مفيدة؟

المحلول 3

لذلك انتهى بي الأمر الحصول على إجابة من مدرب قديم لفئة قواعد البيانات الخاصة بي. أخبرني أن هذه المشكلة هي في الواقع خطأ تم الإبلاغ عنه مع الإصدار الحالي من MySQL وأن الحل الوحيد المعروف في ذلك الوقت هو استيراد البيانات يدويًا من خلال PHP أو لغة البرمجة النصية الأخرى.

الخطأ في هذه القضية هو في: http://bugs.mysql.com/bug.php؟id=10195

لم يساعدني ذلك كثيرًا لأنني كنت أعمل فقط على نموذج أولي ، وأدار حلًا في الوقت نفسه ، ولكن نأمل أن يكون أكثر فائدة لك.

نصائح أخرى

قم بتحميل البيانات المحلية "اسم الملف" إلى اسم TableName Table مجموعة الأحرف UTF8 الأعمدة التي تم إنهاءها بواسطة خطوط ' t' التي تم إنهاءها بواسطة ' n' ؛

ال مجموعة الأحرف UTF8 عمل الحيلة.

هذا لا يزال خطأ مع MySQL. ومع ذلك ، اكتشفت أن Charset الافتراضي لقاعدة البيانات هو الجاني. هناك نوعان محتملان:

  1. إذا قمت بتغيير charset الافتراضي لقاعدة البيانات الخاصة بك إلى LATIN1 ، فستنجح. يمكنك الحفاظ على الجداول/الأعمدة UTF-8.
  2. الغريب ، إذا كنت تستخدم "مجموعة الأحرف LATIN1" ، فسيعمل كل من UTF-8 و LATIN1/الأعمدة. باستخدام هذه الطريقة ، يمكنك الاحتفاظ بـ DB/Table/Column Charset على UTF-8.

ماذا عن الإعداد CHARACTER SET utf8_unicode أو إلى مكانك؟

اكتشفت أيضًا أن الحرف الخاص بك يحتاج إلى أن يكون UTF-8 أيضًا:

mysql> show session variables like 'char%';
+--------------------------+----------------------------------------+
| Variable_name            | Value                                  |
+--------------------------+----------------------------------------+
| character_set_client     | latin1                        
...

اقرأ مستندات MySQL حول كيفية تغيير ذلك لخادم WHO أو فقط الجلسة فقط.

لقد واجهت هذه المشكلة أيضًا ، لكن بدلاً من سلسلة من؟ ، كنت أحصل على بيانات مقطوعة.

مثل "Aeióu" تم اقتطاعه في "AEI".

تحقق من الحل الذي توصلت إليه هنا, ، تحتاج إلى مطابقة CSV Charset مع LOAD DATA INFILE charset.

هتافات

مضيفا CHARACTER SET utf8 إلى LOAD DATA البيان هو الإجابة القريبة. ومع ذلك ، تم طرح قضيتين أخريين ...

عند محاولة استخدام UTF8/UTF8MB4 ، إذا رأيت علامات استفهام (تلك العادية ، وليس الماس الأسود) ،

  • لا يتم تشفير البايتات المراد تخزينها على أنها UTF8. اصلح هذا.
  • العمود في قاعدة البيانات CHARACTER SET utf8 (أو UTF8MB4). اصلح هذا.
  • أيضا ، تحقق من أن الاتصال أثناء القراءة هو UTF8.

عند محاولة استخدام UTF8/UTF8MB4 ، إذا رأيت اقتطاع نص،

  • لا يتم تشفير البايتات المراد تخزينها على أنها UTF8. اصلح هذا.
  • أيضا ، تحقق من أن الاتصال أثناء القراءة هو UTF8.
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top