2013-03-30 10 views
6

कल की स्थापना की और मैं इस तरह के रूप डंप में कुछ बहुत ही अजीब पात्रों पाया:mysqldump एक बुरा चरित्र में डेटा निर्यात करने के लिए पहली बार मैं अपने MySQL डेटाबेस निर्यात के लिए

INSERT INTO `piwik_archive_blob_2013_01` VALUES (15,'Actions_actions_url_6',1,'2013-01-17','2013-01-17',1,'2013-01-20 07:36:53','xuNM0ý/œ#&ÝÕ³\ZõNYpÊÀì#!üw7Hж}°ÀAáZoN*šgµ\'GWª[Yûðe¯57 ÃÁÆ7|Ÿ\'Ü%µDh©-EÛ^ËL±ÕÞtª[email protected](,b±ßZ.ÒÃ6b²aiÓÍ)87[­ïÎœ,æya¥uÒ<|+íª7MNuïÝ¿8ñ%1Ʊ>Ú­X'); 

अपने सर्वर MySQL का संस्करण है: 5.1 .66-0 + निचोड़ 1 (डेबियन)। यह डेटाबेस Piwik सेटअप स्क्रिप्ट द्वारा स्वचालित रूप से बनाया गया था।

# 1 सबसे पहले मैं डेटाबेस चारसेट जाँच:

यहाँ है कि मैं क्या इस समस्या को दूर करने की कोशिश की है।

> show table status; 

26 तालिकाओं में collation utf8_general_ci है जो काफी सामान्य लग रहा है। मैं एक अलग चारसेट में निर्यात mysqldump अनुमान लगाया तो मैं करने की कोशिश की (latin1?):

mysqldump -u user -p**** --all-databases --default-character-set=utf8 | gzip -9 > dump.sql.gz 

परिणाम = मैं अभी भी एक ही अजीब वर्ण थे।

नोट) बाद में मैंने सीखा कि mysqldump के लिए डिफ़ॉल्ट वर्णसेट utf8 है, भले ही सर्वर डिफ़ॉल्ट वर्णमाला के बावजूद। तो --default-character-set=utf8 बेकार था।

# 2 तब मैंने सोचा कि मैं mysql conf को अद्यतन करके समस्या का समाधान कर सकता हूं। मूल conf था:

mysql> show variables like "%character%";show variables like "%collation%"; 

+--------------------------+----------------------------+ 
| 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/ | 
+--------------------------+----------------------------+ 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | latin1_swedish_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | latin1_swedish_ci | 
+----------------------+-------------------+ 

तो मैं /var/lib/mysql/my.cnf अद्यतन और मैं कहा:

[mysqld] 
init_connect='SET collation_connection = utf8_general_ci' 
init_connect='SET NAMES utf8' 
character-set-server=utf8 
collation-server=utf8_general_ci 
default-character-set=utf8 
default-collation=utf8_general_ci 

[mysqldump] 
default-character-set=utf8 

फिर

/etc/init.d/mysql restart 
mysql> show variables like "%character%";show variables like "%collation%"; 

+--------------------------+----------------------------+ 
| Variable_name   | Value      | 
+--------------------------+----------------------------+ 
| character_set_client  | utf8      | 
| character_set_connection | utf8      | 
| character_set_database | latin1      | 
| character_set_filesystem | binary      | 
| character_set_results | utf8      | 
| character_set_server  | utf8      | 
| character_set_system  | utf8      | 
| character_sets_dir  | /usr/share/mysql/charsets/ | 
+--------------------------+----------------------------+ 
+----------------------+-------------------+ 
| Variable_name  | Value    | 
+----------------------+-------------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | latin1_swedish_ci | 
| collation_server  | utf8_general_ci | 
+----------------------+-------------------+ 

परिणाम = एक ही अजीब अक्षर।

mysql> ALTER DATABASE piwik default character SET utf8 collate utf8_general_ci; 

mysql> show variables like "%character%";show variables like "%collation%"; 

+--------------------------+----------------------------+ 
| 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/ | 
+--------------------------+----------------------------+ 
+----------------------+-----------------+ 
| Variable_name  | Value   | 
+----------------------+-----------------+ 
| collation_connection | utf8_general_ci | 
| collation_database | utf8_general_ci | 
| collation_server  | utf8_general_ci | 
+----------------------+-----------------+ 

परिणाम = एक ही अजीब अक्षर:

# 3 मैं character_set_database और collation_database बदल दिया है।

# 4 अब मैं समझ मैं डेटाबेस बनाने से पहले डिफ़ॉल्ट वर्ण MySQL (latin1) में सेट UTF8 करने के लिए बदल दिया है चाहिए।

संयोजन utf8_general_ci (# 1) का अर्थ है कि डेटा utf8 में संग्रहीत है। हालांकि, क्या यह संभव होगा कि mysqldump सोचता है कि डेटा लैटिन 1 में संग्रहीत है और utf8 में डेटा एन्कोड करता है? इसका मतलब अंत डेटा पर डबल utf8 एन्कोडेड (श्वास) होगा। इस मामले में मैं समस्या को कैसे ठीक कर सकता हूं?

आपकी मदद के लिए धन्यवाद।

ps) मुझे आश्चर्य है कि क्यों Piwik को डेटाबेस डिफ़ॉल्ट वर्णमाला को utf8 में बदलने की आवश्यकता नहीं है।

+0

क्या * चाहिए * जहां उन अक्षरों को देख रहे हैं हो सकता है? आप इन पात्रों को वास्तव में कैसे देख रहे हैं? – deceze

+0

जब मैं ZendStudio के साथ SQL फ़ाइल खोलता हूं तो मैं इन वर्णों को देखता हूं। –

+0

और आप जिस डेटा को होने की उम्मीद करते हैं वह क्या है? – deceze

उत्तर

0

तालिका नाम के अनुसार, "piwik_archive_ ब्लॉब _2013_01", मुझे लगता है कि स्तंभ अजीब वर्ण युक्त प्रकार ब्लॉब की है।

बीएलओबी कॉलम में बाइनरी डेटा होता है। यही कारण है कि इसमें इन अजीब पात्र हैं। यह उम्मीद है।

इसके बारे में चिंता न करें, मुझे पूरा यकीन है कि MySQLDump जानता है कि इस डेटा को कैसे डंप करें।

चीयर्स, एरिक।

+0

आप आश्चर्यचकित होंगे कि mysqldump क्या करता है और नहीं जानता ... यह बेहद बुद्धिमान है, और खुशी से आयातित करने के लिए सावधानीपूर्वक गैर-बर्किंग की आवश्यकता वाले बोर्क वाली फ़ाइलों का उत्पादन करें। –

+0

- हेक्स-ब्लोब आम तौर पर इसके लिए बाइनरी डेटा के साथ काम करेगा। चरित्र सेट समाधान ब्लब्स के लिए काम नहीं करेंगे, क्योंकि यह जवाब आज के रूप में –

0

यह ऑपरेटिंग सिस्टम निर्यात के दौरान वर्णमाला बदल रहा है और डिफ़ॉल्ट-वर्ण-सेट पैरामीटर को अनदेखा कर सकता है।

सुनिश्चित करें कि निर्यात पैरामीटर परिणाम फ़ाइल

चेक इस लेख का उपयोग नहीं कर रहा है ऑपरेटिंग सिस्टम चारसेट उपयोग करने के लिए: http://nathan.rambeck.org/blog/1-preventing-encoding-issues-mysqldump

+0

कहता है, लिंक टूटा हुआ लगता है – superjos

संबंधित मुद्दे