utf8 ΡΡΠ΅ΡΡ utf8mb4 Π² MySQL: ΠΡΠ»Π½ΠΎΡΠΎ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ
MySQL's utf8 Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π΅ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π½Π°ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠΎΠΉ Π½Π΅ Π΅ ΠΈΡΡΠΈΠ½ΡΠΊΠ° UTF-8 ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ. Π’ΠΎΠΉ ΠΊΠΎΠ΄ΠΈΡΠ° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ ΡΠ°ΠΌΠΎ 1 Π΄ΠΎ 3 Π±Π°ΠΉΡΠ°, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ ΠΈΠ·ΠΏΡΡΠΊΠ° ΠΈΠ»ΠΈ ΠΎΡΡ Π²ΡΡΠ»Ρ Π²ΡΡΠΊΠ° Unicode ΠΊΠΎΠ΄ΠΎΠ²Π° ΡΠΎΡΠΊΠ° Π½Π°Π΄ U+FFFF, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ Π²ΡΠΈΡΠΊΠΈ Π΅ΠΌΠΎΠ΄ΠΆΠΈ ΠΈ Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° ΡΠ°ΡΡ ΠΎΡ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ CJK ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. utf8mb4 Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ°, ΠΏΡΠ»Π½Π° UTF-8 ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ Π½Π° MySQL, ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°ΡΠ° 1 Π΄ΠΎ 4 Π±Π°ΠΉΡΠ° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ ΠΏΡΠ»Π½ΠΈΡ Unicode Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½. ΠΠ° Π²ΡΡΠΊΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½Π° ΡΠ»Π΅Π΄ 2010 Π³., utf8mb4 Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΡΠ°Π·ΡΠΌΠ΅Π½ ΠΈΠ·Π±ΠΎΡ.
Π’ΠΎΠ²Π° ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²ΠΎ ΠΎΠ±ΡΡΠ½ΡΠ²Π° ΡΠΎΡΠ½ΠΎ Π·Π°ΡΠΎ ΡΠΎΠ²Π° ΡΠ°Π·Π³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ Π΅ Π²Π°ΠΆΠ½ΠΎ, ΠΊΡΠ΄Π΅ ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π½ΠΈΡΡ Π΄ΠΈΠ·Π°ΠΉΠ½ Π½Π° utf8 Π΅ ΡΠ³ΡΠ΅ΡΠΈΠ», ΠΊΠ°ΠΊ Π΄Π° ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎ ΠΈ ΠΊΠ°ΠΊ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ MySQL ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ, Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΠ°Π±Π»ΠΈΡΠ° ΠΈ Π²ΡΡΠ·ΠΊΠ°.
ΠΡΠ½ΠΎΠ²Π½ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ: ΠΠ°ΡΠΎ MySQL's utf8 Π΅ ΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π΄ΠΈΠ·Π°ΠΉΠ½
Π‘ΡΠ°Π½Π΄Π°ΡΡΡΡ Π·Π° ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ UTF-8 (RFC 3629) Π΄Π΅ΡΠΈΠ½ΠΈΡΠ° ΡΡ Π΅ΠΌΠ° Ρ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΡΠΈΡΠΈΠ½Π°, ΠΊΠΎΡΡΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° 1 Π΄ΠΎ 4 Π±Π°ΠΉΡΠ° Π·Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Π²ΡΡΠΊΠ° Π²Π°Π»ΠΈΠ΄Π½Π° Unicode ΠΊΠΎΠ΄ΠΎΠ²Π° ΡΠΎΡΠΊΠ° β Π½Π°Π΄ 1,1 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π°. ΠΠΎΠ³Π°ΡΠΎ MySQL Π²ΡΠ²Π΅Π΄Π΅ ΡΠ²ΠΎΡ `utf8` Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π²ΡΠ² Π²Π΅ΡΡΠΈΡ 4.1, ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡΠ° Π±Π΅ΡΠ΅ ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° Π΄ΠΎ 3 Π±Π°ΠΉΡΠ° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ». Π’ΠΎΠ²Π° Π±Π΅ΡΠ΅ ΠΏΡΠ΅Π΄Π½Π°ΠΌΠ΅ΡΠ΅Π½ ΠΈΠ½ΠΆΠ΅Π½Π΅ΡΠ΅Π½ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡ, Π° Π½Π΅ ΠΏΡΠΎΠΏΡΡΠΊ.
ΠΠΎ ΠΎΠ½ΠΎΠ²Π° Π²ΡΠ΅ΠΌΠ΅ ΡΠΎΡΠΌΠ°ΡΡΡ Π½Π° ΡΠ΅Π΄ΠΎΠ²Π΅ΡΠ΅ Π² InnoDB Π½Π°Π»Π°Π³Π°ΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ ΠΎΡ 767 Π±Π°ΠΉΡΠ° Π·Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΠΊΠ»ΡΡΠΎΠ²Π΅. ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ°ΡΠ° Π½Π° 4-Π±Π°ΠΉΡΠΎΠ²ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΡΠ΅ΡΠ΅ Π΄Π° Π½Π°ΠΌΠ°Π»ΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π°ΡΠ° Π΄ΡΠ»ΠΆΠΈΠ½Π° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡ Π·Π° `VARCHAR` ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΡΡΠ·Π΄Π°Π²Π°ΠΉΠΊΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠ½Π°ΡΠ° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ. ΠΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ 3 Π±Π°ΠΉΡΠ° Π±Π΅ΡΠ΅ ΠΏΡΠ°Π³ΠΌΠ°ΡΠΈΡΠ½ΠΎ Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠ½Π΅, ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ ΠΏΡΠ΅Π²ΡΡΠ½Π° Π² Π΄ΡΠ»Π³ΠΎΡΡΠΎΡΠ΅Π½ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
ΠΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠ°ΡΠ° ΠΏΠΎΡΠ»Π΅Π΄ΠΈΡΠ°: Π²ΡΡΠΊΠ° Unicode ΠΊΠΎΠ΄ΠΎΠ²Π° ΡΠΎΡΠΊΠ° Π² ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΠΌΠ½ΠΎΠ³ΠΎΠ΅Π·ΠΈΡΠ½Π° ΡΠ°Π²Π½ΠΈΠ½Π° (SMP) β ΠΊΠΎΠ΄ΠΎΠ²ΠΈ ΡΠΎΡΠΊΠΈ U+10000 ΠΈ ΠΏΠΎ-Π³ΠΎΡΠ΅ β Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΡΡΡ ΡΠ°Π½Π΅Π½Π° Π² `utf8` ΠΊΠΎΠ»ΠΎΠ½Π°. Π’ΠΎΠ²Π° Π²ΠΊΠ»ΡΡΠ²Π°:
- ΠΡΠΈΡΠΊΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈ Π΅ΠΌΠΎΠ΄ΠΆΠΈ (U+1F600 ΠΈ ΠΏΠΎ-Π½Π°ΡΠ°ΡΡΠΊ)
- ΠΠ°ΡΠ΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ Π±ΡΠΊΠ²Π΅Π½ΠΎ-ΡΠΈΡΡΠΎΠ²ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ (U+1D400βU+1D7FF)
- Π‘ΠΈΠΌΠ²ΠΎΠ»ΠΈ Π·Π° ΠΌΡΠ·ΠΈΠΊΠ°Π»Π½Π° Π½ΠΎΡΠ°ΡΠΈΡ
- ΠΡΡΠΎΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΈΡΠΌΠ΅Π½ΠΎΡΡΠΈ ΠΊΠ°ΡΠΎ Linear B, Π³ΠΎΡΠΈΡΠ΅ΡΠΊΠ° ΠΈ ΠΊΠ»ΠΈΠ½ΠΎΠΏΠΈΡ
- ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ CJK ΡΠ½ΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ ΠΈΠ΄Π΅ΠΎΠ³ΡΠ°ΡΠΈ (U+20000βU+2A6DF)
- ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π½Π° Π²Π°Π»ΡΡΠΈ ΠΈ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠΈ, Π΄ΠΎΠ±Π°Π²Π΅Π½ΠΈ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Π½Π° Unicode
ΠΠΎΠ³Π°ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠ΅ ΠΎΠΏΠΈΡΠ° Π΄Π° Π²ΠΌΡΠΊΠ½Π΅ 4-Π±Π°ΠΉΡΠΎΠ² ΡΠΈΠΌΠ²ΠΎΠ» Π² `utf8` ΠΊΠΎΠ»ΠΎΠ½Π°, MySQL ΠΈΠ»ΠΈ Π²ΡΡΡΠ° Π³ΡΠ΅ΡΠΊΠ° `Incorrect string value`, ΠΈΠ»ΠΈ, Π°ΠΊΠΎ `sql_mode` Π΅ ΡΠ°Π·ΡΠ΅ΡΠΈΡΠ΅Π»Π΅Π½, ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ ΡΡΠΊΡΠ°ΡΠ°Π²Π° Π΄Π°Π½Π½ΠΈΡΠ΅. ΠΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎΡΠΎ ΡΡΠΊΡΠ°ΡΠ°Π²Π°Π½Π΅ Π΅ ΠΌΠΎΠΆΠ΅ Π±ΠΈ ΠΏΠΎ-ΠΎΠΏΠ°ΡΠ½ΠΈΡΡ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ β Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π³ΡΠ΅ΡΠΊΠ°, Π½ΠΎ Π΄Π°Π½Π½ΠΈΡΠ΅ Π²ΠΈ ΡΠ° ΠΏΠΎΠ²ΡΠ΅Π΄Π΅Π½ΠΈ.
utf8mb4: ΠΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
MySQL Π²ΡΠ²Π΅Π΄Π΅ utf8mb4 Π²ΡΠ² Π²Π΅ΡΡΠΈΡ 5.5.3 (ΠΈΠ·Π΄Π°Π΄Π΅Π½Π° 2010 Π³.) ΡΠΏΠ΅ΡΠΈΠ°Π»Π½ΠΎ Π·Π° Π΄Π° ΠΎΡΡΡΡΠ°Π½ΠΈ ΡΠΎΠ·ΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΡΠΊ. Π‘ΡΡΠΈΠΊΡΡΡ `mb4` ΠΎΠ·Π½Π°ΡΠ°Π²Π° βΠΌΠ½ΠΎΠ³ΠΎΠ±Π°ΠΉΡΠΎΠ², ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 4 Π±Π°ΠΉΡΠ°.β Π’ΠΎΠΉ Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π° `utf8` β Π²ΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ», ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π² `utf8`, Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π² `utf8mb4`. ΠΡΠΌΠ° Π·Π°Π³ΡΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ ΠΏΡΠΈ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½Π΅ ΠΎΡ `utf8` ΠΊΡΠΌ `utf8mb4`.
utf8mb4 ΡΠ΅ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²Π° Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° RFC 3629 UTF-8. Π’ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΡΠ»Π½ΠΎΡΠΎ Unicode ΠΊΠΎΠ΄ΠΎΠ²ΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ ΠΎΡ U+0000 Π΄ΠΎ U+10FFFF Π±Π΅Π· ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ.
utf8 ΡΡΠ΅ΡΡ utf8mb4: Π‘ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈΡΠ΅
| Π€ΡΠ½ΠΊΡΠΈΡ | utf8 (MySQL) | utf8mb4 |
|---|---|---|
| ΠΠ°ΠΉΡΠΎΠ²Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ» | 1β3 | 1β4 |
| Unicode ΠΏΠΎΠΊΡΠΈΡΠΈΠ΅ | Π‘Π°ΠΌΠΎ BMP (U+0000βU+FFFF) | ΠΡΠ»Π½ΠΎ (U+0000βU+10FFFF) |
| ΠΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π½Π° Π΅ΠΌΠΎΠ΄ΠΆΠΈ | ΠΠ΅ | ΠΠ° |
| ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ CJK | ΠΠ΅ | ΠΠ° |
| Π‘ΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Ρ RFC 3629 | ΠΠ΅ | ΠΠ° |
| ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡΠ΅Π½ ΠΏΡΠ΅ΡΠΈΠΊΡ (InnoDB, 4KB ΡΡΡΠ°Π½ΠΈΡΠΈ) | 767 Π±Π°ΠΉΡΠ° | 767 Π±Π°ΠΉΡΠ° (191 ΡΠΈΠΌΠ²ΠΎΠ»Π°) |
| ΠΠ°ΠΊΡΠΈΠΌΠ°Π»Π΅Π½ ΠΈΠ½Π΄Π΅ΠΊΡΠ΅Π½ ΠΏΡΠ΅ΡΠΈΠΊΡ (innodb_large_prefix) | 3072 Π±Π°ΠΉΡΠ° | 3072 Π±Π°ΠΉΡΠ° (768 ΡΠΈΠΌΠ²ΠΎΠ»Π°) |
| ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΡΠΏΡΡΠΌΠΎ latin1 | ΠΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Π·Π° ASCII | ΠΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ Π·Π° ASCII |
| ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ | ΠΠ΅ | ΠΠ° |
| ΠΡΠ²Π΅Π΄Π΅Π½Π° Π² MySQL Π²Π΅ΡΡΠΈΡ | 4.1 | 5.5.3 |
ΠΠ·Π±ΠΎΡ Π½Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π² utf8mb4
ΠΠ·Π±ΠΎΡΡΡ Π½Π° utf8mb4 ΠΊΠ°ΡΠΎ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π΅ ΡΠ°ΠΌΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Π°ΡΠ° ΠΎΡ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΡΠΎ. Π‘ΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Ρ ΠΊΠ°ΠΊ ΡΠ΅ ΡΡΠ°Π²Π½ΡΠ²Π°Ρ, ΡΠΎΡΡΠΈΡΠ°Ρ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Ρ Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅. ΠΡΠ΅ΡΠ½ΠΎΡΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ ΠΏΡΠΈΡΠΈΠ½ΡΠ²Π° ΡΠΈΠ½ΠΎ, ΡΡΡΠ΄Π½ΠΎ Π·Π° ΠΎΡΡΡΡΠ°Π½ΡΠ²Π°Π½Π΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅.
utf8mb4_unicode_ci
ΠΠ°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° Π·Π° Unicode ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ (UCA). ΠΠ±ΡΠ°Π±ΠΎΡΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ Π΅Π·ΠΈΠΊΠΎΠ²ΠΎ-ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠΎΡΡΠΈΡΠ°Π½Π΅. ΠΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ ΠΎΡ `utf8mb4_general_ci` ΠΏΠΎΡΠ°Π΄ΠΈ ΠΏΠΎ-ΡΠ»ΠΎΠΆΠ½Π° Π»ΠΎΠ³ΠΈΠΊΠ° Π·Π° ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅, Π½ΠΎ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° Π² ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½Π° Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ Ρ Π°ΡΠ΄ΡΠ΅Ρ.
utf8mb4_general_ci
ΠΠΏΡΠΎΡΡΠ΅Π½ΠΎ ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π½Π΅ ΠΈΠΌΠΏΠ»Π΅ΠΌΠ΅Π½ΡΠΈΡΠ° Π½Π°ΠΏΡΠ»Π½ΠΎ UCA. ΠΠΎ-Π±ΡΡΠ·ΠΎ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ΡΠ΅ ΠΎΡ Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° 2010-ΡΠ΅, Π½ΠΎ ΠΏΡΠ΅Π΄ΠΈΠΌΡΡΠ²ΠΎΡΠΎ Π² ΡΠΊΠΎΡΠΎΡΡΡΠ° Π΅ Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈΡΠ΅ CPU. ΠΠ±ΡΠ°Π±ΠΎΡΠ²Π° Π½ΡΠΊΠΎΠΈ Π³ΡΠ°Π½ΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ β Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠ΅ΡΠΈΡΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈ Π½Π΅ΠΌΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΊΠ°ΡΠΎ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΈ, ΠΊΠΎΠ³Π°ΡΠΎ Π½Π΅ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ. ΠΠ·Π±ΡΠ³Π²Π°ΠΉΡΠ΅ Π·Π° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
utf8mb4_0900_ai_ci
ΠΠ°Π»ΠΈΡΠ½ΠΎ Π² MySQL 8.0+. ΠΠ°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Unicode 9.0 Ρ Π½Π΅ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΡΠΌ ΡΠ΄Π°ΡΠ΅Π½ΠΈΡ (`ai`) ΠΈ Π½Π΅ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΡΠ° (`ci`) ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ Π·Π° MySQL 8.0 ΠΈ ΠΏΠΎ-Π½ΠΎΠ²ΠΈ Π²Π΅ΡΡΠΈΠΈ. Π’ΠΎ Π΅ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΎΡ `utf8mb4_unicode_ci` ΠΈ ΠΏΠΎ-ΡΠΎΡΠ½ΠΎ.
utf8mb4_bin
ΠΠ²ΠΎΠΈΡΠ½ΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ β ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΡΠ°, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΎ ΠΊΡΠΌ ΡΠ΄Π°ΡΠ΅Π½ΠΈΡΡΠ°, Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ Π·Π° Π»ΠΎΠΊΠ°Π»Π° ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅, ΠΊΠΎΠ³Π°ΡΠΎ ΡΠ΅ Π½ΡΠΆΠ΄Π°Π΅ΡΠ΅ ΠΎΡ ΡΠΎΡΠ½ΠΎ ΡΡΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠ΅ Π½Π° Π±Π°ΠΉΡΠΎΠ²ΠΎ Π½ΠΈΠ²ΠΎ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π·Π° Ρ Π΅ΡΠΎΠ²Π΅ Π½Π° ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡΠΈ, ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈ ΠΊΡΠΌ ΡΠ΅Π³ΠΈΡΡΡΡΠ°.
ΠΡΠ΅ΠΏΠΎΡΡΠΊΠ°: ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `utf8mb4_0900_ai_ci` Π½Π° MySQL 8.0+. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `utf8mb4_unicode_ci` Π½Π° MySQL 5.7 ΠΈ ΠΏΠΎ-ΡΠ°Π½Π½ΠΈ Π²Π΅ΡΡΠΈΠΈ.
ΠΠΎΡΠ»Π΅Π΄ΠΈΡΠΈ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅
Π§Π΅ΡΡΠ° Π·Π°Π³ΡΠΈΠΆΠ΅Π½ΠΎΡΡ ΠΏΡΠΈ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½Π΅ ΠΎΡ utf8 ΠΊΡΠΌ utf8mb4 Π΅ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅. ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ° Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ:
- ASCII ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ (U+0000βU+007F) Π²ΡΠ΅ ΠΎΡΠ΅ Π·Π°Π΅ΠΌΠ°Ρ ΡΠΎΡΠ½ΠΎ 1 Π±Π°ΠΉΡ ΠΈ Π² Π΄Π²Π΅ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡ.
- ΠΠΎΠ²Π΅ΡΠ΅ΡΠΎ Π»Π°ΡΠΈΠ½ΡΠΊΠΈ, Π³ΡΡΡΠΊΠΈ, ΠΊΠΈΡΠΈΠ»ΡΠΊΠΈ, Π°ΡΠ°Π±ΡΠΊΠΈ ΠΈ Π΅Π²ΡΠ΅ΠΉΡΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π·Π°Π΅ΠΌΠ°Ρ 2 Π±Π°ΠΉΡΠ° ΠΈ Π² Π΄Π²Π΅ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡ.
- CJK ΡΠΈΠΌΠ²ΠΎΠ»ΠΈΡΠ΅ Π² BMP Π·Π°Π΅ΠΌΠ°Ρ 3 Π±Π°ΠΉΡΠ° ΠΈ Π² Π΄Π²Π΅ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡ.
- Π‘Π°ΠΌΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ (Π΅ΠΌΠΎΠ΄ΠΆΠΈ, Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ CJK) ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ 4 Π±Π°ΠΉΡΠ° β ΠΈ ΡΠ΅ ΠΏΡΠΎΡΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π² utf8 ΠΏΡΠ΅Π΄ΠΈ.
Π Π΅Π°Π»Π½Π°ΡΠ° Π·Π°Π³ΡΠΈΠΆΠ΅Π½ΠΎΡΡ Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΎΡ 767 Π±Π°ΠΉΡΠ° Π·Π° InnoDB ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡ ΠΏΡΠΈ ΠΏΠΎ-ΡΡΠ°ΡΠΈ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ. Π‘ utf8mb4, ΠΏΡΠΈ Π½Π°ΠΉ-Π»ΠΎΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ ΠΎΡ 4 Π±Π°ΠΉΡΠ° Π½Π° ΡΠΈΠΌΠ²ΠΎΠ», 191-ΡΠΈΠΌΠ²ΠΎΠ»Π΅Π½ `VARCHAR` ΠΈΠ½Π΄Π΅ΠΊΡΠ΅Π½ ΠΏΡΠ΅ΡΠΈΠΊΡ Π΄ΠΎΡΡΠΈΠ³Π° ΡΠ°Π²Π°Π½Π° ΠΎΡ 767 Π±Π°ΠΉΡΠ°. Π‘ `utf8`, ΡΡΡΠΈΡΡ ΡΠ°Π²Π°Π½ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°ΡΠ΅ 255 ΡΠΈΠΌΠ²ΠΎΠ»Π°. ΠΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ `VARCHAR(255)` ΠΊΠΎΠ»ΠΎΠ½ΠΈ Ρ ΠΏΡΠ»Π½ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΡΠ΅ΡΠ½Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈ `Specified key was too long` ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°.
Π Π΅ΡΠ΅Π½ΠΈΡ:
- ΠΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ `innodb_large_prefix = ON` (MySQL 5.6/5.7), Π·Π° Π΄Π° ΠΏΠΎΠ²ΠΈΡΠΈΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠ΅ΡΠΎ Π΄ΠΎ 3072 Π±Π°ΠΉΡΠ°.
- ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `ROW_FORMAT=DYNAMIC` ΠΈΠ»ΠΈ `ROW_FORMAT=COMPRESSED` Π·Π° Π·Π°ΡΠ΅Π³Π½Π°ΡΠΈΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠΈ.
- Π MySQL 8.0, `innodb_large_prefix` Π΅ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°Π½ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΡΡ Π΅ ΠΏΡΠ΅ΠΌΠ°Ρ Π½Π°Ρ.
- Π‘ΡΠΊΡΠ°ΡΠ΅ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡΠ΅ ΠΏΡΠ΅ΡΠΈΠΊΡΠΈ: `INDEX (column(191))` Π²ΠΌΠ΅ΡΡΠΎ `INDEX (column(255))`.
Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΉ-ΡΠ΅ΡΡΠ°ΡΠ° ΡΠΎΡΠΊΠ° Π½Π° Π½Π΅ΡΡΠΏΠ΅Ρ ΠΏΡΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΈ ΡΠ°Π·ΠΈ, ΠΊΠΎΡΡΠΎ Π΅ Π½Π°ΠΉ-ΡΠ»Π°Π±ΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠΈΡΠ°Π½Π° Π² ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡΠ΅ ΡΡΠΊΠΎΠ²ΠΎΠ΄ΡΡΠ²Π°.
ΠΠ°ΠΊ Π΄Π° ΠΌΠΈΠ³ΡΠΈΡΠ°ΡΠ΅ MySQL Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΎΡ utf8 ΠΊΡΠΌ utf8mb4
ΠΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° Π΅ ΠΏΡΠΎΡΡΠ°, Π½ΠΎ ΠΈΠ·ΠΈΡΠΊΠ²Π° ΠΏΡΠ΅ΡΠΈΠ·Π½ΠΎΡΡ. ΠΡΠΎΠΏΡΡΠΊΠ°Π½Π΅ΡΠΎ Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΈ Π΄Π° Π΅ Π½ΠΈΠ²ΠΎ β ΡΡΡΠ²ΡΡ, Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΡΠ°Π±Π»ΠΈΡΠ° ΠΈΠ»ΠΈ Π²ΡΡΠ·ΠΊΠ° β ΠΎΡΡΠ°Π²Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΠΈ ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ Π΄Π° ΡΠ΅ Π²ΡΡΠ½Π΅ ΠΊΡΠΌ ΡΡΠ°ΡΠΎΡΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅.
Π‘ΡΡΠΏΠΊΠ° 1: ΠΡΡ ΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ
ΠΠΈΠΊΠΎΠ³Π° Π½Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΉΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π² ΡΠ°Π±ΠΎΡΠ΅ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π±Π΅Π· Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠ°Π½ Π°ΡΡ ΠΈΠ².
β`bash
mysqldump -u username -p βsingle-transaction βroutines βtriggers
database_name > database_backup_$(date +%F).sql
β`
Π€Π»Π°Π³ΡΡ `βsingle-transaction` ΠΎΡΠΈΠ³ΡΡΡΠ²Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½Π° ΡΠ½ΠΈΠΌΠΊΠ° Π·Π° InnoDB ΡΠ°Π±Π»ΠΈΡΠΈ Π±Π΅Π· Π·Π°ΠΊΠ»ΡΡΠ²Π°Π½Π΅. Π‘ΡΡ ΡΠ°Π½Π΅ΡΠ΅ Π°ΡΡ ΠΈΠ²Π° Π½Π° ΠΌΡΡΡΠΎ, ΠΎΡΠ΄Π΅Π»Π½ΠΎ ΠΎΡ ΡΡΡΠ²ΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ, ΠΏΡΠ΅Π΄ΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈΡΠ΅.
Π‘ΡΡΠΏΠΊΠ° 2: ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° MySQL ΡΡΡΠ²ΡΡΠ°
Π Π΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΉΡΠ΅ `/etc/mysql/my.cnf` ΠΈΠ»ΠΈ `/etc/mysql/mysql.conf.d/mysqld.cnf` Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡ ΠΎΡ Π²Π°ΡΠ°ΡΠ° Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΡ:
β`ini
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
For MySQL 5.6/5.7 only β remove on MySQL 8.0
innodb_large_prefix = ON
innodb_file_format = Barracuda
innodb_file_per_table = ON
β`
Π Π΅ΡΡΠ°ΡΡΠΈΡΠ°ΠΉΡΠ΅ MySQL:
β`bash
sudo systemctl restart mysql
β`
Π‘ΡΡΠΏΠΊΠ° 3: ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ
β`sql
ALTER DATABASE database_name
CHARACTER SET = utf8mb4
COLLATE = utf8mb4_unicode_ci;
β`
Π‘ΡΡΠΏΠΊΠ° 4: ΠΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°ΠΉΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ
ΠΠ΅Π½Π΅ΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈ ΠΈΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ `ALTER TABLE` ΠΈΠ·ΡΠ°Π·ΠΈ Π·Π° Π²ΡΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΠ°. ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΈΠΌ ΡΡΡΠ½ΠΎ ΠΏΡΠΈ Π³ΠΎΠ»Π΅ΠΌΠΈ ΡΡ Π΅ΠΌΠΈ Π΅ ΡΠΊΠ»ΠΎΠ½Π½ΠΎ ΠΊΡΠΌ Π³ΡΠ΅ΡΠΊΠΈ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠ°Π·ΠΈ Π·Π°ΡΠ²ΠΊΠ° Π·Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ½ΠΎ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΡΠ°Π·ΠΈΡΠ΅:
β`sql
SELECT CONCAT(
'ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;'
)
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'database_name'
AND TABLE_TYPE = 'BASE TABLE';
β`
ΠΠ·ΠΏΡΠ»Π½Π΅ΡΠ΅ Π²ΡΠ΅ΠΊΠΈ Π³Π΅Π½Π΅ΡΠΈΡΠ°Π½ ΠΈΠ·ΡΠ°Π·. Π‘ΠΈΠ½ΡΠ°ΠΊΡΠΈΡΡΡ `CONVERT TO CHARACTER SET` ΠΏΡΠΎΠΌΠ΅Π½Ρ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΈ Π²ΡΠΈΡΠΊΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π² Π΅Π΄Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ.
Π‘ΡΡΠΏΠΊΠ° 5: ΠΠΎΠΏΡΠ°Π²Π΅ΡΠ΅ Π³ΡΠ΅ΡΠΊΠΈΡΠ΅ Π² Π΄ΡΠ»ΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°
ΠΠΊΠΎ ΡΡΠ΅ΡΠ½Π΅ΡΠ΅ `Specified key was too long; max key length is 767 bytes`, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ½ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ:
β`sql
β Change full-column index to prefix index
ALTER TABLE table_name DROP INDEX index_name;
ALTER TABLE table_name ADD INDEX index_name (column_name(191));
β`
ΠΠ° WordPress Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ, ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° `option_name` Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° `wp_options` ΠΈ ΠΊΠΎΠ»ΠΎΠ½Π°ΡΠ° `meta_key` Π½Π° `wp_postmeta` ΡΠ° ΡΠ΅ΡΡΠΈ ΠΈΠ·ΡΠΎΡΠ½ΠΈΡΠΈ Π½Π° ΡΠ°Π·ΠΈ Π³ΡΠ΅ΡΠΊΠ°.
Π‘ΡΡΠΏΠΊΠ° 6: ΠΡΠΎΠ²Π΅ΡΠ΅ΡΠ΅ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½Π΅ΡΠΎ
β`sql
β Check server-level variables
SHOW VARIABLES LIKE 'character_set%';
SHOW VARIABLES LIKE 'collation%';
β Check a specific table
SHOW CREATE TABLE table_nameG
β Check all columns in a database
SELECT TABLE_NAME, COLUMN_NAME, CHARACTER_SET_NAME, COLLATION_NAME
FROM information_schema.COLUMNS
WHERE TABLE_SCHEMA = 'database_name'
AND DATA_TYPE IN ('char', 'varchar', 'text', 'tinytext', 'mediumtext', 'longtext');
β`
ΠΡΡΠΊΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ `CHARACTER_SET_NAME` ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠΊΠ°Π·Π²Π° `utf8mb4`.
Π‘ΡΡΠΏΠΊΠ° 7: ΠΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°ΠΉΡΠ΅ Π½ΠΈΠ·ΠΎΠ²Π΅ΡΠ΅ Π·Π° Π²ΡΡΠ·ΠΊΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ
ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΠ²ΡΡΠ° ΠΈ ΡΡ Π΅ΠΌΠ°ΡΠ° Π½Π΅ ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π½ΠΈΡΠΎ, Π°ΠΊΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π²ΠΈ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Ρ Π³ΡΠ΅ΡΠ½ΠΈΡ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. ΠΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° Π½ΠΈΠ²ΠΎ Π²ΡΡΠ·ΠΊΠ° Π·Π°ΠΌΠ΅ΡΡΠ²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π½Π° ΡΡΡΠ²ΡΡΠ°.
PHP (PDO):
β`php
$dsn = 'mysql:host=localhost;dbname=database_name;charset=utf8mb4';
$pdo = new PDO($dsn, $user, $pass, [
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci"
]);
β`
PHP (MySQLi):
β`php
$mysqli = new mysqli('localhost', $user, $pass, $db);
$mysqli->set_charset('utf8mb4');
β`
Python (mysql-connector-python):
β`python
cnx = mysql.connector.connect(
host='localhost', user=user, password=pass,
database=db, charset='utf8mb4', collation='utf8mb4_unicode_ci'
)
β`
Node.js (mysql2):
β`javascript
const pool = mysql2.createPool({
host: 'localhost', user: user, password: pass,
database: db, charset: 'utf8mb4'
});
β`
ΠΠ΅ΡΡΠΏΠ΅Ρ ΡΡ Π΄Π° ΡΠ΅ Π·Π°Π΄Π°Π΄Π΅ Π½Π°Π±ΠΎΡΡΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π΅ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π°ΡΠ° Π½Π°ΠΉ-ΡΠ΅ΡΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅ΠΌΠΎΠ΄ΠΆΠΈ Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°Ρ Π΄Π° Π½Π΅ ΡΠ΅ Π²ΠΌΡΠΊΠ²Π°Ρ ΡΠ»Π΅Π΄ ΠΏΡΠΈΠ²ΠΈΠ΄Π½ΠΎ Π·Π°Π²ΡΡΡΠ΅Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ.
Π‘ΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΡΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° WordPress
WordPress ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° utf8mb4 ΠΊΠ°ΡΠΎ Π½Π°Π±ΠΎΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅ ΠΎΡ Π²Π΅ΡΡΠΈΡ 4.2 (Π°ΠΏΡΠΈΠ» 2015 Π³.). ΠΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠ΅ WordPress ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ Π½Π° ΠΏΠΎ-ΡΡΠ°ΡΠ° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΡΡΠΎ Π½ΠΈΠΊΠΎΠ³Π° Π½Π΅ Π΅ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½Π°, ΡΠ°ΠΉΠ»ΡΡ `wp-config.php` ΠΌΠΎΠΆΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π΄Π° ΡΡΠ΄ΡΡΠΆΠ°:
β`php
define('DB_CHARSET', 'utf8');
β`
ΠΡΠΎΠΌΠ΅Π½Π΅ΡΠ΅ ΡΠΎΠ²Π° Π½Π°:
β`php
define('DB_CHARSET', 'utf8mb4');
define('DB_COLLATE', 'utf8mb4_unicode_ci');
β`
WordPress ΡΡΡΠΎ Π²ΠΊΠ»ΡΡΠ²Π° Π²Π³ΡΠ°Π΄Π΅Π½Π° ΡΡΡΠΈΠ½Π° Π·Π° Π½Π°Π΄Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ (`maybe_convert_table_to_utf8mb4()`), ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π° ΡΠ΄ΡΠΎΡΠΎ. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, ΡΠ°Π·ΠΈ ΡΡΡΠΈΠ½Π° Π½Π΅ Π²ΠΈΠ½Π°Π³ΠΈ ΠΎΠ±Ρ Π²Π°ΡΠ° Π²ΡΡΠΊΠ° ΡΠ°Π±Π»ΠΈΡΠ°, ΠΎΡΠΎΠ±Π΅Π½ΠΎ ΡΠ΅Π·ΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΠΎΡ ΠΏΠ»ΡΠ³ΠΈΠ½ΠΈ. Π ΡΡΠ½ΠΈΡΡ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ Ρ `ALTER TABLE`, ΠΎΠΏΠΈΡΠ°Π½ ΠΏΠΎ-Π³ΠΎΡΠ΅, Π΅ ΠΏΠΎ-Π½Π°Π΄Π΅ΠΆΠ΄Π΅Π½.
Π ΡΡΠ΅Π΄Π° Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³ Ρ root Π΄ΠΎΡΡΡΠΏ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°ΡΠ΅ ΡΠ΅Π»ΠΈΡ ΡΠΎΠ·ΠΈ ΠΏΡΠΎΡΠ΅Ρ Ρ shell ΡΠΊΡΠΈΠΏΡ ΠΈ Π΄Π° Π³ΠΎ ΠΏΠ»Π°Π½ΠΈΡΠ°ΡΠ΅ ΠΊΠ°ΡΠΎ Π΅Π΄Π½ΠΎΠΊΡΠ°ΡΠ½Π° cron Π·Π°Π΄Π°ΡΠ°, Π΄Π°Π²Π°ΠΉΠΊΠΈ Π²ΠΈ ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ ΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°Π½Π΅ΡΠΎ.
Π‘ΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ°
ΠΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π²ΡΡΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° utf8mb4 ΡΠΏΡΡΠΌΠΎ utf8 Π΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π·Π° ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΠ°ΡΡ ΠΎΡ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½ΠΈΡΡΠ°:
- ΠΠ°ΡΠ²ΠΊΠΈ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅: ΠΡΠΌΠ° ΠΈΠ·ΠΌΠ΅ΡΠΈΠΌΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π·Π° BMP ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈΠ·ΠΈΡΠΊΠ²Π°Ρ Π΅Π΄ΠΈΠ½ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π΅Π½ Π±Π°ΠΉΡ I/O, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ ΠΏΠΎΠ³Π»ΡΡΠ° ΠΎΡ ΠΊΠ΅ΡΠΈΡΠ°Π½ΠΎΡΠΎ Π² Π±ΡΡΠ΅ΡΠ½ΠΈΡ ΠΏΡΠ».
- ΠΠ°ΡΠ²ΠΊΠΈ Π·Π° Π·Π°ΠΏΠΈΡ: ΠΠ΄Π΅Π½ΡΠΈΡΠ½ΠΈ Π·Π° ASCII ΠΈ BMP ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅. ΠΠ΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΈ Π·Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ.
- ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ: ΠΠ°ΠΌΠ°Π»Π΅Π½Π°ΡΠ° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½Π° Π΄ΡΠ»ΠΆΠΈΠ½Π° Π½Π° ΠΏΡΠ΅ΡΠΈΠΊΡΠ° (191 ΡΡΠ΅ΡΡ 255 ΡΠΈΠΌΠ²ΠΎΠ»Π° Π·Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Ρ ΠΏΡΠ»Π½Π° ΡΠΈΡΠΈΠ½Π°) ΠΌΠΎΠΆΠ΅ Π΄Π° Π·Π°ΡΠ΅Π³Π½Π΅ ΠΏΠ»Π°Π½ΠΎΠ²Π΅ΡΠ΅ Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅, Π°ΠΊΠΎ ΠΈΠΌΠ°ΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ Π²ΡΡΡ Ρ Π΄ΡΠ»Π³ΠΈ `VARCHAR` ΠΊΠΎΠ»ΠΎΠ½ΠΈ. ΠΠ΄ΠΈΡΠΈΡΠ°ΠΉΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ ΡΠΈ ΠΏΡΠ΅Π΄ΠΈ ΠΈ ΡΠ»Π΅Π΄ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°.
- ΠΠ°ΠΌΠ΅Ρ: MySQL ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Ρ Π±ΡΡΠ΅ΡΠΈ Ρ ΡΠΈΠΊΡΠΈΡΠ°Π½Π° ΡΠΈΡΠΈΠ½Π° Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π½ΠΈΠ·ΠΎΠ²Π΅ Π²ΡΠ· ΠΎΡΠ½ΠΎΠ²Π° Π½Π° ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»Π½ΠΈΡΠ΅ Π±Π°ΠΉΡΠΎΠ²Π΅ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ». ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ ΠΎΡ utf8 (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 3 Π±Π°ΠΉΡΠ°) ΠΊΡΠΌ utf8mb4 (ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ 4 Π±Π°ΠΉΡΠ°) ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ°, ΡΠ°Π·ΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π° Π·Π° Π±ΡΡΠ΅ΡΠΈ Π·Π° ΡΠΎΡΡΠΈΡΠ°Π½Π΅ Π² ΠΏΠ°ΠΌΠ΅ΡΡΠ° ΠΈ Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 33% Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΎΠ²Π΅. ΠΠ° Dedicated Server Ρ Π΄ΠΎΡΡΠ°ΡΡΡΠ½ΠΎ RAM, ΡΠΎΠ²Π° Π΅ Π±Π΅Π· Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΡΡΠ΅Π΄Π° Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΠ°ΠΌΠ΅Ρ, Π½Π°Π±Π»ΡΠ΄Π°Π²Π°ΠΉΡΠ΅ `sort_buffer_size` ΠΈ `tmp_table_size` ΡΠ»Π΅Π΄ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°.
ΠΠΎΠ³Π° utf8 Π²ΡΠ΅ ΠΎΡΠ΅ Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ
Π‘ΡΡΠ΅ΡΡΠ²ΡΠ²Π° ΡΠ΅ΡΠ΅Π½ Π½Π°Π±ΠΎΡ ΠΎΡ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΠΈ ΠΏΡΠΈΡΠΈΠ½ΠΈ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ `utf8`:
- Π‘ΡΡΠΎΠ³Π° ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡ Ρ Π½Π°ΡΠ»Π΅Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ: ΠΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΡΠΎ Π½Π΅ΠΏΠΎΠ΄Π΄ΡΡΠΆΠ°Π½ ORM ΠΈΠ»ΠΈ Π΄ΡΠ°ΠΉΠ²Π΅Ρ Π·Π° Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΉΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π° 4-Π±Π°ΠΉΡΠΎΠ²ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. Π’ΠΎΠ²Π° Π΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈΡ Π΄ΡΠ»Π³, Π° Π½Π΅ ΠΏΡΠΈΡΠΈΠ½Π° Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΡΠ΅ utf8 Π·Π° Π½Π΅ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΎ Π²ΡΠ΅ΠΌΠ΅.
- ΠΠ°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΡΠ°ΠΌΠΎ Π·Π° ΡΠ΅ΡΠ΅Π½Π΅ Π·Π° Π°ΡΡ ΠΈΠ²ΠΈΡΠ°Π½Π΅: ΠΠΊΠΎ Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π½ΠΈΠΊΠΎΠ³Π° Π½ΡΠΌΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π° Π½ΠΎΠ²ΠΈ Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ Π½Π΅ ΡΡΠ΄ΡΡΠΆΠ°Ρ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° Π΄ΠΎΠ±Π°Π²Ρ ΡΠΈΡΠΊ Π±Π΅Π· ΠΏΠΎΠ»Π·Π°.
- Π‘ΡΡΠΎΠ³ΠΈ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅: Π ΠΊΡΠ°ΠΉΠ½ΠΈ Π³ΡΠ°Π½ΠΈΡΠ½ΠΈ ΡΠ»ΡΡΠ°ΠΈ β Π²Π³ΡΠ°Π΄Π΅Π½ΠΈ ΡΠΈΡΡΠ΅ΠΌΠΈ ΠΈΠ»ΠΈ ΡΡΠ΅Π΄ΠΈ Ρ ΡΠ΅ΠΆΠΊΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ ΠΊΠ°ΠΏΠ°ΡΠΈΡΠ΅Ρ β ΠΏΡΠ΅Π΄Π΅Π»Π½Π°ΡΠ° ΡΠ°Π·Π»ΠΈΠΊΠ° Π² ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠΌΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π’ΠΎΠ²Π° Π½Π΅ ΡΠ΅ ΠΎΡΠ½Π°ΡΡ Π·Π° Π½ΠΈΠΊΠ°ΠΊΡΠ² ΡΡΠ°Π½Π΄Π°ΡΡΠ΅Π½ ΡΡΠ΅Π½Π°ΡΠΈΠΉ Π·Π° ΡΠ΅Π± Ρ ΠΎΡΡΠΈΠ½Π³.
ΠΡΠ² Π²ΡΠ΅ΠΊΠΈ Π΄ΡΡΠ³ ΡΠ»ΡΡΠ°ΠΉ utf8mb4 Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΈΡΡ ΠΈΠ·Π±ΠΎΡ. ΠΡΠ³ΡΠΌΠ΅Π½ΡΡΡ, ΡΠ΅ utf8 ΡΠΏΠ΅ΡΡΡΠ²Π° ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅, Π΅ ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ Π²Π΅ΡΠ΅Π½ ΡΠ°ΠΌΠΎ Π·Π° Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ°ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ½Π°ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π² utf8. ΠΠ΅ ΡΠΏΠ΅ΡΡΡΠ²Π°ΡΠ΅ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ Π·Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΅ Π΄Π° ΡΡΡ ΡΠ°Π½ΠΈΡΠ΅.
ΠΠ·Π±ΠΎΡ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° Ρ ΠΎΡΡΠΈΠ½Π³ ΡΡΠ΅Π΄Π° Π·Π° MySQL utf8mb4
ΠΡΠ°Π²ΠΈΠ»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° utf8mb4 ΠΈΠ·ΠΈΡΠΊΠ²Π° Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΈΡ ΡΠ°ΠΉΠ» Π½Π° MySQL ΡΡΡΠ²ΡΡΠ° (`my.cnf`). Π’ΠΎΠ²Π° ΠΈΠ·ΠΊΠ»ΡΡΠ²Π° ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ ΡΡΠ΅Π΄ΠΈ Π·Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³, ΠΊΡΠ΄Π΅ΡΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ.
ΠΠ° ΠΏΡΠ»Π΅Π½ ΠΊΠΎΠ½ΡΡΠΎΠ» Π²ΡΡΡ Ρ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π² MySQL, ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ΡΠΎ, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈΡΠ΅ Π½Π° InnoDB ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ°, Π²ΠΈ Π΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌ ΠΈΠ»ΠΈ ΠΏΠ»Π°Π½ Π·Π° VPS Π₯ΠΎΡΡΠΈΠ½Π³ Ρ root Π΄ΠΎΡΡΡΠΏ, ΠΈΠ»ΠΈ Dedicated Server. Π Π΄Π²Π΅ΡΠ΅ Π²ΠΈ Π΄Π°Π²Π°Ρ Π΄ΠΈΡΠ΅ΠΊΡΠ΅Π½ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ `/etc/mysql/my.cnf`, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ MySQL ΡΡΠ»ΡΠ³Π°ΡΠ° ΠΈ ΡΠ²ΠΎΠ±ΠΎΠ΄Π°ΡΠ° Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΡΠ΅ `innodb_large_prefix`, `ROW_FORMAT` ΠΈ Π΄ΡΡΠ³ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ Π²Π»ΠΈΡΡΡ Π½Π° ΡΡΠΏΠ΅Ρ Π° Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° ΠΊΡΠΌ utf8mb4.
ΠΠΊΠΎ ΡΠΏΡΠ°Π²Π»ΡΠ²Π°ΡΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ ΠΈΠ»ΠΈ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅, VPS Ρ cPanel ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Ρ Π³ΡΠ°ΡΠΈΡΠ΅Π½ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π·Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π½Π° Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΠΊΠ°ΡΠΎ ΡΡΡΠ΅Π²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π·Π°ΠΏΠ°Π·Π²Π° Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΈΡ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΡΡΡΠ²ΡΡ Π·Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ. ΠΠ° Π΅ΠΊΠΈΠΏΠΈ, ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°ΡΠΈ Π³ΡΠ²ΠΊΠ°Π²ΠΎΡΡΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΈΡ ΡΠ΅Π΄ Ρ Π»Π΅ΠΊ ΠΏΠ°Π½Π΅Π», VPS ΠΊΠΎΠ½ΡΡΠΎΠ»Π½ΠΈ ΠΏΠ°Π½Π΅Π»ΠΈ ΠΏΡΠ΅Π΄Π»Π°Π³Π°Ρ Π½ΡΠΊΠΎΠ»ΠΊΠΎ Π°Π»ΡΠ΅ΡΠ½Π°ΡΠΈΠ²ΠΈ, ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ²Π½ΠΈ ΡΠ°Π±ΠΎΡΠ½ΠΈ ΠΏΡΠΎΡΠ΅ΡΠΈ.
ΠΠ° ΠΏΡΠΎΠ΅ΠΊΡΠΈ, ΠΈΠ·ΠΈΡΠΊΠ²Π°ΡΠΈ ΡΡΡΠΎ ΡΠΈΠ³ΡΡΠ½ΠΎ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΡΡΡΠ΅ΡΠ°Π²Π°Π½Π΅ΡΠΎ Π½Π° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Ρ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°Π½ SSL ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°Ρ Π³Π°ΡΠ°Π½ΡΠΈΡΠ°, ΡΠ΅ Π΄Π°Π½Π½ΠΈΡΠ΅, ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈ Ρ utf8mb4, ΡΠ° Π·Π°ΡΠΈΡΠ΅Π½ΠΈ ΠΏΡΠΈ ΠΏΡΠ΅Π½ΠΎΡ, Π° Π½Π΅ ΡΠ°ΠΌΠΎ Π² ΠΏΠΎΠΊΠΎΠΉ.
ΠΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ Π·Π° ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΡ
ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ ΡΠΎΠ·ΠΈ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅Π½ ΡΠΏΠΈΡΡΠΊ ΠΏΡΠ΅Π΄ΠΈ ΠΈ ΡΠ»Π΅Π΄ Π²ΡΡΠΊΠ° ΠΌΠΈΠ³ΡΠ°ΡΠΈΡ ΠΎΡ utf8 ΠΊΡΠΌ utf8mb4:
ΠΡΠ΅Π΄ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°:
- [ ] ΠΡΠ»Π΅Π½ `mysqldump` Π°ΡΡ ΠΈΠ², Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠ°Π½ ΠΈ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΠΈΠΌ
- [ ] ΠΠ΅ΡΡΠΈΡΡΠ° Π½Π° MySQL ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½Π° (ΠΈΠ·ΠΈΡΠΊΠ²Π° ΡΠ΅ 5.5.3+ Π·Π° utf8mb4)
- [ ] Π‘ΡΠ°ΡΡΡΡΡ Π½Π° `innodb_large_prefix` ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½ (Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΠΉΡΠ΅ ΠΏΡΠΈ MySQL 5.6/5.7)
- [ ] ΠΡΠΈΡΠΊΠΈ `VARCHAR(255)` ΠΊΠΎΠ»ΠΎΠ½ΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ
- [ ] ΠΠΎΠ΄ΡΡ Π·Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ ΠΏΡΠ΅Π³Π»Π΅Π΄Π°Π½ ΠΈ Π°ΠΊΡΡΠ°Π»ΠΈΠ·ΠΈΡΠ°Π½
- [ ] ΠΠ»Π°Π½ΠΈΡΠ°Π½ ΠΏΡΠΎΠ·ΠΎΡΠ΅Ρ Π·Π° ΠΏΠΎΠ΄Π΄ΡΡΠΆΠΊΠ° Π·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡΠ²Π΅Π½ΠΈ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ
Π‘Π»Π΅Π΄ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°:
- [ ] `SHOW VARIABLES LIKE 'character_set%'` ΠΏΠΎΠΊΠ°Π·Π²Π° `utf8mb4` Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ
- [ ] `SHOW CREATE TABLE` ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π° `utf8mb4` Π·Π° Π²ΡΠΈΡΠΊΠΈ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Π½ΠΈ ΡΠ°Π±Π»ΠΈΡΠΈ
- [ ] ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° `information_schema.COLUMNS` ΠΏΠΎΡΠ²ΡΡΠΆΠ΄Π°Π²Π° Π»ΠΈΠΏΡΠ°ΡΠ° Π½Π° ΠΎΡΡΠ°Π²Π°ΡΠΈ `utf8` ΠΊΠΎΠ»ΠΎΠ½ΠΈ
- [ ] `SET NAMES utf8mb4` Π½Π° Π½ΠΈΠ²ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½ Π² ΠΊΠΎΠ΄Π° Π·Π° Π²ΡΡΠ·ΠΊΠ°
- [ ] Π’Π΅ΡΡΡΡ Π·Π° Π²ΠΌΡΠΊΠ²Π°Π½Π΅ Π½Π° Π΅ΠΌΠΎΠ΄ΠΆΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Ρ ΡΡΠΏΠ΅ΡΠ½ΠΎ Π½Π° ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΠ΅Π»Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°
- [ ] ΠΠ°Π·ΠΎΠ²Π°ΡΠ° Π»ΠΈΠ½ΠΈΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π½Π° Π·Π°ΡΠ²ΠΊΠΈΡΠ΅ ΡΡΠ°Π²Π½Π΅Π½Π° Ρ ΠΌΠ΅ΡΡΠΈΠΊΠΈΡΠ΅ ΠΏΡΠ΅Π΄ΠΈ ΠΌΠΈΠ³ΡΠ°ΡΠΈΡΡΠ°
- [ ] ΠΡΠ»ΠΆΠΈΠ½ΠΈΡΠ΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ΅ Π²Π΅ΡΠΈΡΠΈΡΠΈΡΠ°Π½ΠΈ β Π±Π΅Π· ΠΌΡΠ»ΡΠ°Π»ΠΈΠ²ΠΎ ΡΡΠΊΡΠ°ΡΠ°Π²Π°Π½Π΅ Π½Π° Π΄ΡΠ»Π³ΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠΈΡΠ°Π½ΠΈ ΡΡΠΎΠΉΠ½ΠΎΡΡΠΈ
Π§ΠΠ
ΠΡΠΈΡΠΈΠ½ΡΠ²Π° Π»ΠΈ ΠΌΠΈΠ³ΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΎΡ utf8 ΠΊΡΠΌ utf8mb4 Π·Π°Π³ΡΠ±Π° Π½Π° Π΄Π°Π½Π½ΠΈ?
ΠΠ΅. utf8mb4 Π΅ ΡΡΡΠΎΠ³ΠΎ Π½Π°Π΄ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ Π½Π° MySQL's utf8. ΠΡΠ΅ΠΊΠΈ ΡΠΈΠΌΠ²ΠΎΠ», ΡΡΡ ΡΠ°Π½Π΅Π½ Π² utf8 ΠΊΠΎΠ»ΠΎΠ½Π°, Π΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ Π² utf8mb4. ΠΠΈΠ³ΡΠ°ΡΠΈΡΡΠ° Π΅ Π½Π΅ΡΠ°Π·ΡΡΡΠΈΡΠ΅Π»Π½Π° Π·Π° ΡΡΡΠ΅ΡΡΠ²ΡΠ²Π°ΡΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ. ΠΠ΄ΠΈΠ½ΡΡΠ²Π΅Π½ΠΈΡΡ ΡΠΈΡΠΊ ΡΠ° Π³ΡΠ΅ΡΠΊΠΈ Π² Π΄ΡΠ»ΠΆΠΈΠ½Π°ΡΠ° Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ° ΠΏΡΠΈ `VARCHAR(255)` ΠΊΠΎΠ»ΠΎΠ½ΠΈ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΈ Π½Π° ΠΏΡΠ»Π½ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈ ΡΡΠ΅Π· ΡΡΠΊΡΠ°ΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ½ΠΈΡ ΠΏΡΠ΅ΡΠΈΠΊΡ.
ΠΠ°ΡΠΎ Π΅ΠΌΠΎΠ΄ΠΆΠΈ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ ΡΠ΅ Π²ΠΌΡΠΊΠ²Π°Ρ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ½Π²Π΅ΡΡΠΈΡΠ°Ρ ΡΠ°Π±Π»ΠΈΡΠΈΡΠ΅ ΡΠΈ ΠΊΡΠΌ utf8mb4?
ΠΠ°ΠΉ-ΡΠ΅ΡΡΠ°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π΅ Π½Π°Π±ΠΎΡΡΡ ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π½Π° Π²ΡΡΠ·ΠΊΠ°ΡΠ° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ. ΠΠΊΠΎ Π²Π°ΡΠΈΡΡ PHP, Python ΠΈΠ»ΠΈ Node.js ΠΊΠΎΠ΄ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π° Π±Π΅Π· ΠΈΠ·ΡΠΈΡΠ½ΠΎ ΡΠΊΠ°Π·Π²Π°Π½Π΅ Π½Π° `utf8mb4`, MySQL ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ° `character_set_client` Π½Π° ΡΡΡΠ²ΡΡΠ° Π·Π° ΡΠ°Π·ΠΈ ΡΠ΅ΡΠΈΡ. ΠΠΎΠ±Π°Π²Π΅ΡΠ΅ `SET NAMES utf8mb4` ΠΈΠ»ΠΈ Π΅ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΠ½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π·Π° Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΊΡΠΌ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡΡΠ° Π½Π° Π²Π°ΡΠ°ΡΠ° Π²ΡΡΠ·ΠΊΠ°.
ΠΠ°ΠΊΠ²Π° Π΅ ΡΠ°Π·Π»ΠΈΠΊΠ°ΡΠ° ΠΌΠ΅ΠΆΠ΄Ρ utf8mb4_unicode_ci ΠΈ utf8mb4_0900_ai_ci?
`utf8mb4_unicode_ci` Π΅ Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π·Π° ΡΡΠΏΠΎΡΡΠ°Π²ΡΠ½Π΅ Π½Π° Unicode 4.0 ΠΈ Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΈΡΡ ΠΈΠ·Π±ΠΎΡ Π·Π° MySQL 5.7. `utf8mb4_0900_ai_ci` Π΅ Π±Π°Π·ΠΈΡΠ°Π½ΠΎ Π½Π° Unicode 9.0, Π΅ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΡΠΎ Π² MySQL 8.0 ΠΈ Π΅ Π΅Π΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎ-Π±ΡΡΠ·ΠΎ ΠΈ ΠΏΠΎ-Π΅Π·ΠΈΠΊΠΎΠ²ΠΎ ΡΠΎΡΠ½ΠΎ. ΠΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡΠ΅ `utf8mb4_0900_ai_ci` Π½Π° MySQL 8.0+ Π·Π° Π½ΠΎΠ²ΠΈ ΠΏΡΠΎΠ΅ΠΊΡΠΈ.
Π©Π΅ ΡΠ²Π΅Π»ΠΈΡΠΈ Π»ΠΈ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ ΠΊΡΠΌ utf8mb4 Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΡΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ ΠΌΠΈ?
ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ°, Π½Π΅. ASCII ΠΈ ΠΏΠΎΠ²Π΅ΡΠ΅ΡΠΎ BMP ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ ΡΡΡΠΈΡ Π±ΡΠΎΠΉ Π±Π°ΠΉΡΠΎΠ²Π΅ ΠΈ Π² Π΄Π²Π΅ΡΠ΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ΠΈΡ. Π‘Π°ΠΌΠΎ Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ (Π΅ΠΌΠΎΠ΄ΠΆΠΈ, Π΄ΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΈ CJK) ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ 4 Π±Π°ΠΉΡΠ° β ΠΈ ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π° Π΄Π° Π±ΡΠ΄Π°Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π΅Π½ΠΈ Π² utf8 ΠΏΡΠ΅Π΄ΠΈ. ΠΠΎΠΏΡΠ»Π½ΠΈΡΠ΅Π»Π½ΠΎΡΠΎ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π·Π° Π±ΡΡΠ΅ΡΠΈ Π·Π° ΡΠΎΡΡΠΈΡΠ°Π½Π΅ ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ°Π²Π° Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 33% Π·Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΎΠ²Π΅, Π½ΠΎ ΡΠΎΠ²Π° Π΅ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π½Π° Π²ΡΠ΅ΠΊΠΈ ΡΡΠ²ΡΠ΅ΠΌΠ΅Π½Π΅Π½ ΡΡΡΠ²ΡΡ.
ΠΠΎΠ³Π° Π»ΠΈ Π΄Π° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΠ°ΠΌ utf8mb4 Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³?
Π§Π°ΡΡΠΈΡΠ½ΠΎ. ΠΠΎΠΆΠ΅ΡΠ΅ Π΄Π° Π·Π°Π΄Π°Π΄Π΅ΡΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΠΊΠΈ SQL `ALTER` ΠΈΠ·ΡΠ°Π·ΠΈ, ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ΡΠ΅ Π½Π°Π±ΠΎΡΠ° ΠΎΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΈ Π² Π½ΠΈΠ·Π° Π·Π° Π²ΡΡΠ·ΠΊΠ° Π½Π° Π²Π°ΡΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅. ΠΡΠΏΡΠ΅ΠΊΠΈ ΡΠΎΠ²Π°, Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΎΠΌΠ΅Π½ΠΈΡΠ΅ `my.cnf` ΠΈΠ»ΠΈ Π΄Π° ΡΠ΅ΡΡΠ°ΡΡΠΈΡΠ°ΡΠ΅ MySQL Π½Π° ΡΠΏΠΎΠ΄Π΅Π»Π΅Π½ Ρ ΠΎΡΡΠΈΠ½Π³. Π‘ΡΠ°Π½Π΄Π°ΡΡΠΈΡΠ΅ Π½Π° Π½ΠΈΠ²ΠΎ ΡΡΡΠ²ΡΡ ΡΠ΅ ΠΎΡΡΠ°Π½Π°Ρ Π½Π΅ΠΏΡΠΎΠΌΠ΅Π½Π΅Π½ΠΈ, ΠΊΠΎΠ΅ΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π²Π°, ΡΠ΅ Π½ΠΎΠ²ΠΈΡΠ΅ Π±Π°Π·ΠΈ Π΄Π°Π½Π½ΠΈ, ΡΡΠ·Π΄Π°Π΄Π΅Π½ΠΈ ΡΡΠ΅Π· ΠΏΠ°Π½Π΅Π»Π° Π·Π° Ρ ΠΎΡΡΠΈΠ½Π³, ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ utf8 ΠΏΠΎ ΠΏΠΎΠ΄ΡΠ°Π·Π±ΠΈΡΠ°Π½Π΅. ΠΡΠ»Π½Π°ΡΠ° ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ Π½Π° utf8mb4 ΠΈΠ·ΠΈΡΠΊΠ²Π° VPS ΠΈΠ»ΠΈ dedicated ΡΡΡΠ²ΡΡ Ρ root Π΄ΠΎΡΡΡΠΏ.
ΠΎΡ Π²ΡΠΈΡΠΊΠΈ Ρ
ΠΎΡΡΠΈΠ½Π³ ΡΡΠ»ΡΠ³ΠΈ