Я пытаюсь преобразовать свою БД в utf8mb4
следование этому руководству . Я установил:
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init-connect='SET NAMES utf8mb4'
collation_server=utf8mb4_unicode_ci
character_set_server=utf8mb4
skip-character-set-client-handshake
Но значение character_set_client
и character_set_results
все равно не изменится до utf8mb4.
mysql> SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%';
+--------------------------+--------------------+
| Variable_name | Value |
+--------------------------+--------------------+
| character_set_client | utf8 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| collation_connection | utf8mb4_unicode_ci |
| collation_database | utf8mb4_unicode_ci |
| collation_server | utf8mb4_unicode_ci |
+--------------------------+--------------------+
Что я делаю неправильно? Как мне получить эти значения в utf8mb4?
\xampp\mysql\bin\my.ini
. Мне не удалось запуститьmysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
- так как это выдает следующую ошибку:'grep' is not recognized as an internal or external command, operable program or batch file.
я новичок в этом, поэтому я могу что-то делать не так.skip-character-set-client-handshake
в вашем конфигурационном файле? Это опция командной строки, а не переменная.character_set_client
,character_set_connection
,character_set_results
,collation_connection
показано какutf8
. Есть идеи, почему это не работает?Я также следовал этому руководству, однако та же проблема появилась снова. Фактическая проблема заключается в команде, используемой для создания БД в
DEFAULT CHARACTER
качестве аргумента, и если она не передается во время выполнения, передается набор символов по умолчанию, а это не такutfmb4
.Ниже приведены шаги, которые я выполнил, чтобы исправить это:
Создайте фиктивную базу данных с
utf8mb4
набором символов.Скопировать фактическую структуру и данные в эту фиктивную базу данных из фактической базы данных
mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy
Удалить текущую базу данных
Создать новую базу данных
Наконец, поместите структуру таблицы и данные обратно в исходную базу данных.
mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name
Если вы собираетесь использовать вышеупомянутую процедуру, пожалуйста, внимательно прочитайте также нижеприведенные строки.
Предпосылки и мой статус-кво:
mysql --version
mysql Ver 14.14 Distrib 5.7.22, для Linux (x86_64) с использованием оболочки EditLinecat /etc/my.cnf
Я использую Java-клиент, который
'mysql:mysql-connector-java:5.1.30'
jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
источник