PHP Stockage de données et accès


Exemple

Ce sujet traite spécifiquement de UTF-8 et des considérations relatives à son utilisation avec une base de données. Si vous souhaitez plus d'informations sur l'utilisation des bases de données en PHP, consultez cette rubrique .

Stockage de données dans une base de données MySQL:

  • Spécifiez le utf8mb4 caractères utf8mb4 sur toutes les tables et colonnes de texte de votre base de données. Cela permet à MySQL de stocker et de récupérer physiquement les valeurs encodées en mode natif dans UTF-8.

    MySQL utilisera implicitement l'encodage utf8mb4 si un utf8mb4_* est spécifié (sans jeu de caractères explicite).

  • Les anciennes versions de MySQL (<5.5.3) ne supportent pas utf8mb4 , vous serez donc obligé d'utiliser utf8 , qui ne supporte qu'un sous-ensemble de caractères Unicode.

Accéder aux données dans une base de données MySQL:

  • Dans votre code d'application (par exemple, PHP), quelle que soit la méthode d'accès à la base de données que vous utilisez, vous devrez définir le charset de connexion sur utf8mb4 . De cette façon, MySQL ne fait aucune conversion de son UTF-8 natif lorsqu'il transmet des données à votre application et inversement.

  • Certains pilotes fournissent leur propre mécanisme de configuration du jeu de caractères de connexion, qui à la fois met à jour son propre état interne et informe MySQL du codage à utiliser sur la connexion. C'est généralement l'approche privilégiée.

    Par exemple (la même considération concernant utf8mb4 / utf8 s'applique comme ci-dessus):

    • Si vous utilisez la couche d'abstraction PDO avec PHP ≥ 5.3.6, vous pouvez spécifier charset dans le DSN :

      $handle = new PDO('mysql:charset=utf8mb4');
      
    • Si vous utilisez mysqli , vous pouvez appeler set_charset() :

      $conn = mysqli_connect('localhost', 'my_user', 'my_password', 'my_db');
      
      $conn->set_charset('utf8mb4');        // object oriented style
      mysqli_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Si vous êtes bloqué avec un simple mysql mais que vous utilisez PHP ≥ 5.2.3, vous pouvez appeler mysql_set_charset .

      $conn = mysql_connect('localhost', 'my_user', 'my_password');
      
      $conn->set_charset('utf8mb4');       // object oriented style
      mysql_set_charset($conn, 'utf8mb4'); // procedural style
      
    • Si le pilote de base de données ne fournit pas son propre mécanisme pour définir le jeu de caractères de connexion, vous devrez peut-être envoyer une requête à MySQL pour savoir comment votre application s'attend à ce que les données de la connexion soient codées: SET NAMES 'utf8mb4' .