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

Не разбирам Collation? (Mysql, RDBMS, набори от символи)

Основната цел на съпоставянето на база данни е да се определи как данните се сортират и сравняват.

Чувствителност на малки и главни букви при сравнения на низове

SELECT "New York" = "NEW YORK";` 

ще върне true за съпоставяне без значение на главни и малки букви; false за регистри и малки букви.

Кое съпоставяне прави, което може да се каже от _ci и _cs суфикс в името на съпоставянето. _bin съпоставянията правят двоични сравнения (низовете трябва да са 100% идентични).

Сравнение на умлаути/знаци с акцент

съпоставянето също така определя дали символите с ударение се третират като техни латински основни аналоги при сравнения на низове.

SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

ще върне true в първия случай; невярно в последното. Ще трябва да прочетете описанието на всяко съпоставяне, за да разберете кое е кое.

Сортиране на низове

Съпоставянето влияе върху начина, по който се сортират низовете.

Например

  • Umlauts Ä Ö Ü са в края на азбуката на финландската/шведската азбука latin1_swedish_ci

  • те се третират като A O U в немско сортиране по DIN-1 (latin_german1_ci )

  • и като AE OE UE в немско сортиране по DIN-2 (latin_german2_ci ). ("телефонен указател" сортиране)

  • На latin1_spanish_ci , "ñ" (n-tilde) е отделна буква между "n" и "o".

Тези правила ще доведат до различен ред на сортиране, когато се използват нелатински знаци.

Използване на съпоставяне по време на изпълнение

Трябва да изберете съпоставяне за вашата таблица и колони, но ако нямате нищо против удара на производителността, можете да принудите операциите на базата данни в определено съпоставяне по време на изпълнение, като използвате COLLATE ключова дума.

Това ще сортира table от name колона, използвайки немски правила за сортиране по DIN-2:

SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

Използване на COLLATE по време на изпълнение ще има последици за производителността, тъй като всяка колона трябва да бъде преобразувана по време на заявката. Така че помислете два пъти, преди да приложите това, направете големи набори от данни.

Справка за MySQL:

  • Набори от символи и съпоставяния, които MySQL поддържа
  • Примери за ефекта от съпоставянето
  • Проблеми със съпоставянето


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-12560:TNS:грешка в адаптера на протокола

  2. Вмъкнете ефективно голямо количество данни с SQL

  3. NLS_CHARSET_ID() Функция в Oracle

  4. Oracle WITH и MATERIALIZE hint действа като автономна транзакция за функции

  5. Групиране на записи час по час или ден след ден и запълване на празнини с нула или нула