给个sql,mysql5.7 把当前数据库所有表的编码改为utf8mb4 utf8mb4_general_ci
时间: 2023-08-23 19:06:22 浏览: 145
MySQL 编码utf8 与 utf8mb4 utf8mb4_unicode_ci 与 utf8mb4_general_ci
5星 · 资源好评率100%
### 回答1:
以下是在 MySQL 5.7 中将数据库中所有表的编码更改为 utf8mb4 和 utf8mb4_General_ci 的 SQL 语句:
```
SET SESSION sql_mode='NO_AUTO_VALUE_ON_ZERO';
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
DECLARE @table_name VARCHAR(255);
DECLARE @sql_stmt VARCHAR(1000);
DECLARE @collation VARCHAR(100) DEFAULT 'utf8mb4_general_ci';
DECLARE @character_set VARCHAR(100) DEFAULT 'utf8mb4';
DECLARE cursor_tables CURSOR FOR
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE()
AND table_type = 'BASE TABLE';
OPEN cursor_tables;
FETCH NEXT FROM cursor_tables INTO @table_name;
WHILE @@FETCH_STATUS = 0
DO
SET @sql_stmt = 'ALTER TABLE `' + @table_name + '` CONVERT TO CHARACTER SET ' + @character_set + ' COLLATE ' + @collation + ';';
PREPARE stmt FROM @sql_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
FETCH NEXT FROM cursor_tables INTO @table_name;
END WHILE;
CLOSE cursor_tables;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET SQL_MODE=@OLD_SQL_MODE;
```
请注意,在执行此操作之前,请务必备份数据库,以防意外。
### 回答2:
要将当前数据库中所有表的编码改为utf8mb4 utf8mb4_general_ci,可以按照以下步骤进行操作:
1. 首先,登录到MySQL数据库服务器。
2. 在mysql命令行界面或者任何支持执行SQL语句的MySQL客户端中,使用以下命令切换到当前数据库:
```sql
USE your_database_name;
```
请将`your_database_name`替换为你想要操作的数据库名称。
3. 接下来,查询当前数据库中所有表的名称:
```sql
SELECT table_name
FROM information_schema.tables
WHERE table_schema = DATABASE();
```
4. 将查询结果中的表名复制到下面的SQL语句中:
```sql
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
请将`table_name`替换为实际的表名。
5. 重复步骤4,对每个表执行SQL语句,将其编码改为utf8mb4 utf8mb4_general_ci。
6. 在改动了表的编码后,还需要对表中的列、索引、约束等对象进行相应的更改。可以使用以下SQL语句对每个表的每个列执行相同的操作:
```sql
ALTER TABLE table_name MODIFY column_name column_type CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
```
请将`table_name`替换为实际的表名,`column_name`替换为实际的列名,`column_type`替换为实际的列类型。
至此,你已经成功将当前数据库中所有表的编码改为utf8mb4 utf8mb4_general_ci。请注意,执行这种操作可能会导致部分数据丢失或者出现乱码,所以在执行操作之前建议先进行数据库备份。
### 回答3:
在MySQL 5.7中,可以通过以下SQL语句将当前数据库中所有表的编码改为utf8mb4 utf8mb4_general_ci:
```
ALTER DATABASE `数据库名称` CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;
SELECT CONCAT('ALTER TABLE `', table_name, '` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') AS 'SQL语句'
FROM information_schema.tables
WHERE table_schema = '数据库名称'
AND table_type = 'BASE TABLE';
```
请将上述SQL语句中的`数据库名称`替换为实际要修改的数据库名称。
以上SQL语句首先将当前数据库的默认编码修改为utf8mb4 utf8mb4_general_ci,然后通过查询`information_schema.tables`视图获取当前数据库中所有表的名称,并生成相应的`ALTER TABLE`语句来修改每个表的编码为utf8mb4 utf8mb4_general_ci。
执行以上SQL语句后,就可以将当前数据库中所有表的编码成功改为utf8mb4 utf8mb4_general_ci。
阅读全文