Bagaimana cara mengubah susunan tabel secara default?

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

membuat tabel dengan susunan default latin1_general_ci;

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

memperlihatkan susunan individual kolom sebagai 'latin1_general_ci'.

Lalu apa efek dari perintah tabel alter?

simplfuzz
sumber
duplikat kemungkinan perubahan susunan basis data
Michel Ayres
Anda mungkin ingin mengubah jawaban yang benar karena saya dan banyak orang lain sepertinya setuju bahwa jawaban kedua adalah jawaban yang benar.
Ahi Tuna

Jawaban:

597

Untuk mengubah set karakter default dan susunan tabel termasuk kolom yang ada (perhatikan convert to clause):

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

Diedit jawabannya, berkat dorongan beberapa komentar:

Harus menghindari merekomendasikan utf8. Ini hampir tidak pernah seperti yang Anda inginkan, dan sering mengarah pada kekacauan yang tidak terduga. Set karakter utf8 tidak sepenuhnya kompatibel dengan UTF-8. Set karakter utf8mb4 adalah apa yang Anda inginkan jika Anda ingin UTF-8. - Rich Remer 28 Mar 18 'jam 23:41

dan

Itu sepertinya cukup penting, senang saya membaca komentar dan terima kasih @RichRemer. Nikki, saya pikir Anda harus mengeditnya dalam jawaban Anda mengingat berapa banyak tampilan yang didapat. Lihat di sini https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8.html dan di sini Apa perbedaan antara utf8mb4 dan rangkaian karakter utf8 di MySQL? - Paulpro 12 Mar pukul 17:46

Nikki Erwin Ramirez
sumber
4
Apa implikasi dari mengubah set karakter default? Apakah itu memperbarui data yang ada dan karena itu perlu dijalankan melalui tabel dan membuat pembaruan, menguncinya, dll?
berikan
utf8_binlebih baik, bukan? Apa perbedaan antara utf8_bindan utf8_unicode_ci?
Jasom Dotnet
1
Itu hanya contoh yang saya gunakan. Perbedaannya adalah yang utf8_bincase-sensitive dan utf8_unicode_cicase-insensitive. Satu belum tentu lebih baik dari yang lain - gunakan apa pun yang sesuai dengan kebutuhan Anda.
Nikki Erwin Ramirez
12
@JasomDotnet Anda sekarang harus menggunakan utf8mb4_unicode_ci stackoverflow.com/questions/766809/…
baptx
2
Sebaiknya hindari merekomendasikan utf8. Ini hampir tidak pernah seperti yang Anda inginkan, dan sering mengarah pada kekacauan yang tidak terduga. Set utf8karakter tidak sepenuhnya kompatibel dengan UTF-8. Set utf8mb4karakter adalah apa yang Anda inginkan jika Anda ingin UTF-8.
Rich Remer
34

MySQL memiliki 4 level pemeriksaan: server, database, tabel, kolom. Jika Anda mengubah susunan server, database atau tabel, Anda tidak mengubah pengaturan untuk setiap kolom, tetapi Anda mengubah susunan default.

Misalnya, jika Anda mengubah susunan default suatu basis data, setiap tabel baru yang Anda buat di dalam basis data itu akan menggunakan susunan itu, dan jika Anda mengubah susunan default suatu tabel, setiap kolom yang Anda buat di dalam tabel itu akan mendapatkan susunan itu.

fredrik
sumber
8
Bahkan, MySQL memiliki LIMA Level pemeriksaan, ada pengaturan karakter set tingkat pemeriksaan standar yang banyak orang lupakan.
Devy
6
Ada juga koneksi collation show variables like "collation%";, jadi totalnya adalah ENAM .
Dzmitry Lazerka
9

Ini mengatur susunan default untuk tabel; jika Anda membuat kolom baru, itu harus disusun dengan latin_general_ci - saya pikir. Coba tentukan susunan untuk kolom individual dan lihat apakah itu berhasil. MySQL memiliki beberapa perilaku yang sangat aneh dalam hal cara menangani ini.

Don Werve
sumber
3

mungkin perlu mengubah skema SCHEMA tidak hanya

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

(mariaDB 10)

AssyK
sumber
<database name>bukannya<table name>
dnivog
1
Lihat komentar saya pada jawaban yang diterima mengapa Anda tidak merekomendasikan utf8, tetapi utf8mb4.
Rich Remer