Использование utf8mb4 в MySQL

для использования 4-байтового utf8mb4 в MySQL (5.6.11) я установил следующие переменные в (my.cnf не нашел). Этот файл находится в скрытой папке с именем Application Data (C:Documents and SettingsAll UsersApplication DataMySQLMySQL Server 5.6) в Windows XP. Он недоступен в каталоге установки.

[client]
port=3306
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4

и после этого выполнить следующую команду

SHOW VARIABLES
WHERE Variable_name
LIKE 'character_set_%'
OR Variable_name LIKE 'collation%';

по-прежнему отображается следующий список.

enter image description here

из самой картины, это ясно что несколько переменных все еще используют 3-byte utf8.


перед этим была выпущена следующая команда для внесения соответствующих изменений в саму базу данных.

ALTER DATABASE database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

и следующая команда также была выпущена для каждой таблицы в указанной базе данных.

ALTER TABLE table_name
CONVERT TO CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;

тем не менее, почему некоторые переменные еще не были установлены в указанный набор символов, а также параметры сортировки? Что не хватает?

сама система (операционная система) была перезапущена после выполнения каждой задачи, указанной выше.

4 ответов


на клиент обычно устанавливает эти значения при подключении. Настройки в моем.ini-это просто значения по умолчанию, которые применяются, когда клиент явно не указывает кодировку соединения. Поскольку они ненадежны, каждый клиент должны указать кодировку соединения. Поскольку у вас есть какой-то причудливый скриншот, я предполагаю, что вы подключаетесь к какой-то утилите GUI, которая, вероятно, явно тут установите некоторые кодировки соединений.

PHP пример установки кодировки соединения:

new PDO('mysql:host=localhost;charset=utf8mb4')

Если вы покажете свои глобальные переменные, вы можете увидеть, что все ваши настройки верны на самом деле.

SHOW GLOBAL VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';

Это может быть связано с этим ошибка Я также столкнулся с той же проблемой в прошлом. Я изменил кодировку БД с utf8 на utf8mb4. Выполнение запросов непосредственно из командной строки mysql было в порядке, но у меня была проблема с вставкой emojis с Workbench. Я закончил настройку вручную, запустив

SET NAMES 'utf8mb4'

каждый раз, когда я откройте соединение с моей БД с Workbench.

используя Продолжение Pro в качестве альтернативы было хорошо.


Я думаю, что вы подключаетесь как root, отсюда init-connect='SET NAMES utf8mb4' не исполнено.

неразумно использовать root (или SUPER) для любого кода приложения; только для административных действий.


на win7

  1. используйте" win + R "и введите" услуги.msc"

  2. найти службу mysql

  3. проверяем путь к файлу. Он скажет вам, где мой.ini

  4. откройте и добавьте некоторые свойства:

    [клиент] по умолчанию-набор символов = utf8mb4

    [mysql] по умолчанию-набор символов = utf8mb4

    [mysqld] набор символов-клиент-рукопожатие = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci

  5. перезапустите службу mysql