Mysql
 sql >> база данни >  >> RDS >> Mysql

Какви са разликите между utf8_general_ci и utf8_unicode_ci?

utf8_general_ci е много проста — и на Unicode, много счупена — сортировка, която дава неправилни резултати върху общ текст на Unicode. Това, което прави е:

  • преобразува във форма за нормализиране на Unicode D за канонична декомпозиция
  • премахва всички комбинирани знаци
  • преобразува в главни букви

Това не работи правилно на Unicode, тъй като не разбира главните букви на Unicode. Самият корпус на Unicode е много по-сложен, отколкото може да се справи с ASCII подход. Например:

  • Маличните букви на „ẞ“ са „ß“, но главните на „ß“ са „SS“.
  • Има две гръцки сигми с малки букви, но само една с главни букви; помислете за „Σίσυφος“.
  • Буквите като „ø“ не се разлагат до „o“ плюс диакритика, което означава, че няма да сортира правилно.

Има много други тънкости.

  1. utf8_unicode_ci използва стандартния алгоритъм за сравняване на Unicode , поддържа така наречените разширения и лигатури, например:немската буква ß (U+00DF LETTER SHARP S) е сортирана близо до "ss" Буквата Œ (U+0152 LATIN CAPITAL LIGATURE OE) е сортирана близо до "OE".

utf8_general_ci не поддържа разширения/лигатури, сортира всички тези букви като единични знаци и понякога в грешен ред.

  1. utf8_unicode_ci е по принцип по-точен за всички скриптове. Например на блок на кирилица:utf8_unicode_ci е добре за всички тези езици:руски, български, беларуски, македонски, сръбски и украински. Докато utf8_general_ci е подходящ само за руски и български подмножество от кирилица. Допълнителните букви, използвани в беларуски, македонски, сръбски и украински, не са подредени добре.

Цената на utf8_unicode_ci е, че е малко бит по-бавен от utf8_general_ci . Но това е цената, която плащате за коректност. Или можете да имате бърз отговор, който е грешен, или много малко по-бавен отговор, който е правилен. Вашият избор. Много е трудно някога да оправдаете даването на грешни отговори, така че е най-добре да приемете, че utf8_general_ci не съществува и винаги да използва utf8_unicode_ci . Е, освен ако не искате грешни отговори.

Източник:http://forums.mysql.com/read .php?103,187048,188748#msg-188748



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Изявление за избор на MySQL с CASE или IF ELSEIF? Не сте сигурни как да получите резултата

  2. Алтернативи на MySQL Workbench - ClusterControl Configuration Management

  3. Как да получите данни за последния 1 час в MySQL

  4. Съхранявайте процедурите в phpMyAdmin

  5. Как да получите краткото име на месеца от дата в MySQL