कल की स्थापना की और मैं इस तरह के रूप डंप में कुछ बहुत ही अजीब पात्रों पाया: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 में बदलने की आवश्यकता नहीं है।
क्या * चाहिए * जहां उन अक्षरों को देख रहे हैं हो सकता है? आप इन पात्रों को वास्तव में कैसे देख रहे हैं? – deceze
जब मैं ZendStudio के साथ SQL फ़ाइल खोलता हूं तो मैं इन वर्णों को देखता हूं। –
और आप जिस डेटा को होने की उम्मीद करते हैं वह क्या है? – deceze