Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zrozumienie zestawów znaków i sortowania w MySQL

Jeśli kiedykolwiek pracowałeś z MySQL, nieuchronnie natrafiłeś na zestawy znaków i zestawienia. W tym poście na blogu postaramy się dokładniej przyjrzeć się tym dwóm i sposobom ich używania.

Czym są zestawy znaków i zestawienia?

Po prostu zestawy znaków w MySQL to zestawy symboli i kodowań - sortowanie to zestawy reguł do porównywania znaków w zestawie znaków. Innymi słowy, zestawy znaków to zestawy znaków, które są dozwolone w ciągu, podczas gdy sortowanie to zestaw reguł używanych do porównywania znaków w określonym zestawie znaków. Tak jak każdy zestaw znaków ma domyślne sortowanie, zestawy znaków mogą również mieć kilka sortowań. MySQL ma domyślny zestaw znaków i sortowanie dla serwera, a także dla każdej bazy danych i tabeli.

Zestawy znaków w MySQL

Na ogół zestawy znaków w MySQL działają tak:

  • Kiedy baza danych jest tworzona, zestawy znaków są wyprowadzane ze zmiennej character_set_server obejmującej cały serwer.
  • Gdy tworzona jest tabela, zestawy znaków pochodzą z bazy danych.
  • Gdy tworzona jest kolumna, zestawy znaków pochodzą z tabeli.

Jeśli chodzi o zestawy znaków, należy zwrócić uwagę na kilka zmiennych:

  • Character_set_client definiuje zestaw znaków, w którym oświadczenia są wysyłane przez klienta.
  • Character_set_connection definiuje zestaw znaków, na który instrukcje są tłumaczone po otrzymaniu przez serwer instrukcji od klienta.
  • Character_set_results definiuje zestaw znaków, w którym serwer zwraca wyniki zapytania do klienta.

Te trzy ustawienia można zmienić za pomocą instrukcji SET NAMES lub SET CHARACTER SET, a nawet w plikach konfiguracyjnych MySQL.

Podczas pracy z zestawami znaków czasami możesz również napotkać błąd #1267:

ERROR 1267 (HY000): Illegal mix of collations.

Powyższy błąd jest zwykle spowodowany porównaniem dwóch ciągów, które mają niezgodne sortowanie lub próbą wybrania danych, które mają inne sortowanie w połączonej kolumnie. Błąd jest wyświetlany, ponieważ gdy MySQL porównuje dwie wartości z różnymi zestawami znaków, musi je przekonwertować na ten sam zestaw znaków do porównania, ale zestawy znaków nie są kompatybilne. Aby rozwiązać ten problem, upewnij się, że sortowanie każdej tabeli i ich kolumn są takie same.

Układania w MySQL

Jak już wspomniano powyżej, sortowanie jest ściśle związane z zestawami znaków, ponieważ sortowanie to zestaw reguł definiujących sposób porównywania i sortowania ciągów znaków. Każdy zestaw znaków ma co najmniej jedno zestawienie, niektóre mają również więcej.

Chociaż w tym poście na blogu nie będziemy wchodzić w szczegóły dotyczące sortowania w MySQL, jest kilka rzeczy, o których warto wiedzieć:

  • Jeśli używasz MySQL 5.7, domyślnym sortowaniem MySQL jest zazwyczaj latin1_swedish_ci, ponieważ MySQL używa latin1 jako domyślnego zestawu znaków. Jeśli używasz MySQL 8.0, domyślnym kodowaniem jest utf8mb4.
  • Jeśli zdecydujesz się używać UTF-8 jako sortowania, zawsze używaj utf8mb4 (w szczególności utf8mb4_unicode_ci). Nie powinieneś używać UTF-8, ponieważ UTF-8 w MySQL różni się od właściwego kodowania UTF-8. Dzieje się tak, ponieważ nie oferuje pełnej obsługi Unicode, co może prowadzić do utraty danych lub problemów z bezpieczeństwem. Należy pamiętać, że utf8mb4_general_ci to uproszczony zestaw reguł sortowania, który wykorzystuje skróty zaprojektowane w celu zwiększenia szybkości, podczas gdy utf8mb4_unicode_ci sortuje dokładnie w wielu językach. Ogólnie rzecz biorąc, utf8mb4 jest „najbezpieczniejszym” zestawem znaków, ponieważ obsługuje również 4-bajtowy kod Unicode, podczas gdy utf8 obsługuje tylko do 3.

Wybór dobrego zestawu znaków i sortowania

Aby wybrać dobre sortowanie i zestaw znaków dla swojego zestawu danych MySQL, pamiętaj o prostocie. Mieszanka różnych zestawów znaków i (lub) zestawień może być prawdziwym bałaganem, ponieważ mogą być bardzo mylące (na przykład wszystko może działać dobrze, dopóki nie pojawią się określone znaki itp.), więc najlepiej jest ocenić swoje potrzeby z góry i wybrać najlepsze zestawienie i ustawienie znaków z góry. MySQL ma również kilka cennych zapytań, które mogą Ci w tym pomóc, na przykład

SELECT * FROM information_schema.CHARACTER_SETS ORDER BY CHARACTER_SET_NAME;

zwróci listę zestawów znaków i dostępnych sortowań wraz z ich opisem, co może być niezwykle przydatne, jeśli planujesz projekt bazy danych.

Pamiętaj, że niektóre zestawy znaków mogą wymagać więcej operacji procesora, a także mogą zajmować więcej miejsca w pamięci. Używanie niewłaściwych zestawów znaków może nawet uniemożliwić indeksowanie - na przykład MySQL musi konwertować zestawy znaków, aby móc je porównać, gdy nie są takie same:konwersja może uniemożliwić użycie indeksu.

Pamiętaj też, że niektórzy zalecają „po prostu używać UTF-8 globalnie” – może to niekoniecznie być świetny pomysł, ponieważ wiele aplikacji w ogóle nie potrzebuje UTF-8 i, w zależności od na Twoich danych, UTF-8 może powodować więcej problemów, niż jest to warte (na przykład może zużywać znacznie więcej miejsca na dysku), więc wybieraj mądrze.

Podsumowanie

Zestawy i zestawienia postaci mogą być Twoimi przyjaciółmi lub koszmarem - wszystko zależy od tego, jak ich użyjesz. Ogólnie rzecz biorąc, należy pamiętać, że „dobry” zestaw znaków i sortowanie zależą od danych przechowywanych w bazie danych — MySQL dostarcza kilka zapytań, które pomogą Ci zdecydować, czego użyć, ale aby Twoje zestawy znaków i sortowania były efektywne, powinieneś również pomyśleć o tym, kiedy ma sens użycie określonego sortowania i dlaczego.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ograniczenie zapobiegające wstawianiu pustego ciągu w MySQL

  2. Zrozumienie widoków w SQL

  3. Jak nadać każdemu zarejestrowanemu użytkownikowi własny adres URL za pomocą PHP?

  4. MariaDB – MySQL – Pokaż silniki, aby wyświetlić wszystkie dostępne i obsługiwane silniki

  5. Jak sprawdzić, kiedy serwer MySQL/MariaDB został uruchomiony?