utf8 MySQL penyandian tidak UTF-8 yang sebenarnya. Ini adalah pengkodean yang mirip dengan UTF-8, tetapi hanya mendukung sebagian dari apa yang didukung UTF-8. utf8mb4 adalah sebenarnya UTF-8. Perbedaan ini adalah detail implementasi internal dari MySQL. Keduanya terlihat seperti UTF-8 di sisi PHP. Apakah Anda menggunakan utf8 atau utf8mb4 , PHP akan mendapatkan UTF-8 yang valid dalam kedua kasus.
Yang perlu Anda pastikan adalah pengkodean koneksi antara PHP dan MySQL diatur ke utf8mb4 . Jika disetel ke utf8 , MySQL tidak akan mendukung semua karakter. Anda menyetel penyandian koneksi ini menggunakan mysql_set_charset() , charset PDO Parameter koneksi DSN atau metode lain apa pun yang sesuai untuk API database pilihan Anda.
mb_internal_encoding cukup setel nilai default untuk $encoding parameter semua mb_* fungsi memiliki. Ini tidak ada hubungannya dengan MySQL.
UTF-8 dan UTF-32 berbeda dalam cara mengkodekan karakter. UTF-8 menggunakan minimum dari 1 byte untuk satu karakter dan maksimal 4. UTF-32 selalu menggunakan 4 byte untuk setiap karakter. UTF-16 menggunakan minimal 2 byte dan maksimal 4.
Karena panjang variabelnya, UTF-8 memiliki sedikit overhead. Karakter yang dapat dikodekan dalam 2 byte dalam UTF-16 mungkin membutuhkan 3 atau 4 dalam UTF-8; di sisi lain, UTF-16 tidak pernah menggunakan kurang dari 2 byte. Jika Anda menyimpan banyak teks Asia, UTF-16 mungkin menggunakan lebih sedikit penyimpanan. Jika sebagian besar teks Anda adalah bahasa Inggris/ASCII, UTF-8 menggunakan lebih sedikit penyimpanan. UTF-32 selalu menggunakan penyimpanan paling banyak.