我每天都会在 Linux 14.04 上的 mysql 5.5.62 上使用以下命令备份我的 wiki 数据库
/usr/bin/mysqldump -u root my_wiki > wiki.`date +"%m-%d-%Y_%T"`.sql
当我将转储还原到同一台机器时,还原成功。 但是当我将转储还原到新的 ubuntu 20.04 框时,我在此表中看到以下内容。
mysql> select user_name from user;
+------------------------------------------+
| user_name |
+------------------------------------------+
| 0x412E706172646F |
| 0x4162656C2E6564756172646F |
| 0x4164616D2E676F746368 |
| 0x416C6578616E6465722E6275646E6576696368 |
它应该看起来像
mysql> select user_name from user;
--------------
select user_name from user
--------------
+---------------------+
| user_name |
+---------------------+
| A.bardo |
| Abel.smith |
| Adam.Mo |
| Alexander.bud |
那么,我在这里没有得到什么?
答案1
你在那里得到的是十六进制文字。您可以通过在前面添加字符集介绍者像这样:
SELECT _utf8 0x412E706172646F;
这将产生
+------------------------+
| _utf8 0x412E706172646F |
+------------------------+
| A.pardo |
+------------------------+
对于上述查询,您可以分别使用
SELECT _utf8 user_name from user;
至于您的问题。;-)
为了进一步检查此行为,我建议使用以下命令检查数据库连接的字符集
SHOW VARIABLES LIKE '%character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
然后使用以下命令检查两个系统上的数据库的字符集
SHOW CREATE DATABASE `your_db_name`;
它们应该是一样的。