数据库还原不保留表情符号
Database restore does not retain emojis
我正在像这样进行简单的数据库备份和恢复:
SCHEMA=${2:-mindlevel}
DB_HOST=
mysqldump -uroot -ppassword -h$DB_HOST --default-character-set=utf8mb4 --complete-insert --no-create-info $SCHEMA -r ${SCHEMA}_backup.sql
mysqladmin -uroot -ppassword -h$DB_HOST -f drop $SCHEMA &&
mysql -uroot -ppassword -h$DB_HOST --default-character-set=utf8mb4 < ${SCHEMA}_schema.sql &&
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set0=utf8mb4 < ${SCHEMA}_backup.sql
但是我在恢复之前拥有的所有表情符号都显示为?,但如果我再次输入表情符号,它会正确存储和显示。
我试过 --default-character-set=utf8 但结果相同。
更新:
SHOW CREATE TABLE user;
CREATE TABLE `user` (
`username` varchar(191) NOT NULL,
`description` varchar(1024) DEFAULT NULL,
`image` varchar(191) DEFAULT 'user.jpg',
`score` int(11) DEFAULT 0,
`level` int(11) DEFAULT 0,
`created` bigint(20) NOT NULL,
`last_active` bigint(20) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
备份文件:
file mindlevel_backup.sql
mindlevel_backup.sql: UTF-8 Unicode text, with very long lines
mindlevel_backup.sql
的顶部:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=
有什么想法吗?
table 中的列也需要声明 CHARACTER SET utf8mb4
。请提供 SHOW CREATE TABLE
和 backup.sql
的第一部分。
解决办法是换一根线。
来自:
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set=utf8mb4 < ${SCHEMA}_backup.sql
收件人:
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set=utf8mb4 -e "SET NAMES utf8mb4; SOURCE"${SCHEMA}"_backup.sql;"
我不知道为什么会这样,所以如果有人想向我解释一下,我会更新答案。
我正在像这样进行简单的数据库备份和恢复:
SCHEMA=${2:-mindlevel}
DB_HOST=
mysqldump -uroot -ppassword -h$DB_HOST --default-character-set=utf8mb4 --complete-insert --no-create-info $SCHEMA -r ${SCHEMA}_backup.sql
mysqladmin -uroot -ppassword -h$DB_HOST -f drop $SCHEMA &&
mysql -uroot -ppassword -h$DB_HOST --default-character-set=utf8mb4 < ${SCHEMA}_schema.sql &&
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set0=utf8mb4 < ${SCHEMA}_backup.sql
但是我在恢复之前拥有的所有表情符号都显示为?,但如果我再次输入表情符号,它会正确存储和显示。
我试过 --default-character-set=utf8 但结果相同。
更新:
SHOW CREATE TABLE user;
CREATE TABLE `user` (
`username` varchar(191) NOT NULL,
`description` varchar(1024) DEFAULT NULL,
`image` varchar(191) DEFAULT 'user.jpg',
`score` int(11) DEFAULT 0,
`level` int(11) DEFAULT 0,
`created` bigint(20) NOT NULL,
`last_active` bigint(20) DEFAULT NULL,
PRIMARY KEY (`username`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
备份文件:
file mindlevel_backup.sql
mindlevel_backup.sql: UTF-8 Unicode text, with very long lines
mindlevel_backup.sql
的顶部:
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=
有什么想法吗?
table 中的列也需要声明 CHARACTER SET utf8mb4
。请提供 SHOW CREATE TABLE
和 backup.sql
的第一部分。
解决办法是换一根线。 来自:
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set=utf8mb4 < ${SCHEMA}_backup.sql
收件人:
mysql -uroot -ppassword -h$DB_HOST $SCHEMA --default-character-set=utf8mb4 -e "SET NAMES utf8mb4; SOURCE"${SCHEMA}"_backup.sql;"
我不知道为什么会这样,所以如果有人想向我解释一下,我会更新答案。