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.