Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

UTF-8 sepenuhnya

Penyimpanan Data :

  • Tentukan utf8mb4 set karakter pada semua tabel dan kolom teks di database Anda. Ini membuat MySQL secara fisik menyimpan dan mengambil nilai yang dikodekan secara asli di UTF-8. Perhatikan bahwa MySQL secara implisit akan menggunakan utf8mb4 encoding jika utf8mb4_* susunan ditentukan (tanpa set karakter eksplisit).

  • Di versi MySQL yang lebih lama (<5.5.3), sayangnya Anda terpaksa hanya menggunakan utf8 , yang hanya mendukung subset karakter Unicode. Saya berharap saya bercanda.

Akses Data :

  • Dalam kode aplikasi Anda (misalnya PHP), dalam metode akses DB apa pun yang Anda gunakan, Anda harus menyetel rangkaian karakter koneksi ke utf8mb4 . Dengan cara ini, MySQL tidak melakukan konversi dari UTF-8 aslinya saat menyerahkan data ke aplikasi Anda dan sebaliknya.

  • Beberapa driver menyediakan mekanisme mereka sendiri untuk mengonfigurasi kumpulan karakter koneksi, yang memperbarui status internalnya sendiri dan menginformasikan MySQL tentang pengkodean yang akan digunakan pada koneksi—ini biasanya merupakan pendekatan yang lebih disukai. Dalam PHP:

    • Jika Anda menggunakan PDO lapisan abstraksi dengan PHP 5.3.6, Anda dapat menentukan charset di DSN :

       $dbh = new PDO('mysql:charset=utf8mb4');
      
    • Jika Anda menggunakan mysqli , Anda dapat memanggil set_charset() :

        $mysqli->set_charset('utf8mb4');       // object oriented style
        mysqli_set_charset($link, 'utf8mb4');  // procedural style
      
    • Jika Anda terjebak dengan mysql biasa tetapi kebetulan menjalankan PHP 5.2.3, Anda dapat memanggil mysql_set_charset .

  • Jika driver tidak menyediakan mekanismenya sendiri untuk menyetel kumpulan karakter koneksi, Anda mungkin harus mengeluarkan kueri untuk memberi tahu MySQL bagaimana aplikasi Anda mengharapkan data pada koneksi dikodekan:SET NAMES 'utf8mb4' .

  • Pertimbangan yang sama mengenai utf8mb4 /utf8 berlaku seperti di atas.

Keluaran :

  • Jika aplikasi Anda mengirimkan teks ke sistem lain, mereka juga perlu diberi tahu tentang pengkodean karakter. Dengan aplikasi web, browser harus diberi tahu tentang penyandian di mana data dikirim (melalui header respons HTTP atau metadata HTML ).

  • Di PHP, Anda dapat menggunakan default_charset php.ini, atau secara manual mengeluarkan Content-Type Header MIME sendiri, yang hanya lebih berfungsi tetapi memiliki efek yang sama.

  • Saat menyandikan output menggunakan json_encode() , tambahkan JSON_UNESCAPED_UNICODE sebagai parameter kedua.

Masukan :

  • Sayangnya, Anda harus memverifikasi setiap string yang diterima sebagai UTF-8 yang valid sebelum Anda mencoba menyimpannya atau menggunakannya di mana saja. mb_check_encoding() PHP melakukan trik, tetapi Anda harus menggunakannya secara religius. Benar-benar tidak ada jalan lain, karena klien jahat dapat mengirimkan data dalam penyandian apa pun yang mereka inginkan, dan saya belum menemukan trik untuk membuat PHP melakukan ini untuk Anda dengan andal.

  • Dari bacaan saya tentang spesifikasi HTML saat ini , sub-poin berikut tidak diperlukan atau bahkan tidak valid lagi untuk HTML modern. Pemahaman saya adalah bahwa browser akan bekerja dengan dan mengirimkan data dalam set karakter yang ditentukan untuk dokumen. Namun, jika Anda menargetkan versi HTML yang lebih lama (XHTML, HTML4, dll.), poin ini mungkin masih berguna:

    • Hanya untuk HTML sebelum HTML5 :Anda ingin semua data yang dikirimkan kepada Anda oleh browser berada di UTF-8. Sayangnya, jika Anda menggunakan satu-satunya cara untuk melakukan ini dengan andal adalah menambahkan accept-charset atribut ke semua <form> . Anda tag:<form ... accept-charset="UTF-8"> .
    • Hanya untuk HTML sebelum HTML5 :perhatikan bahwa spesifikasi HTML W3C mengatakan bahwa klien "harus" secara default mengirim formulir kembali ke server dalam rangkaian karakter apa pun yang disajikan server, tetapi ini tampaknya hanya rekomendasi, oleh karena itu perlu eksplisit pada setiap <form> tanda.

Pertimbangan Kode Lainnya :

  • Cukup jelas, semua file yang akan Anda sajikan (PHP, HTML, JavaScript, dll.) harus dikodekan dalam UTF-8 yang valid.

  • Anda perlu memastikan bahwa setiap kali Anda memproses string UTF-8, Anda melakukannya dengan aman. Sayangnya, ini adalah bagian yang sulit. Anda mungkin ingin memanfaatkan secara ekstensif mbstring ekstensi.

  • Operasi string bawaan PHP tidak secara default UTF-8 aman. Ada beberapa hal yang dapat Anda lakukan dengan aman dengan operasi string PHP normal (seperti penggabungan), tetapi untuk sebagian besar hal, Anda harus menggunakan mbstring yang setara fungsi.

  • Untuk mengetahui apa yang Anda lakukan (baca:jangan mengacaukannya), Anda benar-benar perlu mengetahui UTF-8 dan cara kerjanya pada level serendah mungkin. Lihat salah satu tautan dari utf8.com untuk beberapa sumber daya yang bagus untuk mempelajari semua yang perlu Anda ketahui.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. QUARTER() Contoh – MySQL

  2. Fungsi MySQL POW() – Meningkatkan Nilai ke Kekuatan Nilai Lain

  3. GALAT 1045 (28000):Akses ditolak untuk pengguna 'root'@'localhost' (menggunakan kata sandi:YA)

  4. Jalur Pembelajaran MySQL

  5. Menemukan nilai duplikat di MySQL