Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

MySQL dan PHP:UTF-8 dengan karakter Cyrillic

Anda mencampur API di sini, mysql_* dan mysqli_* tidak bercampur. Anda harus tetap menggunakan mysqli_ (seperti yang Anda lihat), sebagai mysql_* fungsi sudah usang, dan dihapus seluruhnya di PHP7.

Masalah Anda yang sebenarnya adalah masalah rangkaian karakter di suatu tempat. Berikut adalah beberapa petunjuk yang dapat membantu Anda mendapatkan rangkaian karakter yang tepat untuk aplikasi Anda. Ini mencakup sebagian besar dari masalah umum yang dapat dihadapi seseorang ketika mengembangkan aplikasi PHP/MySQL.

  • SEMUA atribut di seluruh aplikasi Anda harus disetel ke UTF-8
  • Simpan dokumen sebagai UTF-8 tanpa BOM (Jika Anda menggunakan Notepad++, ini adalah Format -> Convert to UTF-8 w/o BOM )
  • Header di PHP dan HTML harus disetel ke UTF-8

    • HTML (di dalam <head></head> tag):

      <meta charset="UTF-8">
      
    • PHP (di bagian atas file Anda, sebelum keluaran apa pun):

      header('Content-Type: text/html; charset=utf-8');
      
  • Saat menghubungkan ke database, setel charset ke UTF-8 untuk objek koneksi Anda, seperti ini (langsung setelah terhubung)

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

    Ini untuk mysqli_* , ada yang serupa untuk mysql_* dan PDO (lihat bagian bawah jawaban ini).

  • Pastikan juga database dan tabel Anda disetel ke UTF-8, Anda dapat melakukannya seperti ini:

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

    (Data apa pun yang sudah disimpan tidak akan dikonversi ke rangkaian karakter yang tepat, jadi Anda harus melakukannya dengan database yang bersih, atau memperbarui data setelah melakukan ini jika ada karakter yang rusak).

  • Jika Anda menggunakan json_encode() , Anda mungkin perlu menerapkan JSON_UNESCAPED_UNICODE flag, jika tidak maka akan mengubah karakter khusus menjadi setara heksadesimalnya.

Ingatlah bahwa SEGALANYA di seluruh saluran kode Anda perlu disetel ke UFT-8, jika tidak, Anda mungkin mengalami karakter yang rusak di aplikasi Anda.

Selain daftar ini, mungkin ada fungsi yang memiliki parameter khusus untuk menentukan rangkaian karakter. Manual akan memberi tahu Anda tentang ini (contohnya adalah htmlspecialchars() ).

Ada juga fungsi khusus untuk karakter multibyte, contoh:strtolower() tidak akan menurunkan karakter multibyte, untuk itu Anda harus menggunakan mb_strtolower() , lihat demo langsung ini .

Catatan 1 :Perhatikan bahwa suatu tempat dicatat sebagai utf-8 (dengan tanda hubung), dan di suatu tempat sebagai utf8 (tanpa itu). Penting bagi Anda untuk mengetahui kapan harus menggunakan yang mana, karena biasanya tidak dapat dipertukarkan. Misalnya, HTML dan PHP menginginkan utf-8 , tetapi MySQL tidak.

Catatan 2 :Di MySQL, "charset" dan "collation" bukanlah hal yang sama, lihat Perbedaan antara Encoding dan collation? . Keduanya harus disetel ke utf-8; umumnya susunan harus berupa utf8_general_ci atau utf8_unicode_ci , lihat UTF-8:Umum? Tempat sampah? Unicode? .

Catatan 3 :Jika Anda menggunakan emoji, MySQL harus ditentukan dengan utf8mb4 charset alih-alih utf8 standar , baik dalam database maupun koneksi. HTML dan PHP hanya akan memiliki UTF-8 .

Menyetel UTF-8 dengan mysql_ dan PDO

  • PDO:Ini dilakukan di DSN objek Anda. Perhatikan charset atribut,

    $pdo = new PDO("mysql:host=localhost;dbname=database;charset=utf8", "user", "pass");
    
  • mysql_ :Ini dilakukan sangat mirip dengan mysqli_* , tetapi tidak mengambil objek koneksi sebagai argumen pertama.

    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. Bagaimana cara memberi setiap pengguna terdaftar url mereka sendiri menggunakan PHP?

  2. Fungsi MySQL ATAN2() – Mengembalikan Tangen Busur dari 2 Nilai

  3. Bagaimana cara mendapatkan hitungan setiap nilai berbeda dalam kolom?

  4. 4 Cara Mendaftar Semua Tampilan di MySQL

  5. Cara Terbaik untuk Memperbaiki Tabel InnoDB yang Rusak di MySQL