मैं MySQL में BLOB से TEXT में कैसे परिवर्तित करूं?


214

मेरे पास कई सारे रिकॉर्ड हैं जहां MySQL में टेक्स्ट को ब्लॉब में स्टोर किया गया है। हैंडलिंग में आसानी के लिए, मैं डेटाबेस में स्वरूप को TEXT में बदलना चाहूंगा ... कोई भी विचार कितनी आसानी से परिवर्तन कर सकता है ताकि डेटा को बाधित न करें - मुझे लगता है कि इसे ठीक से एन्कोड करने की आवश्यकता होगी?

जवाबों:


258

यह अनावश्यक है। बस का उपयोग करें SELECT CONVERT(column USING utf8) FROM..... बस के बजाय SELECT column FROM...


24
उपयोग:SELECT CONVERT(column USING utf8) FROM table;
bmaupin

4
यह उन GROUP_CONCATs के लिए बहुत अच्छा काम करता है जो आपके आउटपुट को ब्लब्स में बदल देते हैं और आप वास्तव में उन्हें स्ट्रिंग्स के रूप में चाहते हैं। मेरे पास नोड-जेएस के साथ नोड-जेएस लाइब्रेरी का उपयोग करते हुए ओपी के समान एक मुद्दा था - यह सभी group_concat मुद्दों को तय करता है।
13

यह काम, और CONVERT (LEFT (MD5 (ID)), 8) USING utf8
जेनिथ्स

यह काम नहीं करेगा। Charset को utf16 होने की आवश्यकता है अन्यथा यह डेटा हानि में परिणाम देगा यदि यह बाइट्स के एक सेट का सामना करता है जिसे utf8 में परिवर्तित नहीं किया जा सकता है। यह उन बाइट्स को एक के साथ बदल देगा? चरित्र डेटा हानि में जिसके परिणामस्वरूप।
डीन या

128

यहाँ एक ऐसे व्यक्ति का उदाहरण दिया गया है जो एक बूँद को char (1000) में UTF-8 एन्कोडिंग के साथ बदलना चाहता है :

CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)

यह उसका जवाब है। शायद और भी बहुत कुछ है जो आप यहाँ CAST के बारे में पढ़ सकते हैं । मुझे आशा है कि यह कुछ मदद करता है।


5
दुर्भाग्य से यह मेरे लिए काम नहीं कर रहा है। मुझे खाली पंक्तियाँ मिलती हैं और कभी-कभी अजीब प्रतीकों के साथ केवल 1-चरित्र-आउटपुट मिलता है।
C4d

चयनित क्वेरी में भी काम किया, सामग्री के रूप में A.id, CAST (B.content AS CHAR (10000) CHARACTER SET utf8) का चयन करें, B से A Join B ON B.content_id = A.content_id
dkb

15

मेरे पास एक ही समस्या है, और यहाँ मेरा समाधान है:

  1. प्रत्येक बूँद कॉलम के लिए तालिका में टाइप टेक्स्ट के नए कॉलम बनाएँ
  2. सभी ब्लब्स को टेक्स्ट में कनवर्ट करें और उन्हें नए कॉलम में सहेजें
  3. बूँद कॉलम निकालें
  4. हटाए गए लोगों के नाम पर नए कॉलम का नाम बदलें
ALTER TABLE mytable
ADD COLUMN field1_new TEXT NOT NULL,
ADD COLUMN field2_new TEXT NOT NULL;

update mytable set
field1_new = CONVERT(field1 USING utf8),
field2_new = CONVERT(field2 USING utf8);

alter table mytable
drop column field1,
drop column field2;

alter table mytable
change column field1_new field1 text,
change column field2_new field2 text;

2
यह एकमात्र उत्तर है जो मेरे लिए काम करता है, धन्यवाद :)
टॉम

मध्यवर्ती स्तंभ ने चाल चली। अन्य सभी तरीकों और उत्तरों के माध्यम से खराब पात्रों का हवाला देते हुए त्रुटियों को रखा। धन्यवाद
gillytech

8

आप इसे बहुत आसानी से कर सकते हैं।

ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;

उपरोक्त क्वेरी मेरे लिए काम की है। मुझे उम्मीद है कि यह आपकी भी मदद करेगा।


8

यदि आप MYSQL-WORKBENCH का उपयोग कर रहे हैं , तो आप सामान्य रूप से ब्लॉब कॉलम का चयन कर सकते हैं और कॉलम पर राइट क्लिक करें और संपादक में खुले मूल्य पर क्लिक करें । स्क्रीनशॉट देखें:

स्क्रीनशॉट


2

या आप इस फ़ंक्शन का उपयोग कर सकते हैं:

DELIMITER $$

CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
       RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$


DELIMITER ;

1

phpMyAdmin स्क्रीनशॉट PhpMyAdmin का उपयोग करके आप BLOB सामग्री दिखाने और पूर्ण पाठ दिखाने के लिए विकल्प भी निर्धारित कर सकते हैं।


ऐसा करने के बारे में कोई वास्तव में कैसे जाएगा? यदि आप कुछ कोड और / या स्क्रीनशॉट का विवरण देते हैं तो आपका उत्तर बहुत अधिक उपयोगी होगा।
TrampolineTales

0

इनमें से किसी भी उत्तर ने मेरे लिए काम नहीं किया। UTF8 में कनवर्ट करते समय, जब एनकोडर बाइट्स के एक सेट का सामना करता है, तो यह UTF8 में परिवर्तित नहीं हो सकता है? प्रतिस्थापन जिसके परिणामस्वरूप डेटा हानि होती है। आपको UTF16 का उपयोग करने की आवश्यकता है:

SELECT
    blobfield,
    CONVERT(blobfield USING utf16),
    CONVERT(CONVERT(blobfield USING utf16), BINARY),
    CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16),
    CAST(CAST(blobfield  AS CHAR(10000) CHARACTER SET utf16) AS BINARY)

आप MySQL कार्यक्षेत्र में बाइनरी मानों का निरीक्षण कर सकते हैं। फ़ील्ड पर राइट क्लिक करें -> व्यूअर में ओपन वैल्यू-> बाइनरी। द्विआधारी में वापस परिवर्तित होने पर द्विआधारी मान मूल के समान होना चाहिए।

वैकल्पिक रूप से, आप बस बेस -64 का उपयोग कर सकते हैं जो इस उद्देश्य के लिए बनाया गया था:

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