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

Специални символи в PHP / MySQL

Просто бих искал да предоставя малко повече подробности за решението, предложено от vartec което е (в зависимост от вашата инсталация на MySQL) най-правилното решение на вашия проблем. На първо място проблемът с набора от знаци/кодирането в MySQL е донякъде сложен предмет, който е подробно обхванат в ръководството за MySQL Глава 9.1 "Поддръжка на набор от знаци" . Във вашия случай особено 9.1.4. „Набори от символи за връзка и съпоставяне“ ще бъде най-подходящо.

За да бъде накратко:MySQL трябва да знае кой набор от знаци/кодиране на вашето клиентско приложение (говорейки от гледна точка на базата данни, това е вашият PHP скрипт), тъй като ще прекодира всички низови данни от вътрешния набор от знаци/кодиране, дефиниран на сървъра, ниво база данни, таблица или колона в набора от знаци/кодиране на връзката. Вие използвате UTF-8 от страна на клиента, така че трябва да кажете на MySQL, че използвате UTF-8. Това се прави с MySQL командата SET NAMES 'utf8' която трябва да бъде изпратена като първа заявка при отваряне на връзка. В зависимост от вашата инсталация и от клиентската библиотека на MySQL, която използвате в PHP скрипта, това може да стане автоматично при всяко свързване.

Ако използвате PDO, това е просто въпрос на настройка на конфигурационен параметър

$db = new PDO($dsn, $user, $password);
$db->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND, "SET NAMES 'utf8'");

Използването на mysqli промяната на клиентския набор от символи/кодиране е още по-проста:

$mysqli = new mysqli("localhost", "user", "password", "db");
$mysqli->set_charset("utf8");

Надявам се, че това ще помогне да направим всичко по-разбираемо.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Производителност на MySQL:MySQL/MariaDB индекси

  2. SQLSTATE[42000]:Синтактична грешка или нарушение на достъпа:1064 Имате грешка във вашия SQL синтаксис — PHP — PDO

  3. Грешка с неизвестна колона в „списък с полета“ при заявка за актуализиране на MySQL

  4. MySQL максимално използване на паметта

  5. Има ли възможност ANY_VALUE за mysql 5.6?