• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗的软件工程师

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

MySQL 编码设置详解:解决乱码问题

MySQL 编码设置详解:解决乱码问题

在数据库管理中,字符编码的设置是一个至关重要的环节。特别是在处理多语言数据时,不正确的编码设置可能导致数据存储和检索过程中出现乱码问题。本文将详细介绍如何在MySQL 5.7和MySQL 8.0中正确设置字符编码,以避免乱码问题。

MySQL 5.7中的编码设置

问题再现:命令行操作SQL乱码问题

在MySQL 5.7中,如果未正确设置字符编码,可能会遇到以下错误:

mysql> INSERT INTO t_stu VALUES(1,'张三','男');
ERROR 1366 (HY000): Incorrect string value: '\xD5\xC5\xC8\xFD' for column 'sname' at row 1

但是在MySQL 8.0以上的版本中 上述操作不会报错

问题解决步骤
步骤1:查看当前编码设置

首先,我们需要查看当前MySQL的编码设置:

show variables like 'character_%';
show variables like 'collation_%';

这些命令将显示当前的字符集和排序规则设置。

步骤2:修改配置文件

接下来,我们需要修改MySQL的配置文件my.ini(Windows系统)或my.cnf(Linux系统)。找到文件中的以下部分并进行修改:

[mysql]  #大概在63行左右,在其下添加
... 
default-character-set=utf8  #默认字符集

[mysqld]  # 大概在76行左右,在其下添加
...
character-set-server=utf8
collation-server=utf8_general_ci

注意:建议使用Notepad++等高级文本编辑器进行修改,避免使用记事本等软件,因为它们可能会将文件编码修改为“含BOM头”的编码,从而导致服务重启失败。

步骤3:重启MySQL服务

修改配置文件后,需要重启MySQL服务以使更改生效。

步骤4:再次查看编码设置

重启服务后,再次执行以下命令查看编码设置:

show variables like 'character_%';
show variables like 'collation_%';

如果设置正确,您将看到类似以下的输出:

+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

如果配置正确,您可以继续创建数据库和数据表,并添加包含中文的数据。

MySQL 8.0中的编码设置

在MySQL 8.0中,默认字符集已经从latin1改为utf8mb4,这大大减少了乱码问题的发生。utf8mb4是utf8的超集,支持更多的字符,包括Emoji表情符号。

默认编码设置

在MySQL 8.0中,您无需手动修改配置文件,因为默认的编码设置已经足够应对大多数情况。您可以通过以下命令查看当前的编码设置:

show variables like 'character_%';
show variables like 'collation_%';

如果输出显示utf8mb4作为默认字符集和排序规则,那么您无需进行任何更改。

特殊情况下的编码设置

尽管MySQL 8.0的默认设置已经非常完善,但在某些特殊情况下,您可能仍然需要手动调整编码设置。例如,如果您从旧版本的数据库迁移数据,或者需要与特定编码的系统进行交互,您可能需要手动设置编码。

在这种情况下,您可以参考MySQL 5.7中的步骤,修改配置文件并重启服务。

总结

正确设置MySQL的字符编码是确保数据存储和检索过程中不出现乱码问题的关键。在MySQL 5.7中,您需要手动修改配置文件并重启服务;而在MySQL 8.0中,默认的编码设置已经非常完善,大多数情况下无需手动调整。通过本文的指导,您可以轻松解决MySQL中的乱码问题,确保数据的一致性和完整性。

posted on 2024-11-12 20:09  周政然  阅读(447)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3