Simply.com is available in english

Rakstzīmju komplekts un kolācija MySQL datubāzē

Izmantojiet charset utf8mb4 un collation utf8mb4_unicode_ci MySQL, un mainiet tos, izmantojot phpMyAdmin vai ALTER komandas, atcerieties arī izmantot SET NAMES savienojumam.

Charset (tegnsæt) nosaka, kādas rakstzīmes datubāze var saglabāt, un collation nosaka, kā rakstzīmes tiek salīdzinātas un kārtotas. Nepareizs charset ir visbiežākā iemesla dēļ, kādā dāņu burti (æ, ø, å) vai emocijzīmes tiek parādīti kā jautājuma zīmes vai mojibake (piemēram, æ vietā æ).

Ieteiktās vērtības

Izmantojiet utf8mb4 kā charset un utf8mb4_unicode_ci kā collation. utf8mb4 atbalsta visus Unicode rakstzīmes, ieskaitot emocijzīmes.

Metode 1: phpMyAdmin

Mainīt noklusējumu visai datu bāzei (attiecas tikai uz jaunām tabulām):

  1. Piesakieties phpMyAdmin un izvēlieties datu bāzi kreisajā pusē.
  2. Klikšķiniet uz cilnes Operācijas.
  3. Atrodiet sekciju Kārtošana (Collation).
  4. Izvēlieties utf8mb4_unicode_ci nolaižamajā izvēlnē.
  5. Klikšķiniet Izpildīt.

Mainīt esošu tabulu (iekļaujot visus tās kolonnas):

  1. Izvēlieties tabulu kreisajā pusē.
  2. Klikšķiniet uz cilnes Operācijas.
  3. Sadaļā Tabulas izvēles iespējas izvēlieties jaunu kārtošanu.
  4. Iezīmējiet Mainīt arī kārtošanu visām kolonnām.
  5. Klikšķiniet Izpildīt.

Metode 2: SQL

Mainīt datu bāzes noklusējumu:

ALTER DATABASE mindatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Mainīt tabulu un visus tās kolonnas:

ALTER TABLE mintabel CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

phpMyAdmin varat mainīt charset katrai kolonnai: izvēlieties tabulu, klikšķiniet Struktūra, klikšķiniet Mainīt blakus kolonnai, un izvēlieties jaunu kārtošanu kolonnas definīcijā.

Konvertēt visas tabulas vienā reizē

Ģenerēt ALTER komandas automātiski:

SELECT CONCAT('ALTER TABLE `', TABLE_NAME, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;')
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = 'mindatabase' AND TABLE_TYPE = 'BASE TABLE';

Izpildiet rezultātu phpMyAdmin cilnē SQL vai caur komandrindu.

Savienojuma charset (SET NAMES)

Datu bāzes charset un savienojuma charset ir divas atšķirīgas lietas. Pat ja jūsu tabulas ir pareizi iestatītas uz utf8mb4, rakstzīmes var tikt bojātas pārsūtīšanas laikā, ja savienojums starp lietojumprogrammu un MySQL izmanto citu charset.

SET NAMES utf8mb4 uzstāda trīs sesijas mainīgos vienlaicīgi:

  • character_set_client — ko serveris sagaida saņemt no klienta
  • character_set_connection — ko serveris izmanto iekšēji pieprasījumu apstrādē
  • character_set_results — ko serveris sūta atpakaļ klientam
SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci;

Labāka prakse: izmantot draivera iebūvēto charset opciju nevis manuāli sūtīt SET NAMES. Tas nodrošina, ka arī funkcijas kā mysqli_real_escape_string() un PDO::quote() lieto pareizo charset — citādi retos gadījumos varat atvērt iespējas SQL injekcijai.

Raksts no atbalsta kategorijas: MySQL

Citi atbilstošie raksti