MySQL'de Linux sunucularında tüm bağlantı vb.. ayarları UTF-8 yapılsa dahi veritabanına Türkçe karakterler ? ile ekleniyor olabilir. Bu durumun çözülmesi için MySQL'in server ayarlarını değiştirmek gerekir.
SHOW VARIABLES LIKE 'character%';
ve
SHOW VARIABLES LIKE 'collation%';
Komutlarıyla mysql'de character_set ve collation değişkenlerinin varsayılan değerlerinin ne olduğu kontrol edilebilir. Örneğin MySQL 5.5 versiyonu için aşağıdaki bilgiler gelmektedir
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
mysql> SHOW VARIABLES LIKE 'collation%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | utf8_general_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
Türkçe karakterlerin ? işareti şeklinde eklenmesini engellemek için /etc içindeki my.conf dosyasındaki [mysqld] bölümün altına iki satır eklemek gerekir (character_set_server ve collation-server ifadeleri farklı mysql versyonlarında değişik olabilir. Yukarıdaki sorguyla kontrol ediniz) :
[mysqld]
...
character_set_server=utf8
collation-server = utf8_general_ci
my.conf değiştirdikten sonra mysql'i restart etmeniz gerekmektedir.
Bu değişiklikten sonra ? işareti ile yazma problemi çözülecektir.