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?
Jawaban:
Untuk mengubah set karakter default dan susunan tabel termasuk kolom yang ada (perhatikan convert to clause):
Diedit jawabannya, berkat dorongan beberapa komentar:
dan
sumber
utf8_bin
lebih baik, bukan? Apa perbedaan antarautf8_bin
danutf8_unicode_ci
?utf8_bin
case-sensitive danutf8_unicode_ci
case-insensitive. Satu belum tentu lebih baik dari yang lain - gunakan apa pun yang sesuai dengan kebutuhan Anda.utf8
. Ini hampir tidak pernah seperti yang Anda inginkan, dan sering mengarah pada kekacauan yang tidak terduga. Setutf8
karakter tidak sepenuhnya kompatibel dengan UTF-8. Setutf8mb4
karakter adalah apa yang Anda inginkan jika Anda ingin UTF-8.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.
sumber
show variables like "collation%";
, jadi totalnya adalah ENAM .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.
sumber
mungkin perlu mengubah skema SCHEMA tidak hanya
(mariaDB 10)
sumber
<database name>
bukannya<table name>
utf8
, tetapiutf8mb4
.