Kejadian ini saya alami ketika melakukan restore data komentar pengguna di salah satu postingan blog. Kebetulan pengguna tersebut menggunakan karakter dari Rusia untuk penamaan nicknamenya, sehingga yang terjadi adalah ketika data masuk ke database hasilnya seperti ini.

Yup, berubah menjadi tanda tanya, kenapa bisa begitu? ternyata setelah saya pelajari, masalahnya terletak pada pengaturan "COLLATION" database & tabel pada phpmyadmin yang masih default (latin1_swedish_ci), al hasil karakter khusus seperti Arabic & Russian alphabet seketika berubah jadi tanda tanya semua (????).
Solusi
Saya merubah pengaturan default (latin1_swedish_ci) menjadi utf8_general_ci dengan cara merubah charset ke utf8 via query SQL console di phpMyadmin. Berikut codenya:
ALTER TABLE `your_table_name` CHANGE `your_column_name` `
Hasilnya special character / symbol seperti Greek alphabet dapat ditampilkan. Overview seperti gambar di bawah, sedangkan aktualnya ada di tautan berikut INI.

Penjelasan
Karakter default yang ditetapkan untuk MySQL pada (mt) Media Temple adalah latin1, dengan kumpulan standar latin1_swedish_ci. Ini adalah jenis pengkodean umum untuk karakter Latin. Anda juga dapat mengubah pengkodean. utf8 adalah set karakter umum untuk karakter non-Latin.
Anda dapat mengubah set karakter collation basis data dan tabel Anda melalui menu "Operations" phpMyAdmin atau dari baris perintah. Caranya:
- Masuk ke phpMyAdmin.
- Pilih database Anda dari daftar di sebelah kiri.
- Klik pada "Operations" dari set tab teratas.
- Di kotak Collation, gunakan menu dropdown untuk memilih utf8_general_ci
- Klik Go
- Lakukan hal yang sama untuk tabel-tabel Anda yang sekiranya perlu.


Command Line
Masuk ke MySQL dengan SSH:
mysql -u admin -p`cat /etc/psa/.psa.shadow`
Masukkan kata sandi basis data Anda saat diminta.
Cek ketersediaan set karakter menggunakan perintah berikut.
mysql> show character set;
+----------+-----------------------------+---------------------+--------+
| Charset | Description | Default collation | Maxlen |
+----------+-----------------------------+---------------------+--------+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| utf8 | UTF-8 Unicode | utf8_general_ci | 3 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| binary | Binary pseudo charset | binary | 1 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+----------+-----------------------------+---------------------+--------+
Jalankan perintah berikut untuk mengubah set karakter dan pemeriksaan database Anda:
ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
Jalankan perintah berikut untuk mengubah set karakter dan pemeriksaan tabel Anda:
ALTER TABLE tablename CHARACTER SET utf8 COLLATE utf8_general_ci;
Tentang utf8_general_ci
utf8_unicode_ci menggunakan Algoritma Collode Unicode standar, mendukung apa yang disebut ekspansi dan ligatures, misalnya: Surat Jerman ß (U + 00DF SURAT SHARP S) disortir dekat "ss" Surat Œ (U + 0152 LATIN MODAL LIGATURASI OE) disortir dekat " OE ".
Pada standar umum yang berlaku, character set utf8 mampu menampung semua jenis karakter yang ada di dunia ini, mulai dari karakter 1 byte, seperti pada latin1, hingga 4 byte seperti pada huruf Arab, China, dll
Pada MySQL, character set utf8, dengan collation defaultnya utf8_general_ci, hanya mampu menampung character dengan ukuran 1 s.d 3 byte dan belum dapat menampung karakter berukuran 4 byte.
Untuk penggunaan space, utf8 pada MySQL menggunakan ruang secara dinamis, untuk karakter dengan ukuran 1 byte, maka ruang yang diperlukan juga 1byte, tidak seperti utf32 yang menggunakan ruang penyimpanan 2 byte.
Referensi