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

MySQL и PHP:UTF-8 с кирилица

Тук смесвате API, mysql_* и mysqli_* не се смесва. Трябва да се придържате към mysqli_ (както изглежда така или иначе сте), като mysql_* функциите са отхвърлени и премахнати изцяло в PHP7.

Вашият действителен проблем е проблем с набор от знаци някъде. Ето няколко насоки, които могат да ви помогнат да получите правилния набор от знаци за вашето приложение. Това обхваща повечето от общите проблеми, с които може да се сблъска при разработването на PHP/MySQL приложение.

  • ВСИЧКИ атрибутите във вашето приложение трябва да бъдат зададени на UTF-8
  • Запазете документа като UTF-8 без спецификация (Ако използвате Notepad++, това е Format -> Convert to UTF-8 w/o BOM )
  • Заглавката както в PHP, така и в HTML трябва да бъде настроена на UTF-8

    • HTML (вътре в <head></head> тагове):

      <meta charset="UTF-8">
      
    • PHP (в горната част на вашия файл, преди всеки изход):

      header('Content-Type: text/html; charset=utf-8');
      
  • След като се свържете с базата данни, задайте набора от знаци на UTF-8 за вашия обект на връзка, като този (директно след свързване)

    mysqli_set_charset($conn, "utf8"); /* Procedural approach */
    $conn->set_charset("utf8");        /* Object-oriented approach */
    

    Това е за mysqli_* , има подобни за mysql_* и PDO (вижте долната част на този отговор).

  • Също така се уверете, че вашата база данни и таблици са настроени на UTF-8, можете да направите това по следния начин:

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;
    

    (Всички вече съхранени данни няма да бъдат преобразувани в правилния набор от знаци, така че ще трябва да направите това с чиста база данни или да актуализирате данните, след като направите това, ако има счупени знаци).

  • Ако използвате json_encode() , може да се наложи да приложите JSON_UNESCAPED_UNICODE флаг, в противен случай ще преобразува специалните знаци в техния шестнадесетичен еквивалент.

Запомнете това ВСИЧКО в целия ви тръбопровод от код трябва да бъде настроен на UFT-8, в противен случай може да изпитате счупени знаци във вашето приложение.

В допълнение към този списък може да има функции, които имат специфичен параметър за определяне на набор от знаци. Ръководството ще ви разкаже за това (пример е htmlspecialchars() ).

Има и специални функции за многобайтови знаци, например:strtolower() няма да намали многобайтовите знаци, за това ще трябва да използвате mb_strtolower() , вижте тази демо на живо .

Забележка 1 :Забележете, че някъде е отбелязано като utf-8 (с тире) и някъде като utf8 (без него). Важно е да знаете кога да използвате кои, тъй като те обикновено не са взаимозаменяеми. Например, HTML и PHP искат utf-8 , но MySQL не го прави.

Забележка 2 :В MySQL "charset" и "collation" не са едно и също нещо, вижте Разлика между кодиране и съпоставяне? . И двете обаче трябва да бъдат настроени на utf-8; обикновено съпоставянето трябва да бъде или utf8_general_ci или utf8_unicode_ci , вижте UTF-8:Общи? Кошче? Unicode? .

Забележка 3 :Ако използвате емоджи, MySQL трябва да бъде посочен с utf8mb4 charset вместо стандартния utf8 , както в базата данни, така и във връзката. HTML и PHP ще имат само UTF-8 .

Настройка на UTF-8 с mysql_ и ЗНПа

  • PDO:Това се прави в DSN на вашия обект. Обърнете внимание на charset атрибут,

    $pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
    
  • mysql_ :Това се прави много подобно на mysqli_* , но не приема обекта за връзка като първи аргумент.

    mysql_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 Workbench с помощта на GUI

  2. Нормализиране в MYSQL

  3. Как да извлечете подниз от низ в PostgreSQL/MySQL

  4. Присъединете се към нас в Амстердам за среща с OptimaData &VidaXL

  5. JDBC връща изключение на MySQLSyntaxError с правилно изявление