Próbuję przekonwertować moją bazę danych utf8mb4
zgodnie z tym przewodnikiem . Mam ustalone:
[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
Ale wartość character_set_client
i character_set_results
nadal nie zmieni się na 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 |
+--------------------------+--------------------+
Co ja robię źle? Jak ustawić te wartości na utf8mb4?
\xampp\mysql\bin\my.ini
. Nie mogłem uruchomićmysqld --help --verbose 2> /dev/null | grep -A1 'Default options'
- ponieważ daje następujący błąd:'grep' is not recognized as an internal or external command, operable program or batch file.
jestem nowy w tych sprawach, więc mogę robić coś złego.skip-character-set-client-handshake
w swoim pliku konfiguracyjnym? Jest to opcja wiersza polecenia, a nie zmienna.character_set_client
,character_set_connection
,character_set_results
,collation_connection
jest pokazany jakoutf8
. Wszelkie pomysły, dlaczego to nie działa?Postępowałem również zgodnie z tym przewodnikiem, jednak ten sam problem pojawił się ponownie. Rzeczywisty problem leży w poleceniu użytym do utworzenia bazy danych jako
DEFAULT CHARACTER
argumentu, a jeśli nie zostanie on przekazany podczas wykonywania, zostanie przekazany domyślny zestaw znaków, który nie zostanie przekazanyutfmb4
.Poniżej znajdują się kroki, które wykonałem, aby to naprawić:
Utwórz obojętną bazę danych z
utf8mb4
zestawem znaków.Skopiuj aktualną strukturę i dane do tej sztucznej bazy danych z rzeczywistej bazy danych
mysqldump -uroot -proot_password your_db_name | mysql -uroot -proot_password your_db_name_dummy
Upuść bieżącą bazę danych
Utwórz nową bazę danych
Na koniec umieść strukturę tabeli i dane z powrotem w oryginalnej bazie danych
mysqldump -uroot -proot_password your_db_name_dummy | mysql -uroot -proot_password your_db_name
Jeśli zamierzasz skorzystać z wyżej wymienionej procedury, pamiętaj również o uważnym przeczytaniu poniższych linii.
Wymagania wstępne i mój status quo:
mysql --version
mysql Ver 14.14 Distrib 5.7.22, dla Linux (x86_64) przy użyciu opakowania EditLinecat /etc/my.cnf
Używam klienta Java, który jest
'mysql:mysql-connector-java:5.1.30'
jdbc:mysql://ip.of.database:3306/your_db_name?zeroDateTimeBehavior=convertToNull&noAccessToProcedureBodies=true&autoReconnect=true
źródło