Dalam pengaturcaraan, kami sering menghadapi operasi membaca pangkalan data MySQL ialah pangkalan data hubungan yang biasa digunakan, tetapi aksara yang bercelaru mungkin berlaku semasa pemindahan data dengan PHP, terutamanya apabila ia berkaitan dengan pengekodan UTF. Artikel ini akan memperkenalkan cara menyelesaikan masalah membaca MySQL utf-8 aksara bercelaru dalam PHP.
1. Mengapakah watak bercelaru muncul?
Sebelum memahami penyelesaian kepada masalah kod bercelaru, mari kita fahami dahulu bagaimana masalah kod bercelaru itu berlaku.
MySQL menyokong berbilang pengekodan dan pangkalan data serta jadual antara pengekodan berbeza tidak boleh disambungkan dengan lancar. Jika pengekodan pangkalan data dan jadual MySQL tidak konsisten, aksara bercelaru mungkin berlaku.
Apabila menyambung ke pangkalan data MySQL, anda perlu menetapkan pengekodan sambungan Jika tetapan pengekodan sambungan tidak betul, aksara bercelaru mungkin muncul apabila membaca pangkalan data.
Fail PHP juga perlu menggunakan pengekodan utf-8 untuk membaca kandungan dalam pangkalan data MySQL fail PHP tidak Jika anda membaca kandungan dalam pangkalan data MySQL mengikut keperluan pengekodan UTF-8, aksara bercelaru mungkin berlaku.
2. Penyelesaian
Mengikut punca watak bercelaru, kita boleh menyelesaikan masalah watak bercelaru utf-8 dari tiga aspek berikut.
Pertama sekali, pastikan pengekodan pangkalan data dan jadual MySQL adalah konsisten, jika tidak, aksara yang bercelaru akan berlaku tidak kira bagaimana anda mengkonfigurasinya. Tetapan pengekodan perlu dibuat semasa mencipta pangkalan data dan jadual MySQL Dalam keadaan biasa, pengekodan utf-8 akan dipilih untuk memastikan pengekodan pangkalan data dan jadual MySQL adalah konsisten.
Dalam fail PHP, anda perlu menetapkan pengekodan fail kepada utf-8 untuk mengelakkan aksara bercelaru.
Apabila menyambung ke pangkalan data MySQL, anda perlu menetapkan pengekodan sambungan kepada utf-8 untuk memastikan bahawa kandungan yang dibaca adalah utf-8 Dikodkan. Tetapan ini biasanya disediakan oleh rangka kerja aplikasi, seperti rangka kerja Laravel, yang boleh melaksanakan kod berikut semasa membaca pangkalan data:
\DB::statement('set names utf8mb4');
Jika anda tidak menggunakan rangka kerja, anda perlu menetapkan pengekodan sambungan melalui kod berikut:
$conn=mysqli_connect("localhost","my_user","my_password","my_db"); mysqli_set_charset($conn,"utf8");
Dalam kod di atas, gunakan fungsi mysqli_set_charset() untuk menetapkan pengekodan sambungan.
Selain pengekodan utf-8 yang disebutkan di atas semasa menetapkan sambungan, anda juga boleh menggunakan arahan berikut:
SET character_set_connection=utf8mb4; SET character_set_client=utf8mb4; SET character_set_results=utf8mb4;
Perlu diingatkan di sini bahawa arahan di atas hendaklah dihantar sebelum membaca data.
Selain itu, jika anda menggunakan PDO untuk menyambung ke pangkalan data MySQL, anda juga perlu menyediakannya. Anda boleh menetapkan pengekodan utf-8 apabila menyambung ke MySQL melalui kod berikut:
$dbh = new PDO('mysql:host=localhost;dbname=mydb', $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4"));
Dalam contoh ini, apabila menggunakan PDO untuk menyambung ke pangkalan data MySQL, tetapkan sambungan dengan menetapkan atribut MYSQL_ATTR_INIT_COMMAND kepada " TETAPKAN NAMA pengekodan utf8mb4".
Ringkasnya, untuk memastikan PHP dapat membaca kandungan pangkalan data MySQL dengan betul, kita perlu mempertimbangkan tiga aspek pengekodan pangkalan data, pengekodan fail PHP dan pengekodan sambungan pada masa yang sama untuk memastikan ia kaedah pengekodan adalah konsisten, supaya utf dapat dielakkan -8 Kejadian masalah kod bercelaru.
Atas ialah kandungan terperinci Bagaimana untuk menyelesaikan masalah aksara yang kacau apabila membaca mysql utf-8 dalam php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!