Please note that MySQL's utf8 encoding has a maximum of 3 bytes and is unable to encode *all* unicode characters.
If you need to encode characters beyond the BMP (Basic Multilingual Plane), like emoji or other special characters, you will need to use a different encoding like utf8mb4 or any other encoding supporting the higher planes. Mysql will discard any characters encoded in 4 bytes (or more).
See https://dev.mysql.com/doc/refman/5.7/en/charset-unicode-utf8mb4.html for more information on the matterКарактери сет
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
Карактери сет
Референца за `mysqlinfo.concepts.charset.php` со подобрена типографија и навигација.
Карактери сет
Идеално, соодветен сет на знаци треба да биде поставен на ниво на сервер, а ова е опишано во делот » Конфигурација на сет на знаци од прирачникот на MySQL Server. Алтернативно, секој MySQL API нуди метод за поставување на сетот на знаци во време на извршување.
Сетот на знаци и избегнувањето на знаци
Сетот на знаци треба да биде разбран и дефиниран, бидејќи влијае на секоја акција и вклучува безбедносни импликации. На пример, механизмот за избегнување (на пр., mysqli_real_escape_string() за mysqli и Опис за PDO_MySQL) ќе се придржуваат до оваа поставка. Важно е да се сфати дека овие функции нема да го користат сетот на знаци што е дефиниран со прашање, така што, на пример, следново нема да има ефект врз нив:
Пример #1 Проблеми со поставување на сетот на знаци со SQL
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET NAMES utf8mb4");
// Will NOT affect $mysqli->real_escape_string();
$mysqli->query("SET CHARACTER SET utf8mb4");
// But, this will affect $mysqli->real_escape_string();
$mysqli->set_charset('utf8mb4');
// But, this will NOT affect it (UTF-8 vs utf8mb4) -- don't use dashes here
$mysqli->set_charset('UTF-8');
?>Подолу се прикажани примери кои демонстрираат како правилно да се промени сетот на знаци во време на извршување користејќи секој API.
Забелешка: Можна забуна со UTF-8
Бидејќи имињата на сетовите на знаци во MySQL не содржат цртички, низата "utf8" е валидна во MySQL за поставување на сетот на знаци на UTF-8 (до 3 бајти UTF-8 Unicode кодирање). Низата "UTF-8" не е валидна, бидејќи користењето на "UTF-8" нема да успее да го промени сетот на знаци и ќе фрли грешка.
Пример #2 Пример за поставување на сет на знаци: mysqli
<?php
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
echo 'Initial character set: ' . $mysqli->character_set_name() . "\n";
if (!$mysqli->set_charset('utf8mb4')) {
printf("Error loading character set utf8mb4: %s\n", $mysqli->error);
exit;
}
echo 'Your current character set is: ' . $mysqli->character_set_name() . "\n";
?>Пример #3 Пример за поставување на сет на знаци: pdo_mysql
<?php
$pdo = new PDO("mysql:host=localhost;dbname=world;charset=utf8mb4", 'my_user', 'my_pass');
?>