Saya sering melihat sesuatu yang mirip di bawah ini di skrip PHP menggunakan MySQL
query("SET NAMES utf8");
Saya belum pernah melakukan ini untuk proyek apa pun, jadi saya punya beberapa pertanyaan dasar tentang itu.
- Apakah ini sesuatu yang dilakukan hanya dengan PDO?
- Kalau bukan spesifik PDO, lalu apa tujuannya? Saya menyadari itu adalah pengaturan pengkodean untuk mysql tapi maksud saya, saya tidak pernah menggunakannya jadi mengapa saya ingin menggunakannya?
Jawaban:
Ini diperlukan kapan pun Anda ingin mengirim data ke server yang memiliki karakter yang tidak dapat direpresentasikan dalam ASCII murni, seperti 'ñ' atau 'ö'.
Bahwa jika instance MySQL tidak dikonfigurasi untuk mengharapkan encoding UTF-8 secara default dari koneksi klien (banyak, tergantung pada lokasi dan platform Anda.)
Baca http://www.joelonsoftware.com/articles/Unicode.html jika Anda tidak mengetahui cara kerja Unicode.
Baca Apakah akan menggunakan "SET NAMA" untuk melihat SET NAMES alternatif dan tentang apa sebenarnya itu.
sumber
SET NAMES UTF8
?SELECT
pernyataan.Dari manual :
Lebih rumit lagi, (dan sekali lagi, diambil secara serampangan dari manual ):
sumber
Melakukan encoding dengan benar sangat sulit - ada terlalu banyak lapisan:
Perintah SQL "SET CHARSET utf8" dari PHP akan memastikan bahwa sisi klien (PHP) akan mendapatkan data di utf8, tidak peduli bagaimana mereka disimpan dalam database. Tentu saja, mereka perlu disimpan dengan benar terlebih dahulu.
Definisi DDL vs. data nyata
Pengkodean yang ditentukan untuk tabel / kolom tidak berarti bahwa data berada dalam pengkodean itu. Jika Anda kebetulan memiliki tabel yang didefinisikan sebagai
utf8
tetapi disimpan sebagai pengkodean yang berbeda, maka MySQL akan memperlakukannya sebagaiutf8
dan Anda dalam masalah. Artinya Anda harus memperbaiki ini dulu.Apa yang harus diperiksa
Anda perlu memeriksa pengkodean aliran data di setiap lapisan.
Pastikan ada orang yang tepat di mana-mana.
Konversi
Jika Anda menerima data misalnya
windows-1250
, dan ingin menyimpannyautf-8
, gunakan SQL ini sebelum menyimpan:Jika Anda memiliki data di DB sebagai
windows-1250
dan ingin mengambilutf8
, gunakan:Beberapa catatan lagi:
sumber
Query ini harus ditulis sebelum query yang membuat atau memperbarui data dalam database, query ini terlihat seperti:
Perhatikan bahwa Anda harus menulis penyandian yang Anda gunakan di tajuk misalnya jika Anda menggunakan utf-8 Anda menambahkannya seperti ini di tajuk atau itu akan menimbulkan masalah dengan Internet Explorer
jadi halaman Anda terlihat seperti ini
sumber
Solusinya adalah
sumber
Alih-alih melakukan ini melalui kueri SQL, gunakan fungsi php: mysqli :: set_charset mysqli_set_charset
dari http://www.php.net/manual/en/mysqli.set-charset.php
sumber
Terima kasih semuanya!
jangan gunakan: query ("SET NAMES utf8"); ini adalah hal-hal penyiapan dan bukan kueri. luruskan setelah koneksi dimulai dengan setCharset () (atau metode serupa)
beberapa hal kecil di parctice:
status:
Menyimpan dan membaca data tidak masalah selama mysql dapat menangani karakternya. jika Anda melihat di db Anda akan melihat ada omong kosong di dalamnya (misalnya menggunakan phpmyadmin).
sampai sekarang ini tidak menjadi masalah! (salah tapi sering berhasil (di eropa)) ..
..kecuali klien / program lain atau pustaka yang diubah, yang berfungsi dengan benar, akan membaca / menyimpan data. maka kamu dalam masalah besar!
sumber
Tidak hanya PDO. Jika sql menjawab seperti '????' simbol, preset charset Anda (harap UTF-8) sangat direkomendasikan:
atau melalui gaya prosedur
mysqli_set_charset($db,"utf8")
sumber