Использование 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%';
по-прежнему отображается следующий список.
из самой картины, это ясно что несколько переменных все еще используют 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
используйте" win + R "и введите" услуги.msc"
найти службу mysql
проверяем путь к файлу. Он скажет вам, где мой.ini
-
откройте и добавьте некоторые свойства:
[клиент] по умолчанию-набор символов = utf8mb4
[mysql] по умолчанию-набор символов = utf8mb4
[mysqld] набор символов-клиент-рукопожатие = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci
перезапустите службу mysql