在运行转储的SQL文件时,成功运行,试了很多办法都不显示出表。
原因:当从一个高版本的 MySQL 数据库导入数据到低版本的 MySQL 数据库时,可能会遇到兼容性问题。因为高版本的 MySQL 可能支持 utf8mb4_0900_ai_ci,而低版本可能不支持。这种情况下,就会出现字符集和排序规则不匹配的问题。
为了解决这一问题,有两种主要的方法:
1. 使用一致的数据库版本:这是最理想的解决方案,因为这样可以确保字符集和排序规则的兼容性。然而,这在实际操作中可能并不总是可行的,特别是在大型项目或跨多个环境的开发中。
2. 修改字符集和排序规则:如果我们不能更改数据库版本,那么另一种方法就是修改 SQL 中的字符集和排序规则。具体来说,我们可以在 SQL 脚本中找到所有使用 utf8mb4_0900_ai_ci 的地方,并将其替换为 utf8mb4_general_ci。这样做的原因是,utf8_general_ci 是一种更通用的排序规则,被大多数 MySQL 版本所支持。
这里我把SQL文件中的所有的utf8mb4_0900_ai_ci替换为utf8mb4_general_ci。
下面是一个示例:
-- 原始 SQL
DROP TABLE IF EXISTS `app_feedback`;
CREATE TABLE `app_feedback` (
`id` int NOT NULL AUTO_INCREMENT,
`record_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`mode` int NOT NULL,
`theme` int NOT NULL,
`content` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`file_list` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`add_time` datetime(6) NOT NULL,
`user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL,
`device_info` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '{}',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 96 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
-- 修改后的 SQL
DROP TABLE IF EXISTS `app_feedback`;
CREATE TABLE `app_feedback` (
`id` int NOT NULL AUTO_INCREMENT,
`record_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`mode` int NOT NULL,
`theme` int NOT NULL,
`content` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`file_list` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`add_time` datetime(6) NOT NULL,
`user_id` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,
`device_info` varchar(512) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '{}',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 96 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
注意字符集和排序规则。