Iz korena razumite MySQL — potpuno savladaj MySQL skupove znakova i pravila upoređivanja
Kada kreiramo bazu ili tabelu, potrebno je navesti skup znakova i pravilo upoređivanja.
Neki će reći: „Pa ja prilikom kreiranja ništa nisam naveo." To je zato što je MySQL to već podrazumevao za vas.
Na primer, sledećim SQL naredbama možete proveriti podrazumevani skup znakova i pravilo upoređivanja baze:
SHOW VARIABLES LIKE 'character_set_database';
SHOW VARIABLES LIKE 'collation_database';
Tu je utf8mb4 podrazumevani skup znakova mog lokalnog MySQL-a, a utf8mb4_0900_ai_ci podrazumevano pravilo upoređivanja mog lokalnog MySQL-a. Šta tačno znače, objasnićemo detaljno nešto kasnije.
Različiti skupovi znakova podržavaju različite jezike i simbole; izbor ispravnog skupa znakova osigurava da baza može tačno da skladišti i prikazuje znakove raznih jezika, naročito pri obradi internacionalizovanih aplikacija.
U ranijim verzijama MySQL podrazumevani skup znakova još nije bio utf8mb4, pa je pri skladištenju emoji znakova bila potrebna posebna obrada.
Upravo sam proverio — 2017. godine objavio sam na CSDN-u članak o tome kako u MySQL-u skladištiti emoji znakove, jer se u WeChat nadimcima korisnika javljaju emoji znakovi. Tada je taj članak pomogao dosta novajlijama sa MySQL-om.
Link na članak: mysql — WeChat nadimak korisnika sa emoji znacima, potpuno sačuvan
Pravilo upoređivanja određuje kako baza upoređuje i sortira string podatke. To obuhvata:
- da li razlikuje velika i mala slova (case-sensitive)?
- da li razlikuje dijakritičke znake (accent-sensitive)?
Nedosledna pravila upoređivanja mogu dovesti do neočekivanih rezultata upita — na primer, baza skladišti podatke ne razlikujući velika i mala slova, dok upit zahteva razlikovanje, pa nastaju problemi.
Dakle, hajde da detaljno proćaskamo o skupovima znakova i pravilima upoređivanja.
Skupovi znakova
U svetu računara, oni prepoznaju samo 0 i 1. A mi se, ljudi, u svakodnevnom životu najčešće srećemo sa kineskim znacima, engleskim, brojevima, simbolima i sl.
Kako računar sve to uskladišti?
Potrebno je da definišemo neka pravila — na primer, da li se ime „Wang Er" u računaru skladišti kao 000010001 ili kao 000010010?
Upravo to definiše skup znakova.
ASCII
Prvi skup znakova koji se pojavio bio je ASCII, sa ukupno 128 znakova, uključujući razmak, znakove interpunkcije, brojeve, velika i mala slova i sl.
Na primer, ASCII kod razmaka je 32 (decimalno), odnosno binarno 00100000; ASCII kod velikog slova A je 65 (decimalno), odnosno binarno 01000001.
Možete to proveriti sledećim programom:
.....
