The Oracle mysql client has an odd behavior if your server uses latin1 as default character-set-server.
Command
mysql --version
mysql Ver 8.0.31-0ubuntu0.20.04.2 for Linux on x86_64 ((Ubuntu))
mysql --default-character-set utf8mb4 -e "SHOW VARIABLES LIKE '%char%';"
Expectation
utf8mb4 will be used as character set in this session.
Reality
The mysql client falls back to latin1:
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+----------------------------------------------+
Explanation
The client can't handle the --default-character-set utf8mb4 command line option and falls back to the servers default character set. You could use --default-character-set utf8 and
set the character set
Show archive.org snapshot
inside the session to circumvent this behavior.
Better solutions
Use MariaDB mysql client
The MariaDB mysql client handles the --default-character-set option correct:
mysql --version
mysql Ver 15.1 Distrib 10.3.37-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
mysql --default-character-set utf8mb4 -e "SHOW VARIABLES LIKE '%char%';"
+--------------------------+----------------------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | latin1 |
| character_set_system | utf8 |
+--------------------------+----------------------------------------------+
Switch the servers character set
Both mysql clients will use the servers default character set. If you configure your server to use utf8mb4 even Oracles mysql can handle utf8mb4.
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci