2012-02-23 17 views
40

केवल आज UTF8 में एक UTF8 मेज पर latin1 पात्रों कन्वर्ट मुझे एहसास हुआ कि मैं अपने PHP स्क्रिप्ट में इस याद आ रही थी:MySQL -

mysql_set_charset('utf8'); 

मेरे सभी तालिकाओं InnoDB, मिलान "utf8_unicode_ci" हैं, और मेरे सारे VARCHAR कॉलम "utf8_unicode_ci" भी हैं। मेरे पास मेरी PHP स्क्रिप्ट पर mb_internal_encoding('UTF-8'); है, और मेरी सभी PHP फ़ाइलों को यूटीएफ -8 के रूप में एन्कोड किया गया है।

तो, अब तक, हर बार जब मैं विशेषक के साथ कुछ "डालें", उदाहरण:

mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"'); 

'नाम' सामग्री हो सकता है, इस मामले में: Jáuò Iñe

चूंकि मैंने PHP और MySQL के बीच वर्णमाला तय की है, इसलिए नए आईएनएसईआरटी अब सही तरीके से संग्रहित हो रहे हैं। हालांकि, मैं इस समय "पुरानी" सभी पुरानी पंक्तियों को ठीक करना चाहता हूं। मैंने पहले से ही कई चीजों की कोशिश की, लेकिन यह हमेशा पहले "अवैध" चरित्र पर तार तोड़ देता है।

$m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP &aacute; (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;'); 
mysql_set_charset('utf8'); 
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"'); 
mysql_set_charset('latin1'); 
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"'); 
mysql_set_charset('utf8'); 

$result = mysql_iquery('SELECT * FROM `table`'); 
while ($row = mysql_fetch_assoc($result)) { 
    $message = $row['name']; 
    $message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8'); 
    //$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message); 
    mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"'); 
} 

यह "अद्यतन" उम्मीद पात्रों के साथ है, को छोड़कर स्ट्रिंग चरित्र 'ए' के ​​बाद काट दिया जाता है कि: यहाँ मेरे वर्तमान कोड है। मेरा मतलब है, उस चरित्र और निम्नलिखित वर्ण स्ट्रिंग पर शामिल नहीं हैं।

इसके अलावा

, "() iconv" (है कि कोड पर टिप्पणी की है) भी // ध्यान न दें और // translit

मैं भी कई वर्णसेट परीक्षण किया है, आईएसओ 8859- के बीच के साथ, एक ही करता है के साथ परीक्षण 1 और आईएसओ -885 9-15।

मुझे वास्तव में यहां सहायता चाहिए! धन्यवाद।

उत्तर

102

जो आप वर्णन करते हैं, उससे ऐसा लगता है कि आपके पास यूटीएफ -8 डेटा है जिसे मूल रूप से लैटिन -1 के रूप में संग्रहीत किया गया था और फिर सही ढंग से यूटीएफ -8 में परिवर्तित नहीं किया गया था। डेटा वसूली योग्य है; आप

convert(cast(convert(name using latin1) as binary) using utf8) 

यह आप कैसे डेटा एन्कोडिंग रूपांतरण के दौरान बदल गया पर निर्भर करता है आंतरिक रूपांतरण न करने का विकल्प, आवश्यकता हो सकती है कि संभव है की तरह एक MySQL समारोह की आवश्यकता होगी।

+6

वाह आप मेरा दिन बचाया का उपयोग करें!मैंने कभी भी उन कार्यों का उपयोग नहीं किया, जिनका उपयोग अब अद्यतन पर किया गया था और यह काम करता था। आपका बहुत बहुत धन्यवाद! – Nuno

+1

इसके लिए धन्यवाद! मैंने एक छोटी सी PHP स्क्रिप्ट बनाई है जो प्रत्येक तालिका में सभी कॉलम के माध्यम से लूप करता है। चाल है :) – wiesson

+0

बहुत कम ABS धन्यवाद !!!!! बहुत से संबंधित SO प्रश्न हैं, लेकिन केवल इस में एक यूटएफ -8 – alds

21

इस जवाब के लिए मैंने एक या दो घंटे की खोज के बाद। मुझे टाइपो से एक नए टाइपो 3 संस्करण में एक पुराने tt_news डीबी माइग्रेट करने की आवश्यकता थी। मैंने पहले ही निर्यात फ़ाइल में वर्णमाला को बदलने की कोशिश की है और इसे वापस आयात किया है, लेकिन इसे काम नहीं मिला।

UPDATE tt_news SET 
    title=convert(cast(convert(title using latin1) as binary) using utf8), 
    short=convert(cast(convert(short using latin1) as binary) using utf8), 
    bodytext=convert(cast(convert(bodytext using latin1) as binary) using utf8) 
WHERE 1 

तुम भी imagecaption, imagealttext, imagetitletext और कीवर्ड्स यदि आवश्यक हो तो परिवर्तित कर सकते हैं:

तब मैं ABS और startet मेज पर एक अद्यतन से ऊपर जवाब की कोशिश की। आशा है कि इससे किसी को tt_news को नए टाइपो 3 संस्करण में माइग्रेट करने में मदद मिलेगी।

+1

मुझे एबीएस का जवाब नहीं मिला जब तक कि मैं आपके पास नहीं पहुंचे। –

+0

दरअसल, एबीएस का जवाब उत्तर के लिए "कुंजी" है। मार्सेल का जवाब एक पूर्ण उदाहरण में "कुंजी" का उपयोग करता है। दोनों को ऊपर उठाओ! –

0

रास्ता बेहतर तरीका उपयोग कनेक्शन टो आप डेटाबेस सामान्य

तो आपको क्या चाहिए आप हेडर कॉड html में मेटा करके अपने पेज एनकोडिंग utf-8 बनाना चाहिए (इस भूल न) बनाने के लिए इस कोड का उपयोग है

तो इस कोड

$result = mysql_query('SELECT * FROM shops'); 
    while ($row = mysql_fetch_assoc($ 
    $name= iconv("windows-1256", "UTF-8", $row['name']); 

    mysql_query("SET NAMES 'utf8'"); 
    mysql_query("update `shops` SET `name`='".$name."' where ID='$row[ID]' "); 
    } 

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

  • कोई संबंधित समस्या नहीं^_^