আমি কীভাবে মাইএসকিউএল থেকে বিএলওবি থেকে টেক্সট রূপান্তর করব?


214

আমার পুরো অনেক রেকর্ড রয়েছে যেখানে মাইএসকিউএল-এ টেক্সটটি একটি ব্লবে সংরক্ষণ করা হয়েছে। হ্যান্ডলিংয়ের স্বাচ্ছন্দ্যের জন্য আমি ডাটাবেসে ফর্ম্যাটটি টেক্সট-এ পরিবর্তন করতে চাই ... ডেটা ব্যাহত না হওয়ার জন্য পরিবর্তনটি কীভাবে করা যায় সহজেই কোনও ধারণা - আমার ধারণা এটি সঠিকভাবে এনকোড করা দরকার?

উত্তর:


258

এটা অপ্রয়োজনীয়। শুধু ব্যবহার SELECT CONVERT(column USING utf8) FROM..... শুধু পরিবর্তে SELECT column FROM...


24
ব্যবহার:SELECT CONVERT(column USING utf8) FROM table;
bmaupin

4
এটি তাদের GROUP_CONCATs এর জন্য দুর্দান্ত কাজ করে যা আপনার আউটপুটটিকে ব্লবগুলিতে রূপান্তর করে এবং আপনি সত্যই তাদেরকে স্ট্রিং হিসাবে চান। নোড-মাইএসকিএল লাইব্রেরি সহ নোড.জেএস ব্যবহার করার সময় আমার কাছে ওপি'র অনুরূপ একটি সমস্যা ছিল - এটি সমস্ত গ্রুপ_ক্যাঙ্কট সমস্যা সমাধান করেছে।
মার্কসাইজম

এই কাজটি এবং
কনভার্ট

এটি কাজ করবে না। চরসেটটি ইউটিএফ 16 হওয়া দরকার অন্যথায় এটি বাইটের একটি সেটের মুখোমুখি হয় যা utf8 তে রূপান্তর করতে পারে না data এটি একটি বাইট প্রতিস্থাপন করবে? চরিত্রের ফলে ডেটা ক্ষতি হয়।
ডিন বা

128

এখানে এমন কোনও ব্যক্তির উদাহরণ যা ইউটিএফ -8 এনকোডিং সহ একটি ব্লবকে চরে (1000) রূপান্তর করতে চায় :

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

এই তার উত্তর। বোধহয় আরো অনেক কিছু আপনি কাস্ট সম্পর্কে পড়তে পারেন এখানে ডান । আমি আশা করি এটি কিছু সাহায্য করবে।


5
দুর্ভাগ্যক্রমে এটি আমার পক্ষে কাজ করছে না। আমি খালি সারি এবং কখনও কখনও অদ্ভুত চিহ্ন সহ কেবল 1-অক্ষর-আউটপুট পাই।
সি

পাশাপাশি নির্বাচিত ক্যোয়ারিতেও কাজ করেছেন, এড, CAST (বিএএসসিটি (CHARACTER SET utf8) বিষয়বস্তু হিসাবে নির্বাচন করুন, বি থেকে বি যোগ করুন বি কন্টেন্ট_আইডি = এ-কনটেন্ট_আইডি
ডিসিবি

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
এই একমাত্র উত্তর যা আমার পক্ষে কাজ করেছে, ধন্যবাদ :)
টম

মধ্যবর্তী কলামটি কৌশলটি করেছিল। অন্য সমস্ত পদ্ধতি এবং উত্তরগুলির মাধ্যমে খারাপ চরিত্রগুলিকে উদ্ধৃত করে ত্রুটিগুলি পেয়েছি। ধন্যবাদ
গিলিটেক

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 স্ক্রিনশট পিএইচপিএমএইডমিন ব্যবহার করে আপনি বিএলএব বিষয়বস্তু প্রদর্শন করতে এবং সম্পূর্ণ পাঠ্য দেখানোর বিকল্পগুলিও সেট করতে পারেন।


এই কাজটি সম্পর্কে কেউ ঠিক কীভাবে যাবেন? আপনি যদি কিছু কোড এবং / অথবা এর স্ক্রিনশটগুলি বিশদ বিবরণ পোস্ট করেন তবে আপনার উত্তর অনেক বেশি সহায়ক হবে।
ট্রাম্পোলাইনটেলস 13

0

এই উত্তরগুলির কোনওোটাই আমার পক্ষে কাজ করেনি। ইউটিএফ 8 এ রূপান্তর করার সময়, যখন এনকোডারটি বাইটের একটি সেটের মুখোমুখি হয় তখন এটি ইউটিএফ 8 তে রূপান্তর করতে পারে না যার ফলস্বরূপ? প্রতিস্থাপনের ফলে ডেটা ক্ষতি হয়। আপনাকে ইউটিএফ 16 ব্যবহার করতে হবে:

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)

আপনি মাইএসকিউএল ওয়ার্কবেঞ্চে বাইনারি মানগুলি পরিদর্শন করতে পারেন। ক্ষেত্রটিতে ডান ক্লিক করুন -> দর্শকের-> বাইনারিতে মান খুলুন। যখন BINARY এ আবার রূপান্তরিত হয় তখন বাইনারি মানগুলি মূল হিসাবে একই হওয়া উচিত।

বিকল্পভাবে, আপনি কেবল বেস -৪৪ ব্যবহার করতে পারেন যা এই উদ্দেশ্যে তৈরি হয়েছিল:

SELECT
    blobfield,
    TO_BASE64(blobfield),
    FROM_BASE64(TO_BASE64(blobfield))
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.