Soru başlığının da belirttiği gibi, Wordpress'in MySQL karakter kümeleri ve harmanlama seçenekleriyle nasıl çalıştığını anlamaya çalışıyorum. Aşağıda göstereceğim gibi, işler benim için pek mantıklı değil ...
Wordpress'i kurulum sayfalarındaki talimatları izleyerek yükledim:
https://codex.wordpress.org/Installing_WordPress
Talimatların bir parçası olarak, komut satırında MySQL veritabanının manuel olarak oluşturulmasına ilişkin tavsiyelerini, yani komutları takip ettim:
mysql> CREATE DATABASE databasename;
Query OK, 1 row affected (0.00 sec)
mysql> GRANT ALL PRIVILEGES ON databasename.* TO "wordpressusername"@"hostname"
-> IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)
mysql> EXIT
Ayrıca, talimat verildiği gibi, UTF-8 karakter setini kullanmak için "wp-config.php" dosyasını düzenledim:
define( 'DB_CHARSET', 'utf8' );
... ve harmanlama ayarını boş bıraktı:
define( 'DB_COLLATE', '' );
İşte eğlence burada başlıyor ...
MySQL UTF-8'in parçası olmayan, ancak 𝌆 gibi UTF-8 MB4'ün bir parçası olan bir karakteri bir gönderiye girersem, işlenen sayfada doğru olarak görünür. Karakter setini UTF-8 MB4 olarak ayarlamamıştım, ancak daha kısıtlı UTF-8'i (tabii ki MySQL tarafından tanımlandığı gibi, genel olarak anlaşılmadığı gibi) bunun olmasını beklemezdim.
Komut satırında MySQL'de sorunu araştırırsam, garipleşir. Çalıştırırsam
show variables like 'char%';
şu yanıtı alırım:+--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+
Ben latin1 değil, UTF-8 olarak ayarlanan veritabanı karakter beklerdim.
Komutu çalıştırırsam
show variables like 'collation%';
çıktı:+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+
Bu, daha açık nedenlerden ötürü daha da garip (UTF-8 veritabanında varsayılan latin1_swedish_ci harmanlamasını beklemezdim).
- Son olarak, çalıştırırsam
show full columns from mywpdatabase.wp_posts;
, değerin NULL olmadığı çıktı satırları, harmanlamayı şu şekilde gösterir:
| post_content_filtered | longtext | utf8mb4_unicode_ci |
O zaman sorum - bu nasıl açıklanabilir? Wordpress kurulumum, veritabanı yapılandırmada UTF-8 olarak tanımlandığında neden UTF-8 MB4 karakterlerini doğru şekilde oluşturuyor? Ve veritabanı neden MySQL'de UTF-8 yerine latin1, isveç harmanlaması olarak gösteriliyor? Ve buna rağmen, buna rağmen, tablodaki bireysel alanlar utf8mb4_unicode_ci? Wordpress'in MySQL ile çalışma biçiminin düşük seviyeli açıklaması çok yardımcı olacaktır. Teşekkür ederim!