首页 > 数据库 >MySQL批量修改数据表编码及字符集为utf8mb4

MySQL批量修改数据表编码及字符集为utf8mb4

时间:2024-01-29 09:33:05浏览次数:24  
标签:set NAME utf8mb4 数据库 character 数据表 MySQL TABLE

utf8mb4编码是utf8编码的超集,兼容utf8,并且能存储4字节的表情字符。 

采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。

更改数据库的编码为utf8mb4:

1. MySQL的版本

utf8mb4的最低mysql版本支持版本为5.5.3+,若不是,请升级到较新版本。

2. MySQL驱动

utf8mb4编码最低版本是5.1.34可用,低于5.1.13版本不能使用

3.查看配置

注:建议直接使命令连接数据库,最好不要使Navicat等具连接,不然查出的结果不准确。

SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%';

 通过以上命令查看变量值,查询结果如下

 

 

 

通过结果,虽然collation_connection 、collation_database 、collation_server是什么没关系。

但必须保证以下几个变量必须是utf8mb4。

character_set_client (客户端来源数据使用的字符集)
character_set_connection (连接层字符集)
character_set_database (当前选中数据库的默认字符集)
character_set_results (查询结果字符集)
character_set_server (默认的内部操作字符集)

 

4.修改MySQL配置文件

修改mysql配置文件my.cnf(windows 是 my.ini),找到后请在以下三部分里添加如下内容: 

复制代码
[client]
default-character-set = utf8mb4

[mysql]
default-character-set = utf8mb4

[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_bin
init_connect='SET NAMES utf8mb4'
复制代码

 

配置完成之后,重启数据库,检查变量,再次执行命令,可以看到变量值已修改

SHOW VARIABLES WHERE VARIABLE_NAME LIKE 'character_set_%' OR VARIABLE_NAME LIKE 'collation%';

 

5. 数据库连接的配置

数据库连接参数中: 

characterEncoding=utf8会被自动识别为utf8mb4,也可以不加这个参数,会自动检测。 
而autoReconnect=true是必须加上的。

 

6. 将数据库和已经建好的表也转换成utf8mb4

6.1 修改数据库编码

ALTER DATABASE db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

6.2 修改表编码

执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改编码和字符集的SQL, 然后复制出来,批量执行就好了。

SELECT CONCAT("ALTER TABLE `", TABLE_NAME,"` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA="数据库表名"
AND TABLE_TYPE="BASE TABLE"

警告:数据库中数据量比较大时,不建议这样做,因为会很卡。

6.3 修改列的编码

 执行以下的SQL,把数据库名改为自己的数据库名称,执行后的结果集就是修改列编码和字符集的SQL, 然后复制出来,批量执行就好了。

SELECT CONCAT("ALTER TABLE `", TABLE_SCHEMA, "`.`", TABLE_NAME, "` MODIFY COLUMN ", COLUMN_NAME, " ", COLUMN_TYPE, "  CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;") AS target_tables
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA="数据库表名"
AND CHARACTER_SET_NAME IS NOT NULL;

警告:数据库中数据量比较大时,不建议这样做,因为会很卡。

6.4 生成外键

SELECT
concat("ALTER TABLE ",TABLE_NAME, " ADD CONSTRAINT ", CONSTRAINT_NAME," FOREIGN KEY (", COLUMN_NAME,") REFERENCES ", REFERENCED_TABLE_NAME,"(", REFERENCED_COLUMN_NAME, "); ") AS target_tables
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = '数据库表名';

 

6.5 删除外键

SELECT
concat("ALTER TABLE ",TABLE_NAME, " DROP FOREIGN KEY ", CONSTRAINT_NAME, "; ") AS target_tables
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = '数据库表名';

 

标签:set,NAME,utf8mb4,数据库,character,数据表,MySQL,TABLE
From: https://www.cnblogs.com/todarcy/p/17993824

相关文章

  • MySQL导入数据小技巧:在不影响业务的前提下,如何平稳迁移数据?
    MySQL导入数据小技巧:在不影响业务的前提下,如何平稳迁移数据?生产案例:产品经理要求把B库里的表迁移到A库里。问:在不影响业务的前提下,如何平稳迁移数据?答:可以做限速,以每秒1MB的速度导入数据,这样CPU和磁盘IO不受影响。shell>pv-a-q-t-L1mtest1.sql|mysql-S/tmp/mysql.sock-......
  • mysqldump备份
     mysql备份:backup_dir='/data/backup/mysql'database_name='dbname'bak_save_days=7dd=`date+%Y-%m-%d-%H-%M-%S`if[!-d$backup_dir];thenmkdir-p$backup_dirfimysqldump--defaults-extra-file=/etc/mypass.txt--flush-logs--single......
  • logstash实现Mysql(Tidb)数据到Elasticsearch数据迁移(增量同步)
    1、下载Logstash和Elasticsearch,需要版本一致,本次使用版本均为7.8.0版本[root@zjkdata]#llelasticsearch-7.8.0-linux-x86_64.tar.gzlogstash-7.8.0.tar.gz-rw-r--r--.1rootroot31911256112月2815:39elasticsearch-7.8.0-linux-x86_64.tar.gz-rw-r--r--.1rootroo......
  • k8s之helm部署mysql集群
    一、简介HelmHelm是Kubernetes的包管理器。ChartHelm使用的包格式称为chart。chart存储在ChartRepository。chart就是一个描述Kubernetes相关资源的文件集合。单个chart可以用来部署一些简单的,类似于memcachepod,或者某些复杂的HTTP服务器以及web全栈应用、数据库、缓......
  • Mysql数据库更新RedHat/CentOS 从 8.0.14 到 8.0.33,又从8.0.33更新到8.0.35
    sudosystemctlstartmysqldFirstlyweneedbackupalldatabasedataintonewfile,IuseTestPortal.sql/data/VMs_Share/Homes/bell-bash-4.2$mysqldump-uroot-p--databasesTestPortal>TestPortal.sqlEnterpassword:-bash-4.2$2.downloadtheve......
  • MySQL 事务详解
    在数据库中,事务是一组操作单元,它们被视为一个独立的工作单元,要么完全执行,要么完全不执行。MySQL提供了强大的事务支持,允许开发者以一致的方式管理数据库操作。1.事务基础首先,我们需要了解事务的基础概念。一个事务通常包括以下几个关键特性:原子性(Atomicity):事务中的所有操作......
  • GOLAND 中 使用GORM ,出现 未发现“mysql”driver
    错误描述:sql:unknowndriver"mysql"(forgottenimport?)panic:runtimeerror:invalidmemoryaddressornilpointerdereference 解决过程:1、清除缓存2、添加包import_"github.com/go-sql-driver/mysql"_(下划线)用于导入包但不使用它的情况。......
  • MySQL 8.0.26 新增参数 group_replication_view_change_uuid
    MySQL8.0.26新增参数group_replication_view_change_uuidGreatSQL[root@localhost][test]>showglobalvariableslike'group_replication_view_change_uuid';+------------------------------------+-----------+|Variable_name|V......
  • MySQL的CHAR、VARCHAR、TEXT等字符串字段在等值比较("=")时,会忽略掉尾部的空格,导致有空
    一、现象CREATETABLE`user_info`(`id`BIGINT(20)UNSIGNEDNOTNULLAUTO_INCREMENTCOMMENT'主键自增ID',`user_name`VARCHAR(64)NOTNULLDEFAULT''COMMENT'名字',PRIMARYKEY(`id`),KEY`idx_user_name`(`user_name`))E......
  • mysql连接报错:The server time zone value '�й���׼ʱ��'
    java.sql.SQLException:Theservertimezonevalue'�й���׼ʱ��'isunrecognizedorrepresentsmorethanonetimezone.YoumustconfigureeithertheserverorJDBCdriver(viatheserverTimezoneconfigurationproperty)touseamorespecifctimez......