ฉันมีบันทึกมากมายที่เก็บข้อความไว้ใน blob ใน MySQL เพื่อความสะดวกในการจัดการฉันต้องการเปลี่ยนรูปแบบในฐานข้อมูลเป็น TEXT ... ความคิดใด ๆ ที่ทำให้การเปลี่ยนแปลงง่ายขึ้นเพื่อไม่ให้ขัดจังหวะข้อมูล - ฉันเดาว่าจะต้องเข้ารหัสอย่างถูกต้องหรือไม่
ฉันมีบันทึกมากมายที่เก็บข้อความไว้ใน blob ใน MySQL เพื่อความสะดวกในการจัดการฉันต้องการเปลี่ยนรูปแบบในฐานข้อมูลเป็น TEXT ... ความคิดใด ๆ ที่ทำให้การเปลี่ยนแปลงง่ายขึ้นเพื่อไม่ให้ขัดจังหวะข้อมูล - ฉันเดาว่าจะต้องเข้ารหัสอย่างถูกต้องหรือไม่
คำตอบ:
นั่นไม่จำเป็น เพียงใช้SELECT CONVERT(column USING utf8) FROM
..... แทนที่จะเป็นSELECT column FROM
...
นี่คือตัวอย่างของบุคคลที่ต้องการแปลง blob เป็น char (1,000) ด้วยการเข้ารหัส UTF-8 :
CAST(a.ar_options AS CHAR(10000) CHARACTER SET utf8)
นี่คือคำตอบของเขา อาจมีมากขึ้นคุณสามารถอ่านเกี่ยวกับการโยนขวาที่นี่ ฉันหวังว่ามันจะช่วยได้บ้าง
ฉันมีปัญหาเดียวกันและนี่คือทางออกของฉัน:
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;
คุณสามารถทำได้ง่ายมาก
ALTER TABLE `table_name` CHANGE COLUMN `column_name` `column_name` LONGTEXT NULL DEFAULT NULL ;
แบบสอบถามด้านบนใช้งานได้สำหรับฉัน ฉันหวังว่ามันจะช่วยคุณเช่นกัน
หากคุณกำลังใช้MySQL ที่ WORKBENCHแล้วคุณสามารถเลือกคอลัมน์หยดตามปกติและคลิกขวาที่คอลัมน์และคลิกค่าเปิดในการแก้ไข ดูภาพหน้าจอ:
หรือคุณสามารถใช้ฟังก์ชั่นนี้:
DELIMITER $$
CREATE FUNCTION BLOB2TXT (blobfield VARCHAR(255)) RETURNS longtext
DETERMINISTIC
NO SQL
BEGIN
RETURN CAST(blobfield AS CHAR(10000) CHARACTER SET utf8);
END
$$
DELIMITER ;
คำตอบเหล่านี้ไม่เหมาะกับฉัน เมื่อแปลงเป็น UTF8 เมื่อตัวเข้ารหัสพบชุดของไบต์มันไม่สามารถแปลงเป็น UTF8 ได้จะส่งผลให้ a? การทดแทนซึ่งส่งผลให้ข้อมูลสูญหาย คุณต้องใช้ 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 Workbench คลิกขวาที่ฟิลด์ -> Open Value ใน Viewer-> Binary เมื่อแปลงกลับเป็น BINARY ค่าไบนารีควรเหมือนกันกับค่าดั้งเดิม
หรือคุณสามารถใช้ base-64 ซึ่งสร้างขึ้นเพื่อจุดประสงค์นี้:
SELECT
blobfield,
TO_BASE64(blobfield),
FROM_BASE64(TO_BASE64(blobfield))
SELECT CONVERT(column USING utf8) FROM table;