วิธีการเปลี่ยนการเรียงหน้าเริ่มต้นของตาราง?


187
create table check2(f1 varchar(20),f2 varchar(20));

สร้างตารางที่มีการเปรียบเทียบค่าเริ่มต้นlatin1_general_ci;

alter table check2 collate latin1_general_cs;
show full columns from check2;

แสดงการเรียงคอลัมน์แต่ละคอลัมน์เป็น 'latin1_general_ci'

ถ้าอย่างนั้นผลของคำสั่งเปลี่ยนแปลงตารางคืออะไร?


อาจเป็นไปได้ซ้ำกับการเปลี่ยนการจัดเรียงฐานข้อมูล
Michel Ayres

คุณอาจต้องการแก้ไขคำตอบที่ถูกต้องเนื่องจากตัวฉันเองและคนอื่น ๆ ดูเหมือนจะยอมรับว่าคำตอบที่สองเป็นคำตอบที่ถูกต้อง
Ahi Tuna

คำตอบ:


597

ในการเปลี่ยนชุดอักขระเริ่มต้นและการเรียงของตารางรวมถึงคอลัมน์ที่มีอยู่ (หมายเหตุการแปลงเป็นส่วนคำสั่ง):

alter table <some_table> convert to character set utf8mb4 collate utf8mb4_unicode_ci;

แก้ไขคำตอบขอบคุณที่มีการแสดงความคิดเห็น:

ควรหลีกเลี่ยงการแนะนำ utf8 แทบจะไม่เคยมีสิ่งที่คุณต้องการและมักจะนำไปสู่ความยุ่งเหยิงที่ไม่คาดคิด ชุดอักขระ utf8 เข้ากันไม่ได้กับ UTF-8 อย่างสมบูรณ์ ชุดอักขระ utf8mb4 เป็นสิ่งที่คุณต้องการหากคุณต้องการ UTF-8 - รวย Remer 28 มีนาคม 18 ที่ 23:41

และ

ดูเหมือนจะสำคัญมากดีใจที่ได้อ่านความคิดเห็นและขอบคุณ @RichRemer Nikki ฉันคิดว่าคุณควรแก้ไขในคำตอบของคุณพิจารณาว่ามีจำนวนการดูกี่ครั้ง ดูที่นี่https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.htmlและที่นี่ความแตกต่างระหว่าง utf8mb4 และ utf8 charsets ใน MySQL คืออะไร? - Paulpro 12 มี.ค. เวลา 17:46 น


4
ความหมายของการเปลี่ยนชุดอักขระเริ่มต้นคืออะไร มันอัปเดตข้อมูลที่มีอยู่แล้วดังนั้นจึงจำเป็นต้องเรียกใช้ผ่านตารางและทำการอัปเดตล็อคมัน ฯลฯ ?
อนุญาต

utf8_binดีกว่าใช่ไหม ความแตกต่างระหว่างutf8_binและutf8_unicode_ciคืออะไร
Jasom Dotnet

1
นั่นเป็นเพียงตัวอย่างที่ฉันใช้ ความแตกต่างคือตรงตามตัวutf8_binพิมพ์เล็กและutf8_unicode_ciใหญ่ - เล็กและเล็ก หนึ่งไม่จำเป็นต้องดีกว่าอื่น - ใช้สิ่งที่เหมาะสมกับความต้องการของคุณ
Nikki Erwin Ramirez

12
@JasomDotnet ตอนนี้คุณควรใช้ utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx

2
utf8ควรหลีกเลี่ยงการแนะนำ แทบจะไม่เคยมีสิ่งที่คุณต้องการและมักจะนำไปสู่ความยุ่งเหยิงที่ไม่คาดคิด utf8ชุดตัวอักษรไม่ได้เข้ากันได้กับ UTF-8 utf8mb4ชุดอักขระคือสิ่งที่คุณต้องการหากคุณต้องการ UTF-8
รวย Remer

34

MySQL มีการเรียง 4 ระดับ: เซิร์ฟเวอร์, ฐานข้อมูล, ตาราง, คอลัมน์ หากคุณเปลี่ยนการเรียงหน้าของเซิร์ฟเวอร์ฐานข้อมูลหรือตารางคุณจะไม่เปลี่ยนการตั้งค่าสำหรับแต่ละคอลัมน์ แต่คุณเปลี่ยนการเรียงหน้าเริ่มต้น

เช่นถ้าคุณเปลี่ยนการเรียงหน้าเริ่มต้นของฐานข้อมูลแต่ละตารางใหม่ที่คุณสร้างในฐานข้อมูลนั้นจะใช้การเปรียบเทียบนั้นและถ้าคุณเปลี่ยนการเรียงหน้าเริ่มต้นของตารางแต่ละคอลัมน์ที่คุณสร้างในตารางนั้นจะได้รับการจัดเรียงนั้น


8
ในความเป็นจริง MySQL มีการเปรียบเทียบห้าระดับมีการตั้งค่าเริ่มต้นระดับการเรียงชุดอักขระที่หลายคนลืม
Devy

6
นอกจากนี้ยังมีการเชื่อมต่อการเปรียบเทียบshow variables like "collation%";เพื่อให้รวมเป็นหก
Dzmitry Lazerka

9

มันตั้งค่าการเปรียบเทียบเริ่มต้นสำหรับตาราง; ถ้าคุณสร้างคอลัมน์ใหม่ที่ควรจะเรียงด้วย latin_general_ci - ฉันคิดว่า ลองระบุการเรียงหน้าสำหรับแต่ละคอลัมน์แล้วดูว่าใช้ได้ไหม MySQL มีพฤติกรรมที่แปลกประหลาดจริงๆเกี่ยวกับวิธีการจัดการสิ่งนี้


3

อาจต้องเปลี่ยนตาราง SCHEMA ไม่เพียง แต่

ALTER SCHEMA `<database name>`  DEFAULT CHARACTER SET utf8mb4  DEFAULT COLLATE utf8mb4_unicode_ci (as Rich said - utf8mb4);

(mariaDB 10)


<database name>แทน<table name>
dnivog

1
ดูความคิดเห็นของฉันเกี่ยวกับคำตอบที่ได้รับการยอมรับว่าทำไมคุณไม่ควรแนะนำให้แต่utf8 utf8mb4
รวย Remer
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.