ปรับเปลี่ยนตารางทั้งหมดในฐานข้อมูลด้วยคำสั่งเดียว


13

มีคำสั่งเดียวหรือหนึ่งบรรทัดเพื่อแก้ไขตารางทั้งหมดภายในฐานข้อมูล ฉันต้องการออกคำสั่งนี้ในทุกตารางภายในฐานข้อมูล:

ALTER TABLE `table_name` CONVERT TO CHARACTER SET utf8;

วัตถุประสงค์ของฉันคือการแก้ไขชุดอักขระจาก latin1 เป็น utf8 เป็นตารางทั้งหมด

ปรับปรุง: RDBMS คือ MySQL

คำตอบ:


18

ไม่ไม่มีคำสั่งดังกล่าว แต่สิ่งที่คุณทำได้คือเขียนแบบสอบถามด่วนเพื่อสร้าง SQL สำหรับคุณดังนี้:

USE INFORMATION_SCHEMA;
SELECT 
CONCAT("ALTER TABLE `", TABLE_SCHEMA,"`.`", TABLE_NAME, "` CONVERT TO CHARACTER SET UTF8;") 
AS MySQLCMD FROM TABLES 
WHERE TABLE_SCHEMA = "your_schema_goes_here";

จากนั้นคุณสามารถรันเอาต์พุตจากสิ่งนี้เพื่อทำสิ่งที่คุณต้องการ

แหล่งที่มา:

http://forums.mysql.com/read.php?20,244395,244421#msg-244421


ไม่มีไม่มีวิธีที่จะทำสิ่งที่คุณต้องการในคำสั่งเดียว
Mr.Brownstone

เพื่อให้การทำงานภายใต้ MariaDB ด้วยเหตุผลบางอย่างฉันต้องออกWHERE TABLE_SCHEMA = "your_schema_goes_here"จากคำสั่ง
Gwyneth Llewelyn

2

วิธีที่ง่ายที่สุด: ส่งออกฐานข้อมูล เปิดฐานข้อมูลที่ส่งออกในตัวแก้ไขข้อความและดำเนินการค้นหา / แทนที่ด้วย "UTF8" หรืออะไรก็ตาม นำเข้าฐานข้อมูลที่แก้ไขแล้วอีกครั้ง


1
ทำไมนี่เป็นวิธีที่ง่ายที่สุด ถ้าคุณไม่สามารถนำ DB ของคุณมาดัดแปลงชุดอักขระได้
dezso

เพราะมันไม่จำเป็นต้องมีความรู้ SQL แน่นอนถ้าคุณไม่สามารถส่งออกฐานข้อมูล: ง่ายดายและวิธีนี้จะไม่เกี่ยวข้อง แต่ถ้าคุณมีสิทธิ์เพียงพอที่จะแก้ไขฐานข้อมูลโดยตรงก็มีโอกาสสูงที่คุณจะสามารถส่งออกได้เช่นกัน
แอนดรูสมิ ธ

นี่เป็นทางออกที่ดีที่สุดในกรณีของฉัน! การแก้ไขอย่างรวดเร็วที่มามีประโยชน์มาก ฉันทำงานในท้องถิ่นของฉันเมื่อฉันเริ่มมีข้อผิดพลาด "การผสมที่ผิดกฎหมาย" ในฐานข้อมูลของฉันด้วยเหตุผลบางอย่าง +1
evl183

1

หากคุณทำงานกับ MS SQL Server จะมีขั้นตอนการจัดเก็บที่ไม่มีเอกสารซึ่ง ms_foreachtable ที่คุณสามารถใช้ได้ ใช้แทนที่ชื่อตารางด้วย? ในคำสั่ง

ดังนั้นในตัวอย่างของคุณ

EXEC ms_foreachtable 'ALTER TABLE [?] .....'

บทความนี้พูดถึงการมี ms_foreachtable ใน MYSQL MYSQL CLONE of SP_MSFOREACHTABLE
Maryam Arshi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.