วิธีกำหนดค่าชุดอักขระทั่วโลกบน MySQL


12

ฉันพยายามเปลี่ยนชุดอักขระสำหรับ MySQL ของเราผ่านmy.cnfและล้มเหลว ฉันได้เพิ่มการตั้งค่าชุดอักขระตามด้านล่าง:

# The MySQL server
[mysqld]
port            = 3306
socket          = /var/lib/mysql/mysql.sock
skip-locking
key_buffer = 16M
max_allowed_packet = 1M
table_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M

# ------------- MYSQL CHARSETS --------------
character_set_system = utf8
character_set_server = utf8
character_set_results = utf8
character_set_database = utf8
character_set_connection = utf8
character_set_client = utf8

collation_connection = utf8_general_ci
collation_database = utf8_general_ci
collation_server = utf8_general_ci

เมื่อฉันเปิดใช้งานสิ่งเหล่านี้ MySQL ไม่สามารถเริ่มต้นได้ ฉันจะแน่ใจได้อย่างไรว่าทุกอย่างเป็นค่าเริ่มต้นเป็น utf8 - เสมอ

ปรับปรุง

ยังมีอีกไม่กี่ที่ที่มีปัญหาในการเป็น UTF8

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/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

น่าเสียดายที่ฉันยังไม่ได้รับโซลูตรอน ... คิดอะไรบ้าง?

ขณะนี้ฉันใช้การกำหนดค่านี้เรียบร้อยแล้ว:

[mysqld]
default-character-set = utf8
init-connect='SET NAMES utf8'
character-set-server = utf8


[mysql]
default-character-set = utf8

แต่ PHPMyAdmin ยังคงแสดงภาษาละตินอยู่บ้าง

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/
collation_connection    utf8_general_ci
collation_database  latin1_swedish_ci
collation_server    latin1_swedish_ci

คำตอบ:


23

คุณต้องรวมสิ่งต่อไปนี้ในไฟล์ my.cnf ของคุณ

[client]
default-character-set=utf8

[mysql]
default-character-set=utf8


[mysqld]
default-character-set = utf8    
collation-server = utf8_general_ci
init-connect='SET NAMES utf8'
character-set-server = utf8

คุณสามารถค้นหาข้อมูลเพิ่มเติมได้จากหน้าคู่มือต่อไปนี้

ในการตอบสนองต่อคำตอบของ Mark หากคุณต้องการแปลงตาราง / ฐานข้อมูลที่มีอยู่เป็นชุดอักขระที่ถูกต้องคุณจะต้องใช้ALTERแบบสอบถามที่เหมาะสม สิ่งที่คล้ายกับด้านล่าง:

ALTER TABLE `table` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

อีกวิธีหนึ่งคือมีสคริปต์ PHP ที่ดีที่นี่ซึ่งไม่ได้สำหรับคุณ


ฉันได้ทำตามคำแนะนำของคุณแล้วและตรวจสอบลิงก์เอกสาร ... ยังมีปัญหาเล็กน้อย (ดู ^)

เมื่อใดก็ตามที่ฉันเพิ่มลงcollation-server = utf8_general_ciในmysqldส่วน mysql ล้มเหลวในการรีสตาร์ท

คุณสามารถดูสิ่งที่อยู่ในไฟล์บันทึกได้หรือไม่? ควรให้ข้อความแสดงข้อผิดพลาดถึงสาเหตุว่าทำไมจึงล้มเหลว ฉันคิดว่า mysqld ของคุณถูกคอมไพล์ด้วยชุดอักขระทั่วไป utf8 ที่รวมอยู่ด้วยหรือไม่?

ใช่ฉันคิดว่ามันเป็น ... ไฟล์บันทึกใด

1
ทำงานได้สำหรับฉัน (Debian 8, MySQL 5.5) ยกเว้นdefault-character-set = utf8บรรทัดใต้[mysqld]หัวข้อ การเพิ่มบรรทัดอย่างมากทำให้ mysqld ใช้เวลานานในการรีสตาร์ท อย่างไรก็ตามการรองรับ Unicode นั้นใช้งานได้ดีแม้ไม่มีสายนี้
Bass

2

คำตอบของเบ็นก็โอเค แต่การเปลี่ยนการตั้งค่าจะไม่เปลี่ยนชุดอักขระหรือการเรียงตัวของตารางที่มีอยู่เดิม ทำด้วยคำสั่ง ALTER TABLE ที่เหมาะสม

โปรดทราบว่าหากคุณไม่ได้ระบุตารางจะถูกสร้างขึ้นในชุดอักขระเริ่มต้นของฐานข้อมูล นี่คือการตั้งค่าต่อฐานข้อมูลซึ่งสามารถปรับได้ด้วย ALTER DATABASE นี่ยังไม่ได้ตั้งใน my.cnf


1
ฐานข้อมูลใหม่จะสืบทอดการตั้งค่า mysql เริ่มต้นใช่ไหม
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.