"गलत स्ट्रिंग मान" त्रुटियों को कैसे ठीक करें?


162

गलत स्ट्रिंग मान त्रुटियों के कारण यादृच्छिक ईमेल को छोड़ने के लिए दिए गए एक एप्लिकेशन को सूचित करने के बाद, मैं हालांकि गया और utf8स्तंभ चार्ट और डिफ़ॉल्ट कॉलम कोलाट का उपयोग करने के लिए कई पाठ कॉलम स्विच किए (utf8_general_ci ) ताकि वह उन्हें स्वीकार कर ले। यह अधिकांश त्रुटियों को ठीक कर देता है, और गैर-लैटिन ईमेल को हिट करने पर एप्लिकेशन को एसक्यूएल त्रुटियां मिलना बंद कर देता है।

इसके बावजूद, कुछ ईमेल अभी भी प्रोग्राम को गलत स्ट्रिंग मान इर्रिटर्स का कारण बना रहे हैं: (Incorrect string value: '\xE4\xC5\xCC\xC9\xD3\xD8...' for column 'contents' at row 1)

सामग्री कॉलम एक MEDIUMTEXTडेटाटैब है जो utf8कॉलम चारसेट और ए का उपयोग करता हैutf8_general_ci । इस कॉलम में कोई झंडे नहीं हैं जिन्हें मैं टॉगल कर सकूं।

यह ध्यान में रखते हुए कि मैं एप्लिकेशन स्रोत कोड को तब तक स्पर्श या देखना नहीं चाहता जब तक कि बिल्कुल आवश्यक न हो:

  • उस त्रुटि के कारण क्या है? (हां, मुझे पता है कि ईमेल यादृच्छिक कचरे से भरे हुए हैं, लेकिन मुझे लगा कि utf8 बहुत अधिक अनुदार होगा)
  • मेरे द्वारा यह कैसे किया जा सकता है?
  • इस तरह के फिक्स के संभावित प्रभाव क्या हैं?

एक बात जो मैंने मानी थी, वह द्विआधारी ध्वज के साथ एक utf8 varchar ([कुछ बड़ी संख्या]) पर स्विच कर रही थी, लेकिन मैं MySQL से अपरिचित हूं, और इस तरह के फिक्स होने का कोई मतलब नहीं है।


3
पोस्टमार्टम: रिचीहिंडल के समाधान से समस्या हल हो गई और जिस समय यह चल रही थी, उसमें कोई अतिरिक्त समस्या नहीं आई। यह एक हैक का एक सा हो सकता है, लेकिन यह काम किया है, और मुझे 3 जी सॉफ्टवेयर के साथ अपने हाथ गंदे होने से बचने की अनुमति दी है जो मुझे पूरी तरह से समझ में नहीं आता है। इस बिंदु पर, हमने सॉफ़्टवेयर / स्कीमा के एक नए संस्करण के लिए अपडेट किया है जो इन सभी एन्कोडिंग समस्याओं को ठीक से हैंडल करता है (और यह पर्याप्त रूप से नया है कि यह वास्तव में समर्थित है), हैक को अनावश्यक प्रदान करता है।
ब्रायन

जवाबों:


43

"\xE4\xC5\xCC\xC9\xD3\xD8"मान्य नहीं है UTF-8 पायथन का उपयोग करके परीक्षण किया गया:

>>> "\xE4\xC5\xCC\xC9\xD3\xD8".decode("utf-8")
...
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-2: invalid data

यदि आप डेटाबेस के भीतर डिकोडिंग त्रुटियों से बचने का एक तरीका खोज रहे हैं, तो cp1252 एन्कोडिंग (उर्फ "विंडोज -1252" उर्फ ​​"विंडोज वेस्टर्न यूरोपियन") सबसे अधिक अनुमत एन्कोडिंग है - प्रत्येक बाइट मान एक मान्य कोड बिंदु है।

बेशक यह वास्तविक UTF-8 को समझने वाला नहीं है, न ही कोई अन्य गैर-cp1252 एन्कोडिंग, लेकिन ऐसा लगता है कि आप इसके बारे में बहुत चिंतित नहीं हैं?


4
आप वास्तव में इसका क्या मतलब है, "बेशक यह वास्तविक UTF-8 को किसी भी अधिक समझने वाला नहीं है?"
ब्रायन

5
@ ब्रायन: यदि आप इसे कहते हैं कि आप इसे cp1252 दे रहे हैं, और आप वास्तव में इसे UTF-8 के लिए देते हैं, कहते हैं café, यह गलत व्याख्या करने वाला है café। यह क्रैश नहीं होगा, लेकिन यह उच्च-बिट वर्णों को गलत समझेगा।
रिचिहंडले

3
@ रीची: डेटाबेस ख़ुशी से डेटा को जो चाहे कह सकता है, लेकिन अगर php कोड जो इसे पकड़ लेता है वह इसे एक स्ट्रिंग में भर रहा है, तो इससे बहुत फर्क नहीं पड़ेगा ... होगा? मैं ठीक से नहीं देख पा रहा हूँ कि UTF-8 की समझ की कमी का क्या प्रभाव पड़ रहा है।
ब्रायन

7
@ ब्रायन: नहीं, आप सही कह रहे हैं। जिस समय यह अंतर होगा वह डेटाबेस के भीतर होगा, उदाहरण के लिए यदि आपने अपने SQL में ORDER BY क्लॉज का उपयोग किया है - तो छंटनी की सुविधा होगी जहां आपके पास गैर- ASCII वर्ण थे।
रिचिहंडले

11
कृपया इस उत्तर को समाधान के रूप में चिह्नित करें, त्रुटि को छिपाना किसी भी चीज का समाधान नहीं है। अपनी कार से ओवरहीटिंग लैंप निकालें और आप देखेंगे।
डेविड वर्तनियन

133

मैं रिचीज़ के जवाब का सुझाव नहीं दूंगा, क्योंकि आप डेटाबेस के अंदर डेटा को खराब कर रहे हैं। आप अपनी समस्या को ठीक नहीं करेंगे, लेकिन इसे "छिपाने" का प्रयास करें और क्रेप्ड डेटा के साथ आवश्यक डेटाबेस संचालन करने में सक्षम न हों।

यदि आप इस त्रुटि का सामना करते हैं या तो आपके द्वारा भेजा जा रहा डेटा UTF-8 एनकोडेड नहीं है, या आपका कनेक्शन UTF-8 नहीं है। सबसे पहले, सत्यापित करें कि डेटा स्रोत (एक फ़ाइल, ...) वास्तव में में UTF-8 है।

फिर, अपने डेटाबेस कनेक्शन की जाँच करें, आपको इसे जोड़ने के बाद करना चाहिए:

SET NAMES 'utf8';
SET CHARACTER SET utf8;

इसके बाद, सत्यापित करें कि डेटा संग्रहीत की गई तालिका में utf8 वर्ण सेट है:

SELECT
  `tables`.`TABLE_NAME`,
  `collations`.`character_set_name`
FROM
  `information_schema`.`TABLES` AS `tables`,
  `information_schema`.`COLLATION_CHARACTER_SET_APPLICABILITY` AS `collations`
WHERE
  `tables`.`table_schema` = DATABASE()
  AND `collations`.`collation_name` = `tables`.`table_collation`
;

अंतिम, अपनी डेटाबेस सेटिंग जांचें:

mysql> show variables like '%colla%';
mysql> show variables like '%charac%';

यदि स्रोत, परिवहन और गंतव्य UTF-8 हैं, तो आपकी समस्या दूर हो गई है;)


1
@ करीम: यह अजीब है, क्योंकि यह सेटिंग SET NAMES कमांड द्वारा कवर की गई है, जो SET character_set_client, SET character_set_results, SET character_set_connection dev.ysql.com/doc/refman/5.1/en/charset-connection.html
निको गावेंडे

2
दूसरा कमांड होना चाहिए SET CHARACTER SET utf8(CHARACTER_SET नहीं)
कोडर

6
हालांकि यह जवाब समस्या की जांच करने में मदद करता है, लेकिन यह जवाब नहीं देता कि इसे ठीक करने के लिए क्या करना चाहिए। मैं "utf-8" के बजाय "latin1" देखता हूं।
वानुआन

2
यह उत्तर समस्या को समझाने में बहुत अच्छा है, लेकिन समाधान के बारे में विस्तार से बहुत खराब है (जो कि ओपी ने पूछा है)। @nicogawenda: समस्या को पूरी तरह से ठीक करने के लिए सभी SQL क्वेरी को चलाने के लिए क्या हैं? सभी पहले से मौजूद डेटा को कैसे ठीक करें?
क्लिंट ईस्टवुड

1
"यदि स्रोत, परिवहन और गंतव्य UTF-8 हैं, तो आपकी समस्या दूर हो गई है;)" यही मेरे लिए चाल थी
suarsenegger

80

MySQL के utf-8 प्रकार वास्तव में उचित utf-8 नहीं हैं - यह केवल प्रति चरित्र तीन बाइट्स का उपयोग करता है और केवल मूल बहुभाषी विमान (अर्थात कोई इमोजी, कोई सूक्ष्म विमान, आदि) का समर्थन नहीं करता है।

यदि आपको उच्च यूनिकोड विमानों से मूल्यों को संग्रहीत करने की आवश्यकता है, तो आपको utf8mb4 एन्कोडिंग की आवश्यकता है ।


9
मुझे लगता है कि यह सबसे अच्छा फिक्स होने की संभावना है। 5.5 अपग्रेड करें और उपर्युक्त उत्तरों में utf8mb4 के साथ utf8 को बदलें। मैं ट्विटर से utf8 डेटा डाल रहा था जिसमें इमोजीस या अन्य चार्ट थे जिनकी 4 बाइट्स की आवश्यकता थी।
rmarscher

मान लें कि हम 5.5 में अपग्रेड नहीं करेंगे। हम त्रुटियों को कैसे दबाते हैं?
उपयोगकर्ता

मैंने इस सबसे उपयोगी उत्तर के लिए बहुत दूर तक स्क्रॉल किया
handheldblender

1
मूल प्रश्न के 10 साल बाद। बता दें कि MySQL के utf8 एन्कोडिंग उचित utf8 नहीं है। Utf8mb4 का उपयोग करें! वही MariaDB के लिए चला जाता है। अन्यथा आप खुशी के आंसू नहीं पा सकते 😂
Liam

51

तालिका और फ़ील्ड में गलत एन्कोडिंग है; हालाँकि, आप उन्हें UTF-8 में परिवर्तित कर सकते हैं।

ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;

1
मुझे लगता है कि यह सभी का सही उत्तर है। मेरे पास दो टेबल हैं जिनमें से प्रत्येक में एक utf8 varchar प्रारूप है। इसमें से एक को त्रुटि मिली, दूसरा ठीक है। यहां तक ​​कि मैं उपयोगकर्ता 'अपडेट सिलेक्ट' को 'अच्छे' utf8 कॉलम से दूसरी टेबल पर कॉपी करता हूं, वही त्रुटि होती है। ऐसा इसलिए है क्योंकि MySQL के विभिन्न संस्करणों में दो टेबल बनाए गए हैं।
ऐशीगुआंग

हाँ! यह मेरी डेटाबेस तालिका से भी गलत था। मुझे लगता है कि यह उत्तर सही होना चाहिए। मेरी समस्या यह थी कि चयनित कोलाट utf8_general_ci के बजाय utf8_unicode_ci था। धन्यवाद :)
jprivillaso

2
यह जवाब यहाँ क्या कर रहा है, शीर्ष पर होना चाहिए
सगुन श्रेष्ठ

1
यह मदद करता है, यह आपको बताता है कि क्या गलत है, इसके बजाय क्या प्रयास करना चाहिए।
विक्टर डि

धन्यवाद! इसने मुझे बहुत मदद की मैंने टेबल कोलाजेशन चींटी को बदल दिया, मुझे लगता है कि यह होना चाहिए लेकिन खेत अभी भी एएससीआई टकराव थे ...
रादू

25

मैंने आज इस समस्या को 'LONGBLOB' प्रकार के कॉलम में बदलकर हल किया है जो UTF-8 वर्णों के बजाय कच्चे बाइट्स को संग्रहीत करता है।

ऐसा करने का एकमात्र नुकसान यह है कि आपको एन्कोडिंग का ख्याल रखना होगा। यदि आपके एप्लिकेशन का एक क्लाइंट UTF-8 एन्कोडिंग का उपयोग करता है और दूसरा CP1252 का उपयोग करता है, तो आपके पास गलत पात्रों के साथ भेजे गए आपके ईमेल हो सकते हैं। इससे बचने के लिए, अपने सभी अनुप्रयोगों में हमेशा एक ही एन्कोडिंग (जैसे UTF-8) का उपयोग करें

TEXT / LONGTEXT और BLOB / LONGBLOB के बीच अंतर के अधिक विवरण के लिए इस पृष्ठ http://dev.mysql.com/doc/refman/5.0/en/blob.html का संदर्भ लें । इन दोनों पर चर्चा करने वाले वेब पर कई अन्य तर्क भी हैं।


1
यह समाधान जाने का सबसे आसान तरीका लगता है। मैंने सफलता के बिना कुछ अन्य एन्कोडिंग की कोशिश की।
शिमोन अबोलारिनवा

10

पहले जांचें कि क्या आपका default_character_set_name utf8 है।

SELECT default_character_set_name FROM information_schema.SCHEMATA S WHERE schema_name = "DBNAME";

यदि परिणाम utf8 नहीं है, तो आपको अपना डेटाबेस बदलना होगा। सबसे पहले आपको एक डंप को बचाना होगा।

निर्दिष्ट डेटाबेस में सभी तालिकाओं के लिए UTF-8 में वर्ण सेट एन्कोडिंग को बदलने के लिए, कमांड लाइन पर निम्न कमांड टाइप करें। डेटाबेस नाम के साथ DBNAME बदलें:

mysql --database=DBNAME -B -N -e "SHOW TABLES" | awk '{print "SET foreign_key_checks = 0; ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; SET foreign_key_checks = 1; "}' | mysql --database=DBNAME

डेटाबेस के लिए UTF-8 में वर्ण सेट एन्कोडिंग को बदलने के लिए, mysql > प्रॉम्प्ट पर निम्न कमांड टाइप करें । डेटाबेस नाम के साथ DBNAME बदलें:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

अब आप अपने डेटाबेस में utf8 वर्ण लिखने के लिए पुनः प्रयास कर सकते हैं। जब मैं अपने डेटाबेस में csv फ़ाइल की 200000 पंक्ति अपलोड करने का प्रयास करता हूं तो यह समाधान मेरी मदद करता है।


8

सामान्य तौर पर, यह तब होता है जब आप असंगत एन्कोडिंग / कोलाजेशन वाले कॉलमों में तार डालते हैं।

मुझे यह त्रुटि तब मिली जब मेरे पास TRIGGERs थे, जो किसी कारण से सर्वर के टकराव को विरासत में मिला। और mysql का डिफ़ॉल्ट (कम से कम उबंटू पर) लैटिन -1 है, जिसमें स्वीडिश टकराव है। हालाँकि मेरे पास डेटाबेस और सभी तालिकाएँ UTF-8 में सेट थीं, फिर भी मुझे सेट करना बाकी थाmy.cnf :

/etc/mysql/my.cnf:

[mysqld]
character-set-server=utf8
default-character-set=utf8

और यह utf8- * के साथ सभी ट्रिगर को सूचीबद्ध करना चाहिए:

select TRIGGER_SCHEMA, TRIGGER_NAME, CHARACTER_SET_CLIENT, COLLATION_CONNECTION, DATABASE_COLLATION from information_schema.TRIGGERS

और इसके द्वारा सूचीबद्ध कुछ चर भी utf-8- * (कोई लैटिन -1 या अन्य एन्कोडिंग) नहीं होना चाहिए:

show variables like 'char%';

6

यद्यपि आपका कोलाज utf8_general_ci पर सेट है, मुझे संदेह है कि डेटाबेस, तालिका या यहां तक ​​कि स्तंभ का वर्ण एन्कोडिंग भिन्न हो सकता है।

ALTER TABLE tabale_name MODIFY COLUMN column_name VARCHAR(255)  
CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;

5

मुझे एक समान त्रुटि मिली ( Incorrect string value: '\xD0\xBE\xDO\xB2. ...' for 'content' at row 1)। मैंने कॉलम के वर्ण सेट को बदलने की कोशिश की है utf8mb4और उसके बाद त्रुटि को बदल दिया है 'Data too long for column 'content' at row 1'
यह पता चला कि mysql मुझे गलत त्रुटि दिखाता है। मैंने स्तंभ के वर्ण सेट को utf8बदल दिया और स्तंभ के प्रकार को बदल दिया MEDIUMTEXT। इसके बाद त्रुटि गायब हो गई।
मुझे उम्मीद है कि यह किसी की मदद करता है।
वैसे एक ही मामले में मारियाबीडी (मैंने वहां उसी इंसर्ट का परीक्षण किया है) बस बिना त्रुटि के एक पाठ काट दिया।


MySQL भी मैंने बहुत सारी चीजों को थका दिया, महसूस किया कि mysql इस संस्करण में 4 बाइट utf-8 का समर्थन नहीं करता है और यह समझने की कोशिश कर रहा था कि यह क्या कारण है। जाहिरा तौर पर टाइप बदलना जवाब था, एक तात्कालिक समाधान।
लीज़ा

4

उस त्रुटि का मतलब है कि या तो आपके पास गलत एन्कोडिंग वाला स्ट्रिंग है (जैसे आप आईएसओ 8859-1 एन्कोडेड स्ट्रिंग को UTF-8 एन्कोडेड कॉलम में दर्ज करने की कोशिश कर रहे हैं), या वह कॉलम उस डेटा का समर्थन नहीं करता है जिसे आप दर्ज करने का प्रयास कर रहे हैं।

व्यवहार में, बाद की समस्या MySQL UTF-8 कार्यान्वयन के कारण होती है जो केवल UNICODE वर्णों का समर्थन करती है जिन्हें UTF-8 में प्रतिनिधित्व करने पर 1-3 बाइट्स की आवश्यकता होती है। JDBC के माध्यम से MySQL में UTF-8 डालने की कोशिश करते समय "गलत स्ट्रिंग मान" देखें ? ब्योरा हेतु।


2

इस गलत स्ट्रिंग मान में चलने पर मेरे लिए समाधान: स्क्रिप्टकेस का उपयोग करके स्तंभ त्रुटि के लिए '\ xF8' यह सुनिश्चित करना था कि मेरा डेटाबेस utf8 सामान्य ci के लिए सेट किया गया है और इसलिए मेरे फ़ील्ड कोलाज़ हैं। फिर जब मैं अपने डेटा को एक सीएसवी फ़ाइल का आयात करता हूं, तो मैं सीएसवी को यूई स्टूडियो में लोड करता हूं, फिर इसे utf8 और Voila के रूप में स्वरूपित करता हूं! यह एक आकर्षण की तरह काम करता है, 29000 रिकॉर्ड में कोई त्रुटि नहीं है। पहले मैं एक एक्सेल निर्मित सीएसवी आयात करने की कोशिश कर रहा था।


2

मैंने उपरोक्त सभी समाधानों की कोशिश की है (जो सभी वैध बिंदु लाते हैं), लेकिन मेरे लिए कुछ भी काम नहीं कर रहा था।

जब तक मैंने पाया कि C # में मेरा MySQL टेबल फील्ड मैपिंग एक गलत प्रकार का उपयोग कर रहा था: MySqlDbType.Blb । मैंने इसे MySqlDbType.Text में बदल दिया और अब मैं अपने इच्छित सभी UTF8 प्रतीकों को लिख सकता हूं!

ps मेरा MySQL टेबल फील्ड "लॉन्गटैक्स" प्रकार का है। हालाँकि, जब मैंने MyGeneration सॉफ़्टवेयर का उपयोग करके फ़ील्ड मैपिंग को स्वचालित किया, तो यह स्वचालित रूप से फ़ील्ड को MySqlDbType.Blob के रूप में C # में सेट करता है।

दिलचस्प बात यह है कि, मैं बिना किसी परेशानी के कई महीनों के लिए MySqlDbType.Blob प्रकार का उपयोग कर रहा हूं, जब तक कि एक दिन मैंने इसमें कुछ विशिष्ट पात्रों के साथ एक स्ट्रिंग लिखने की कोशिश नहीं की।

आशा है कि यह किसी ऐसे व्यक्ति की मदद करता है जो त्रुटि का कारण खोजने के लिए संघर्ष कर रहा है।


1

मैंने कॉलम नाम से पहले बाइनरी जोड़ा और चारसेट एरर को हल किया।

तालिका के मानों में डालें (बाइनरी स्ट्रिंगकोनेम 1);


1

नमस्ते मुझे भी यह त्रुटि मिली जब मैं अपने ऑनलाइन डेटाबेस का उपयोग Godaddy सर्वर से करता हूं मुझे लगता है कि इसका mysql संस्करण 5.1 या अधिक है। लेकिन जब मैं अपने लोकलहोस्ट सर्वर (संस्करण 5.7) से करता हूं, तो यह ठीक था उसके बाद मैंने स्थानीय सर्वर से तालिका बनाई और mysql योग का उपयोग करके ऑनलाइन सर्वर पर नकल की, मुझे लगता है कि समस्या चरित्र सेट के साथ है

यहाँ स्क्रीनशॉट


1

इस त्रुटि को ठीक करने के लिए मैंने अपने MySQL डेटाबेस को utf8mb4 में अपग्रेड किया जो इस विस्तृत ट्यूटोरियल का अनुसरण करके पूर्ण यूनिकोड वर्ण का समर्थन करता है । मेरा सुझाव है कि इसे ध्यान से देखें, क्योंकि काफी कुछ गोचर हैं (उदाहरण के लिए नए एन्कोडिंग के कारण सूचकांक कुंजी बहुत बड़ी हो सकती है जिसके बाद आपको फ़ील्ड प्रकारों को संशोधित करना होगा)।


1

इसमें अच्छे उत्तर हैं। जब से मैं एक ही त्रुटि में भाग गया, मैं सिर्फ अपना जोड़ रहा हूं, लेकिन यह पूरी तरह से अलग समस्या है। (शायद सतह पर समान, लेकिन एक अलग मूल कारण।)

मेरे लिए निम्न फ़ील्ड के लिए त्रुटि हुई:

@Column(nullable = false, columnDefinition = "VARCHAR(255)")
private URI consulUri;

यह डेटाबेस में URIकक्षा के एक द्विआधारी क्रमांकन के रूप में संग्रहीत किया जा रहा है । यह इकाई परीक्षण (H2 का उपयोग करके) या CI / एकीकरण परीक्षण ( MariaDB4j का उपयोग करके ) के साथ किसी भी झंडे को नहीं उठाता है , इसने हमारे उत्पादन-जैसे सेटअप में विस्फोट किया। (हालांकि, एक बार समस्या को समझने के बाद, MariaDB4j उदाहरण में गलत मान देखना काफी आसान था; यह सिर्फ परीक्षण को उड़ा नहीं सका।) समाधान एक कस्टम प्रकार के मैपर का निर्माण करना था:

package redacted;

import javax.persistence.AttributeConverter;
import java.net.URI;
import java.net.URISyntaxException;

import static java.lang.String.format;

public class UriConverter implements AttributeConverter<URI, String> {
    @Override
    public String convertToDatabaseColumn(URI attribute) {
        return attribute.toString();
    }

    @Override
    public URI convertToEntityAttribute(String field) {
        try {
            return new URI(field);
        }
        catch (URISyntaxException e) {
            throw new RuntimeException(format("could not convert database field to URI: %s", field));
        }
    }
}

निम्नानुसार उपयोग किया जाता है:

@Column(nullable = false, columnDefinition = "VARCHAR(255)")
@Convert(converter = UriConverter.class)
private URI consulUri;

जहां तक ​​हाइबरनेट शामिल है, ऐसा लगता है कि इसमें प्रदान किए गए प्रकार के मैपर का एक गुच्छा है , जिसमें शामिल हैं java.net.URL, लेकिन इसके लिए नहीं java.net.URI(जो कि हमें यहां आवश्यक है)।


1

मेरे मामले में उस समस्या को हल किया गया था जब मैसकरल कॉलम एन्कोडिंग को 'बाइनरी' में बदल दिया गया (डेटा प्रकार स्वचालित रूप से VARBINARY में बदल दिया जाएगा)। संभवतः मैं उस कॉलम को फ़िल्टर या खोज नहीं कर पाऊंगा, लेकिन मुझे उसकी कोई आवश्यकता नहीं है।


1

यदि आप सहेजने से पहले कुछ स्ट्रिंग फ़ंक्शन के साथ मूल्य को संसाधित करने के लिए होते हैं, तो सुनिश्चित करें कि फ़ंक्शन मल्टीबाइट वर्णों को ठीक से संभाल सकता है। स्ट्रिंग फ़ंक्शंस जो ऐसा नहीं कर सकते हैं और कहते हैं, काट-छाँट करने का प्रयास बीच में एक एकल मल्टीबाइट वर्ण को विभाजित कर सकता है, और यह इस तरह की स्ट्रिंग त्रुटि स्थितियों का कारण बन सकता है।

उदाहरण के लिए PHP में, आप से स्विच करने की आवश्यकता होगी substrकरने के लिए mb_substr


0

मेरे मामले में, पहले मैं एक '' ??? मेरी वेबसाइट में, फिर मैं मैसकल के चरित्र सेट की जांच करता हूं जो अब लैटिन है, इसलिए मैंने इसे utf-8 में बदल दिया, फिर मैंने अपनी परियोजना को फिर से शुरू किया, फिर मुझे आपके साथ वही त्रुटि मिली, फिर मैंने पाया कि मैं डेटाबेस के चारसेट को बदलना भूल गया हूं और utf-8, बूम में बदल, यह काम किया।


0

मैंने यहां बताए गए लगभग हर चरण की कोशिश की। किसी ने काम नहीं किया। मुरादब डाउनलोड किया। इसने काम कर दिया। मुझे पता है कि यह कोई समाधान नहीं है, फिर भी इससे किसी को समस्या की पहचान करने या अस्थायी समाधान देने में मदद मिल सकती है।

Server version: 10.2.10-MariaDB - MariaDB Server
Protocol version: 10
Server charset: UTF-8 Unicode (utf8)

0

मेरे मामले में Incorrect string value: '\xCC\x88'..., समस्या यह थी कि एक ओ-उम्मट अपने विघटित स्थिति में था। यह सवाल और जवाब मेरे बीच के अंतर को समझने में मदद मिली और ö। PHP में, मेरे लिए फिक्स PHP के नॉर्मलाइज़र लाइब्रेरी का उपयोग करना था । जैसे Normalizer::normalize('o¨', Normalizer::FORM_C),।


-2

1 - आपको अपने कनेक्शन में UTF8 को लागू करने की उचितता की घोषणा करनी होगी। http://php.net/manual/en/mysqli.set-charset.php

2 - यदि आप स्क्रिप्ट को निष्पादित करने के लिए mysql कमांडो लाइन का उपयोग कर रहे हैं, तो आपको ध्वज का उपयोग करना होगा, जैसे: Cmd: C:\wamp64\bin\mysql\mysql5.7.14\bin\mysql.exe -h localhost -u root -P 3306 --default-character-set=utf8 omega_empresa_parametros_336 < C:\wamp64\www\PontoEletronico\PE10002Corporacao\BancoDeDadosModelo\omega_empresa_parametros.sql

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.