create table check2(f1 varchar(20),f2 varchar(20));
tworzy tabelę z domyślnym zestawieniem latin1_general_ci
;
alter table check2 collate latin1_general_cs;
show full columns from check2;
pokazuje indywidualne zestawienie kolumn jako „latin1_general_ci”.
Jaki jest zatem efekt polecenia alter table?
Odpowiedzi:
Aby zmienić domyślny zestaw znaków i zestawienie tabeli, w tym tabel istniejących kolumn (zwróć uwagę na klauzulę konwersji na klauzulę):
Edytowałem odpowiedź, dzięki podpowiedziom niektórych komentarzy:
i
źródło
utf8_bin
jest lepiej, prawda? Jaka jest różnica międzyutf8_bin
iutf8_unicode_ci
?utf8_bin
rozróżnia się małe iutf8_unicode_ci
wielkie litery. Jedno niekoniecznie jest lepsze od drugiego - używaj tego, co odpowiada Twoim potrzebom.utf8
. Prawie nigdy nie jest to, czego chcesz i często prowadzi do nieoczekiwanych bałaganu. Zestawutf8
znaków nie jest w pełni kompatybilny z UTF-8. Zestawutf8mb4
znaków jest tym, czego chcesz, jeśli chcesz UTF-8.MySQL ma 4 poziomy sortowania: serwer, baza danych, tabela, kolumna. Jeśli zmienisz sortowanie serwera, bazy danych lub tabeli, nie zmienisz ustawienia dla każdej kolumny, ale zmienisz domyślne sortowania.
Np. Jeśli zmienisz domyślne sortowanie bazy danych, każda nowa tabela utworzona w tej bazie danych będzie używać tego sortowania, a jeśli zmienisz domyślne sortowanie tabeli, każda kolumna utworzona w tej tabeli otrzyma to zestawienie.
źródło
show variables like "collation%";
, więc w sumie jest SZEŚĆ .Ustawia domyślne sortowanie dla tabeli; jeśli utworzysz nową kolumnę, powinna ona zostać zestawiona z latin_general_ci - tak myślę. Spróbuj określić sortowanie dla pojedynczej kolumny i sprawdź, czy to zadziała. MySQL zachowuje się naprawdę dziwnie, jeśli chodzi o sposób, w jaki sobie z tym radzi.
źródło
być może konieczna będzie zmiana tabeli SCHEMA nie tylko
(mariaDB 10)
źródło
<database name>
zamiast<table name>
utf8
, aleutf8mb4
.