mysql常用的4种字符集 (mysql数据库字符替换)

之前已经介绍过MySQL字符集(https://www.toutiao.com/article/7202801194354409996/)。今天再来介绍下关于字符集的一些知识点:

MySQL中的字符集有两个级别概念,分别是服务器级别和客户端级别。

1. 服务器级别

服务器字符集指的是服务器用来存储和处理数据的字符集。在MySQL中,可以在启动MySQL服务的时候指定服务器字符集,也可以在配置文件中进行设置。服务器级别的字符集设定主要影响以下内容:

  • 存储字符数据时所采用的字符编码方式;
  • SQL语句中的字符串常量的编码方式;
  • 数据库中表、列名的编码方式。

2. 客户端级别

客户端字符集指的是客户端用来编码和解码数据的字符集。在MySQL中,客户端可以连接多个服务器,每个服务器都可以拥有不同的字符集。客户端级别的字符集设定主要影响以下内容:

  • 连接服务器时采用的字符编码方式;
  • SQL语句中的字符串常量的编码方式;
  • 查询结果返回的字符串的编码方式。

因此,如果服务器和客户端的字符集不同,就可能导致出现乱码或数据不能正常存储和读取等问题。

在实际应用中,我们需要根据数据库设计和应用场景的需要来选择合适的字符集,并注意设置服务器和客户端的字符集,目的是确保所储存和查询的数据的正确无误。

问题解析

测试环境的数据库中有些数据库表的CHARSET=utf8,还有些是CHARSET=utf8mb4。我们期望修改数据库表的CHARSET=uft8mb4。于是执行下面语句:

alter table <表名> character set utf8mb4;

再次查看建表语句时发现,表的DEFAULT CHARSET修改成功,但是字段的CHARSET还是保留原来的utf8。如果想修改表、字段的CHARSET时,应该执行下面语句:

ALTER TABLE <表名> CONVERT TO CHARACTER SET utf8mb4;

避坑 :请大家一定要使用正确的数据库表字符集修改语句。