เป็นชื่อคำถามที่แนะนำฉันต้องการเข้าใจว่า Wordpress ทำงานกับชุดอักขระของ MySQL และตัวเลือกการเรียงหน้าอย่างไร อย่างที่ฉันจะแสดงด้านล่างสิ่งต่าง ๆ ไม่สมเหตุสมผลกับฉัน ...
ฉันติดตั้ง Wordpress โดยทำตามคำแนะนำในหน้าการติดตั้ง:
https://codex.wordpress.org/Installing_WordPress
เป็นส่วนหนึ่งของคำแนะนำฉันทำตามคำแนะนำของพวกเขาสำหรับการสร้างฐานข้อมูล MySQL บน commandline คือคำสั่ง:
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
นอกจากนี้ตามคำแนะนำฉันแก้ไขไฟล์ "wp-config.php" เพื่อใช้ชุดอักขระ UTF-8:
define( 'DB_CHARSET', 'utf8' );
... และปล่อยให้การตั้งค่าการเรียงหน้าว่างเปล่า:
define( 'DB_COLLATE', '' );
ที่นี่คือที่ที่ความสนุกเริ่มต้น ...
หากฉันป้อนอักขระที่ไม่ได้เป็นส่วนหนึ่งของ MySQL UTF-8 แต่เป็นส่วนหนึ่งของ UTF-8 MB4 เช่น𝌆ลงในโพสต์มันจะแสดงขึ้นอย่างถูกต้องในหน้าที่แสดงผล ฉันคาดหวังว่าสิ่งนี้จะไม่เกิดขึ้นเพราะฉันไม่ได้ตั้งค่าชุดอักขระเป็น UTF-8 MB4 แต่เป็น UTF-8 ที่ จำกัด มากขึ้น (ตามที่กำหนดโดย MySQL แน่นอนไม่เป็นที่เข้าใจกันโดยทั่วไป)
หากฉันตรวจสอบปัญหาใน MySQL บน commandline ก็จะได้รับแปลก ถ้าฉันวิ่ง
show variables like 'char%';
ฉันจะได้รับการตอบสนองนี้:+--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+
ฉันคาดว่าจะมีการตั้งค่าอักขระฐานข้อมูลเป็น UTF-8 ไม่ใช่ latin1
หากฉันรันคำสั่ง
show variables like 'collation%';
เอาต์พุตคือ:+----------------------+-------------------+ | Variable_name | Value | +----------------------+-------------------+ | collation_connection | utf8_general_ci | | collation_database | latin1_swedish_ci | | collation_server | latin1_swedish_ci | +----------------------+-------------------+
นั่นเป็นแม้แต่คนแปลกหน้าด้วยเหตุผลที่ชัดเจน (ไม่คาดว่าจะมีการจัดเรียง latin1_swedish_ci เริ่มต้นในฐานข้อมูล UTF-8)
- ในที่สุดถ้าฉันเรียกใช้
show full columns from mywpdatabase.wp_posts;
บรรทัดเอาต์พุตที่ค่าไม่เป็น NULL ให้แสดงการเรียงเป็น:
| post_content_filtered | longtext | utf8mb4_unicode_ci |
คำถามของฉัน - จะอธิบายได้อย่างไร? ทำไม Wordpress ของฉันติดตั้งอย่างถูกต้องแสดงอักขระ UTF-8 MB4 เมื่อฐานข้อมูลถูกกำหนดเป็น UTF-8 ในการกำหนดค่า และทำไมฐานข้อมูลที่แสดงใน MySQL เป็นลาติน 1, การจัดเรียงภาษาสวีเดนแทน UTF-8 และทำไมถึงเป็นเช่นนั้นถึงแม้ว่าจะมีทั้งหมดนี้แต่ละเขตข้อมูลในตารางคือ utf8mb4_unicode_ci? คำอธิบายระดับต่ำเกี่ยวกับวิธีที่ Wordpress ทำงานกับ MySQL จะมีประโยชน์มาก ขอบคุณ!