سؤال

لقد انتهى بي الأمر مع ترميزات الأحرف المسلحة في أحد أعمدة MySQL الخاصة بنا.

عادة لدي

√ © بدلاً من é
√∂ بدلاً من Ö
√ ≠ بدلا من í

وهلم جرا...

متأكد إلى حد ما من أن شخصًا ما هنا سيعرف ما حدث وكيفية إصلاحه.

تحديث:بناءً على إجابة Bobince وبما أن لدي هذه البيانات في ملف قمت بما يلي

#!/user/bin/env python
import codecs
f = codecs.open('./file.csv', 'r', 'utf-8')
f2 = codecs.open('./file-fixed.csv', 'w', 'utf-8')
for line in f:
    f2.write(line.encode('macroman').decode('utf-8')),

وبعد ذلك

load data infile 'file-fixed.csv' 
into table list1 
fields terminated by ',' 
optionally enclosed by '"' 
ignore 1 lines;

استيراد البيانات بشكل صحيح.

Update2:المطرقة ، فقط للاكتمال هنا هي التفاصيل المطلوبة ...

mysql> SHOW VARIABLES LIKE 'character_set%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     | 
| character_set_connection | latin1                     | 
| character_set_database   | latin1                     | 
| character_set_filesystem | binary                     | 
| character_set_results    | latin1                     | 
| character_set_server     | latin1                     | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

ال SHOW CREATE TABLE للجدول الذي أستورده DEFAULT CHARSET=utf8

EDIT3:

في الواقع مع الإعدادات أعلاه load لم يكن افعل الشيء الصحيح (لم أتمكن نظرت كما لو تم تحميله بشكل صحيح ؛ أفترض بسبب خطأ ، ولكن المطابقة العميل والاتصال والنتائج charsets) ، لذلك قمت بتحديث الإعدادات إلى:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | 
| character_set_connection | utf8                       | 
| character_set_database   | utf8                       | 
| character_set_filesystem | binary                     | 
| character_set_results    | utf8                       | 
| character_set_server     | utf8                       | 
| character_set_system     | utf8                       | 
| character_sets_dir       | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+

تم تحميل البيانات مرة أخرى ، ثم حصلت أخيرًا على تحميل البيانات بشكل صحيح (مماثلة للبيانات الموجودة).

هل كانت مفيدة؟

المحلول

تم ترميز النص الخاص بك على UTF-8 ثم إعادة ترميزه ، خطأً ، ماك رومان.

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

>>> print u'é'.encode('macroman').decode('utf-8')
é
>>> print u'ö'.encode('macroman').decode('utf-8')
ö
>>> print u'í'.encode('macroman').decode('utf-8')
í

بدلاً من ذلك ، إذا لم يكن هناك محتوى غير ASCII لا يتأثر بهذه المشكلة ، فيمكنك محاولة استخدام mysqladmin لتصدير تفريغ SQL ، ثم قم بتحويله مرة واحدة ، إما باستخدام برنامج نصي على النحو الوارد أعلاه ، أو ، إذا كان لديك محرر نصية (من المفترض على MAC) يمكنه القيام بذلك ، وتحميل البرنامج النصي على أنه UTF-8 ثم حفظه كـ MAC روماني. وأخيرا أعد استيراد تفريغ باستخدام mysql < dump.sql.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top