Saya memiliki ini sebelumnya di koneksi mysql_ * normal saya:
mysql_set_charset("utf8",$link);
mysql_query("SET NAMES 'UTF8'");
Apakah saya membutuhkannya untuk PDO? Dan di mana saya harus memilikinya?
$connect = new PDO("mysql:host=$host;dbname=$db", $user, $pass, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
Jawaban:
Anda akan memilikinya di string koneksi Anda seperti:
NAMUN, sebelum PHP 5.3.6, opsi charset diabaikan. Jika Anda menjalankan versi PHP yang lebih lama, Anda harus melakukannya seperti ini:
sumber
Sebelum PHP 5.3.6, opsi charset diabaikan. Jika Anda menjalankan versi PHP yang lebih lama, Anda harus melakukannya seperti ini:
sumber
Ini mungkin cara paling elegan untuk melakukannya.
Tepat di panggilan konstruktor PDO, tetapi menghindari opsi charset buggy (seperti yang disebutkan di atas):
Bekerja bagus untukku.
sumber
array(1002 => 'SET NAMES utf8',...)
.charset=utf8
di string dsn bekerja! Saya mencoba memecahkan masalah ini di groups.google.com/d/msg/auraphp/syMS26Rz-q8/9laQr9tR4EoJUntuk kelengkapan, sebenarnya ada tiga cara untuk mengatur pengkodean saat menghubungkan ke MySQL dari PDO dan mana yang tersedia tergantung pada versi PHP Anda. Urutan preferensi adalah:
charset
parameter dalam string DSNSET NAMES utf8
denganPDO::MYSQL_ATTR_INIT_COMMAND
opsi koneksiSET NAMES utf8
secara manualKode contoh ini mengimplementasikan ketiganya:
Melakukan ketiganya mungkin berlebihan (kecuali jika Anda menulis kelas Anda berencana untuk mendistribusikan atau menggunakan kembali).
sumber
Saya hanya ingin menambahkan bahwa Anda harus memastikan bahwa database Anda dibuat dengan COLLATE utf8_general_ci atau yang mana saja yang ingin Anda gunakan, jika tidak, Anda mungkin berakhir dengan yang lain dari yang dimaksudkan.
Di phpmyadmin Anda dapat melihat susunan dengan mengklik basis data Anda dan memilih operasi. Jika Anda mencoba membuat tabel dengan susunan lain dari basis data Anda, maka meja Anda akan berakhir dengan susunan basis data.
Jadi pastikan pemeriksaan untuk database Anda benar sebelum membuat tabel. Semoga ini bisa menyelamatkan seseorang beberapa jam lagi
sumber
Saya pikir Anda memerlukan permintaan tambahan karena opsi charset di DSN sebenarnya diabaikan. lihat tautan yang diposting di komentar dari jawaban lain.
Melihat bagaimana Drupal 7 melakukannya di http://api.drupal.org/api/drupal/includes--database--mysql--database.inc/function/DatabaseConnection_mysql%3A%3A__3truktur/7 :
sumber
sumber
sumber
Saya menguji kode ini dan
sumber
$ con = new PDO ("mysql: host = $ dbhost; dbname = $ database; charset = $ encoding ", "$ dbuser", "$ dbpassword");
sumber