美文网首页
2023.03.13 Mysql 修改表和字段的字符集

2023.03.13 Mysql 修改表和字段的字符集

作者: 薛定谔的猴子 | 来源:发表于2023-03-12 16:51 被阅读0次

如果你想将 mysql 的所有表,以及表的所有字段,都统一改为 utf8mb4_general_ci,你可以参考以下步骤:

一、单表操作

  • 首先,修改数据库的默认字符集为 utf8mb4,并指定排序规则为 utf8mb4_general_ci。你可以使用以下语句:
ALTER DATABASE db_name DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
  • 然后,修改每个表的默认字符集为 utf8mb4,并指定排序规则为 utf8mb4_general_ci。你可以使用以下语句:
ALTER TABLE tbl_name DEFAULT CHARACTER SET utf8mb4COLLATEutf8mb4_general_ci;
  • 最后,修改每个表中的每个字段的字符集为 utf8mb4,并指定排序规则为 utf8mb4_general_ci。你可以使用以下语句:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

注意,这些操作会在字符集中转换列值,如果原来的列值使用的是不兼容的字符集,那么可能会导致数据损坏或乱码。所以,在执行这些操作之前,请务必备份好数据库。

二、批量操作

如果你想批量修改多个表和字段的字符集,你可以利用 information_schema 库中的元数据信息来生成相应的 SQL 语句。例如,如果你想批量修改数据库 db_name 中所有表和字段的字符集为 utf8mb4,并指定排序规则为 utf8mb4_general_ci,你可以使用以下语句:

-- 批量修改所有表的默认字符集
SELECT CONCAT('ALTER TABLE ', table_name, ' DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;') AS _sql FROM information_schema.`TABLES` WHERE TABLE_SCHEMA = 'db_name';

-- 批量修改所有字段的字符集
SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', data_type, '(', character_maximum_length, ') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci', (CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END), ';') AS _sql FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'db_name';

需要注意,批量修改所有字段的字符集,有些结果是空,原因有以下几种:

  • 有些字段的数据类型不是字符型,而是数值型、日期型或其他类型,这些字段没有字符集和排序规则的属性,所以修改字符集的语句会为空。你可以在查询语句中加上一个条件,只选择 character_maximum_length 不为空的字段。

  • 有些字段的字符集和排序规则已经是 utf8mb4 和 utf8mb4_general_ci,所以修改字符集的语句会为空。你可以在查询语句中加上一个条件,只选择 character_set_name 和 collation_name 不等于 utf8mb4 和 utf8mb4_general_ci 的字段。

  • 有些字段的数据类型不支持指定长度,例如 text、blob 等,所以修改字符集的语句会出错。你可以在查询语句中去掉 character_maximum_length 的括号,或者根据不同的数据类型进行判断。

如果上述三种情况的条件和判断都加入到一个语句中,如下:

SELECT CONCAT('ALTER TABLE ', table_name, ' MODIFY ', column_name, ' ', data_type, CASE WHEN data_type IN ('text','blob') THEN '' ELSE CONCAT('(', character_maximum_length ,')') END ,  'CHARACTER SET utf8mb4COLLATE utf8mb4_general_ci ', (CASE WHEN is_nullable = 'NO' THEN ' NOT NULL' ELSE '' END), ';') AS _sql FROM information_schema.`COLUMNS` WHERE TABLE_SCHEMA = 'db_name' AND character_maximum_length IS NOT NULL AND character_set_name <> 'utf8mb4' AND collation_name <> 'utf8mb4_general_ci';

执行后得到的就是修改数据库中所有表和字段字符集的语句,然后复制这些语句执行就可以了。

相关文章

  • mysql无法插入中文,设置和修改字符集

    创建数据库设置字符集: 创建表: 修改数据库字符集: 修改表默认字符集:对新字段生效 修改表的字符集:对已有字段生...

  • 存储表情问题--修改表、字段的字符集

    (针对mysql) 能支持存储表情的字符集是utf8mb4。我根据网上资料修改了表和字段的字符集,navicat可...

  • Hive表中文注释乱码问题

    解决desc命令注释中文乱码 修改hive存储在mysql里的元数据相关信息1).修改字段注释字符集 2).修改表...

  • 批量修改MySQL表字符集和排序规则

    目录 一、问题 二、修改字符集 三、修改库字符集和排序规则 四、修改表和字段字符集以及排序规则 1、查询并生成修改...

  • Mysql学习——MySQL数据结构修改(2)

    Mysql表结构操作添加表字段修改表字段删除表字段修改表字段类型修改表名简介:Mysql表结构操作,添加表字段,修...

  • Day16 MySQL基础

    1、DDL 常用数据类型创建表 查看表结构 查看表创建语句 删除表 创建表指定字符集和引擎 修改字段类型 添加字段...

  • MySQL数据库基础之索引技术及字段维护

    MySQL索引和字段修改 1、MySQL索引技术 ①、创建带索引的表 Create table表名(user)( ...

  • mysql支持emoji插入

    通过工具navicat操作。 步骤一、先修改数据库的字符集步骤二、对应表的字符集修改步骤三、对应字段的字符集修改参...

  • MySQL修改字符集

    安装时MySQL默认的字符集是latin1,插入表中的中文会显示异常,所以需要修改字符集。 1、修改Mysql字符...

  • workbench 输入汉字

    alter table 表名 user 字段名 新的字段名 字段的数据类型 字符集 校对规则; 比如,修改表use...

网友评论

      本文标题:2023.03.13 Mysql 修改表和字段的字符集

      本文链接:https://www.haomeiwen.com/subject/niqqrdtx.html