千家信息网

MySQL会出现中文乱码问题怎么办

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,小编给大家分享一下MySQL会出现中文乱码问题怎么办,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!1、MySQL会出现中文乱码的原因当我们在使用MySQL数据库的时候,经常会碰到乱码的问
千家信息网最后更新 2025年01月20日MySQL会出现中文乱码问题怎么办

小编给大家分享一下MySQL会出现中文乱码问题怎么办,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!

1、MySQL会出现中文乱码的原因
当我们在使用MySQL数据库的时候,经常会碰到乱码的问题,看下面的代码。

    mysql> create table test(id int,name varchar(10));Query OK, 0 rows affected (0.01 sec)    mysql> insert into test values(1,'宋蔚然');    ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1    mysql>

相关学习推荐:mysql视频教程

很显然,当插入中文的时候报错,原因在哪呢?

    mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | Variable_name            | Value                      |    +--------------------------+----------------------------+    | character_set_client     | utf8                       |    | character_set_connection | utf8                       |    | character_set_database   | latin1                     |    | character_set_filesystem | binary                     |    | character_set_results    | utf8                       |    | character_set_server     | latin1                     |    | character_set_system     | utf8                       |    | character_sets_dir       | /usr/share/mysql/charsets/ |    +--------------------------+----------------------------+

character_set_client 客户端使用的字符编码
character_set_connection 数据库链接使用的编码
character_set_database 数据库使用的字符编码
原来是字符编码与服务端、数据库的编码不统一而造成的。

2、MySQL会出现中文乱码的解决方法
方法一:设置names

    mysql> set names latin1;        mysql> set names latin1;    Query OK, 0 rows affected (0.00 sec)        mysql> select * from test;    Empty set (0.00 sec)        mysql> insert into test values(1,'宋蔚然');    Query OK, 1 row affected (0.01 sec)        mysql> select * from test;    +------+-----------+    | id   | name      |    +------+-----------+    |    1 | 宋蔚然    |    +------+-----------+    1 row in set (0.00 sec)

再来看一下字符集的设置

     mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | Variable_name            | Value                      |    +--------------------------+----------------------------+    | character_set_client     | latin1                     |    | character_set_connection | latin1                     |    | character_set_database   | latin1                     |    | character_set_filesystem | binary                     |    | character_set_results    | latin1                     |    | character_set_server     | latin1                     |    | character_set_system     | utf8                       |    | character_sets_dir       | /usr/share/mysql/charsets/ |    +--------------------------+----------------------------+

字符编码统一就不会出现乱码。
解决乱码问题其实就是将客户端的字符编码与服务端、数据库的编码统一。这里的服务端与数据库编码都是latin1,所有set names latin1即可临时解决乱码问题。

方法二:修改数据库配置文件字符集为UTF8
UTF8支持很多语言体系,因此在生产中强烈建议将字符编码设置UTF8。打开数据库的配置文件,分别在[client],[mysql],[mysqld]下添加如下内容。

    #vi /mysql/data/3306/my.cnf        [client]    default-character-set=utf8        [mysql]    default-character-set=utf8        [mysqld]    default-storage-engine=INNODB    character-set-server=utf8    collation-server=utf8_general_ci

重启数据库

   [root@test ~]# systemctl restart mysqld

重写创建库和表

    mysql> create database test;    Query OK, 1 row affected (0.00 sec)        mysql> use test;    Database changed    mysql> create table test(id int,name varchar(10));    Query OK, 0 rows affected (0.02 sec)        mysql> insert into test values(1,'宋蔚然');    Query OK, 1 row affected (0.00 sec)        mysql> select * from test;    +------+-----------+    | id   | name      |    +------+-----------+    |    1 | 宋蔚然    |    +------+-----------+    1 row in set (0.00 sec)

再来看一下字符集的设置

    mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | 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/ |    +--------------------------+----------------------------+

undefined

1、MySQL会出现中文乱码的原因
当我们在使用MySQL数据库的时候,经常会碰到乱码的问题,看下面的代码。

    mysql> create table test(id int,name varchar(10));Query OK, 0 rows affected (0.01 sec)    mysql> insert into test values(1,'宋蔚然');    ERROR 1366 (HY000): Incorrect string value: '\xE5\xAE\x8B\xE8\x94\x9A...' for column 'name' at row 1    mysql>

很显然,当插入中文的时候报错,原因在哪呢?

    mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | Variable_name            | Value                      |    +--------------------------+----------------------------+    | character_set_client     | utf8                       |    | character_set_connection | utf8                       |    | character_set_database   | latin1                     |    | character_set_filesystem | binary                     |    | character_set_results    | utf8                       |    | character_set_server     | latin1                     |    | character_set_system     | utf8                       |    | character_sets_dir       | /usr/share/mysql/charsets/ |    +--------------------------+----------------------------+

character_set_client 客户端使用的字符编码
character_set_connection 数据库链接使用的编码
character_set_database 数据库使用的字符编码
原来是字符编码与服务端、数据库的编码不统一而造成的。

2、MySQL会出现中文乱码的解决方法
方法一:设置names

    mysql> set names latin1;        mysql> set names latin1;    Query OK, 0 rows affected (0.00 sec)        mysql> select * from test;    Empty set (0.00 sec)        mysql> insert into test values(1,'宋蔚然');    Query OK, 1 row affected (0.01 sec)        mysql> select * from test;    +------+-----------+    | id   | name      |    +------+-----------+    |    1 | 宋蔚然    |    +------+-----------+    1 row in set (0.00 sec)

再来看一下字符集的设置

     mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | Variable_name            | Value                      |    +--------------------------+----------------------------+    | character_set_client     | latin1                     |    | character_set_connection | latin1                     |    | character_set_database   | latin1                     |    | character_set_filesystem | binary                     |    | character_set_results    | latin1                     |    | character_set_server     | latin1                     |    | character_set_system     | utf8                       |    | character_sets_dir       | /usr/share/mysql/charsets/ |    +--------------------------+----------------------------+

字符编码统一就不会出现乱码。
解决乱码问题其实就是将客户端的字符编码与服务端、数据库的编码统一。这里的服务端与数据库编码都是latin1,所有set names latin1即可临时解决乱码问题。

方法二:修改数据库配置文件字符集为UTF8
UTF8支持很多语言体系,因此在生产中强烈建议将字符编码设置UTF8。打开数据库的配置文件,分别在[client],[mysql],[mysqld]下添加如下内容。

    #vi /mysql/data/3306/my.cnf        [client]    default-character-set=utf8        [mysql]    default-character-set=utf8        [mysqld]    default-storage-engine=INNODB    character-set-server=utf8    collation-server=utf8_general_ci

重启数据库

   [root@test ~]# systemctl restart mysqld

重写创建库和表

    mysql> create database test;    Query OK, 1 row affected (0.00 sec)        mysql> use test;    Database changed    mysql> create table test(id int,name varchar(10));    Query OK, 0 rows affected (0.02 sec)        mysql> insert into test values(1,'宋蔚然');    Query OK, 1 row affected (0.00 sec)        mysql> select * from test;    +------+-----------+    | id   | name      |    +------+-----------+    |    1 | 宋蔚然    |    +------+-----------+    1 row in set (0.00 sec)

再来看一下字符集的设置

    mysql> show variables like '%CHARACTER%';    +--------------------------+----------------------------+    | 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/ |    +--------------------------+----------------------------+

看完了这篇文章,相信你对MySQL会出现中文乱码问题怎么办有了一定的了解,想了解更多相关知识,欢迎关注行业资讯频道,感谢各位的阅读!

编码 字符 数据 数据库 乱码 问题 中文 方法 服务 统一 原因 字符集 客户 文件 时候 配置 代码 体系 内容 客户端 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 国外最安全的服务器 闵行区数据软件开发厂家价格 服务器手机版我的世界指令大全 合肥联想服务器配件服务升级 建筑施工企业网络安全管理制度 软件开发角色职责 seo优化效果与服务器配置 网络安全法不履行三十二 基岩版1.17生存服务器ip 软件开发报价行业标准 概念 数据库技术 oa管理软件开发平台 软件开发中什么是框架 网络技术入门经典微盘 云服务器通过什么管理员密码 互联网未来黑科技 多媒体网络安全防护措施 网络技术窃密 河北web前端软件开发多少钱 局加强节日期间网络安全工作 计算机网络安全本质 江阴多功能软件开发维修电话 上海宝奥龙网络技术有限公司 软件开发角色职责 哪些软件开发适合创业 搭建基于网页的复古游戏服务器 计算机网络安全与控制学科评估 我的世界服务器牛奶 网络安全命令视频 互联网大会黑科技有哪些
0