Як налаштувати глобальну схему на 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 все ще показує латинську1

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

Додаткову інформацію можна знайти на наступних сторінках керівництва

У відповідь на відповідь Марка, якщо вам потрібно перетворити існуючі таблиці / бази даних у правильний набір символів, вам знадобиться відповідний 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, однак, чудово працює навіть без цієї лінії.
Бас

2

Відповідь Бена в порядку, але зміна налаштувань АБСОЛЮТНО НЕ змінить наявні набори символів або зіставлення таблиць. Зробіть це за допомогою відповідного оператора ALTER TABLE.

Зауважте, що якщо не вказати, таблиці створюються в наборі символів бази даних за замовчуванням. Це налаштування на базу даних, яке можна регулювати за допомогою ALTER DATABASE. Це також не встановлено в my.cnf.


1
Нові бази даних успадкують налаштування mysql за замовчуванням, правда?
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.