解决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: 'xE5xAEx8BxE8x94x9A...' 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/ |    +--------------------------+----------------------------+

                                   

Revid AI Revid AI

AI短视频生成平台

Revid AI 96 查看详情 Revid AI

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: 'xE5xAEx8BxE8x94x9A...' 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会出现中文乱码问题的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1032681.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
如何在macbook air上安装Windows系统?
上一篇 2025年12月2日 03:33:26
BMI是什么?一文读懂
下一篇 2025年12月2日 03:33:29

相关推荐

  • mysql函数中可以用游标吗

    mysql函数中可以用游标。在mysql中,游标只能用于存储过程和函数;存储过程或函数中的查询有时会返回多条记录,而使用简单的SELECT语句,没有办法得到第一行、下一行或前十行的数据,这时可以使用游标来逐条读取查询结果集中的记录。使用游标可以对检索出来的数据进行前进或者后退操作,主要用于交互式应用…

    2026年8月30日
    100
  • cmd中怎么停止mysql服务

    cmd中怎么停止mysql服务cmd中怎么停止mysql服务cmd中怎么停止mysql服务cmd中怎么停止mysql服务

    cmd中停止mysql服务的方法:1、使用快捷键“win+R”打开“运行”窗口,在输入框中输入“cmd”并回车,打开cmd窗口;2、在cmd窗口中,执行“net stop mysql”命令,如果输出“MySQL服务已成功停止”信息,则表示停止服务成功。 本教程操作环境:windows7系统、mysq…

    2026年8月30日 用户投稿
    100
  • 如何解决Laravel项目中的图片优化问题?使用spatie/laravel-image-optimizer可以!

    可以通过一下地址学习composer:学习地址 在处理 laravel 项目时,图片优化是一个不可忽视的问题。用户上传的图片可能格式各异,如何高效地优化这些图片,减少存储空间并提高网站加载速度,是一个棘手的挑战。尝试了多种方法后,我找到了 spatie/laravel-image-optimizer…

    用户投稿 2026年8月30日
    000
  • Tailwind CSS变体失效:为什么焦点状态下的样式未生效?

    Tailwind CSS变体失效排查:解决焦点状态样式覆盖问题 在使用Tailwind CSS时,我们经常利用变体(variants)来创建条件样式。然而,有时变体效果不如预期,尤其是在处理焦点状态(:focus)时。本文分析一个案例,解释为什么hocus变体在按钮获得焦点时未能应用自定义样式,并提…

    2026年8月30日
    000
  • 港媒报道:云迹科技“AI智能体+机器人”服务闭环成果显著

    第二季度市场氛围高涨,国际长线资金积极布局优质资产,港股ipo热度持续,尤其是宁德时代、恒瑞医药等明星股的带动,使得融资活跃度显著提升,多只新股涨幅亮眼。随着市场情绪升温,企业赴港上市步伐加快,6月27日当天,共有16家内地企业向港交所递交申请材料,其中科技类企业占比高达10家。数据显示,截至目前,…

    2026年8月30日
    000
  • mysql中触发器是什么

    在mysql中,触发器是存储在数据库目录中的一组SQL语句,每当与表相关联的事件发生时,即会执行或触发触发器,例如插入、更新或删除。触发器与数据表关系密切,主要用于保护表中的数据;特别是当有多个表具有一定的相互联系的时候,触发器能够让不同的表保持数据的一致性。在MySQL中,只有执行INSERT、U…

    2026年8月30日
    100
  • NVIDIA App 测试版发布!耕升教你如何轻松上手

    NVIDIA App 测试版发布!耕升教你如何轻松上手NVIDIA App 测试版发布!耕升教你如何轻松上手NVIDIA App 测试版发布!耕升教你如何轻松上手NVIDIA App 测试版发布!耕升教你如何轻松上手

    2024年2月22日晚上10点,nvidia发布了nvidiaapp测试版。这一应用将取代geforce experience,为玩家和内容创作者提供新的工具,助力他们的生活。搭载英伟达geforce rtx显卡的电脑性能将得到全面提升。 各位用户现在只需前往 NVIDIA 官网,即可轻松下载该 A…

    2026年8月30日 用户投稿
    100
  • Tailwind CSS自定义变体失效了,为什么我的hover效果没生效?

    Tailwind CSS自定义变体失效的排查与解决 Tailwind CSS的自定义变体功能十分强大,但有时会遇到失效的情况。本文通过一个案例分析,讲解自定义变体失效的常见原因及解决方法。 案例:开发者尝试创建一个自定义变体,用于在元素悬停时改变文本颜色。在tailwind.config.js中定义…

    2026年8月30日
    000
  • 卢伟冰:小米将推出首款AI PC产品

    小米发布首款ai pc,续航强劲可登机!小米集团总裁卢伟冰在2月22日晚的小米15 ultra爆料直播中重磅宣布,小米将推出其首款ai个人电脑产品。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 这款AI PC的一大亮点是其搭载的99Wh超…

    2026年8月30日
    100
  • mysql的长整型是什么

    mysql的长整型是“BIGINT”。BIGINT是ab字节或64位整数值,在存储极大整数值时非常有用。BIGINT与其他整数数据类型一样,可以是有符号或无符号的;有符号数据类型表示该列可以存储正整数和负整数值,而无符号数据类型表示该列只能存储正整数值。有符号BIGINT类型的范围在“-922337…

    2026年8月30日
    100
  • MySQL和Redis的区别有哪些

    区别:1、MySQL是关系型数据库;而Redis是非关系型数据库。2、MySQL用于持久化存储数据到硬盘,功能强大,但是速度缓慢;而Redis用于存储使用较为频繁的数据到缓存中,读取速度快。3、MySQL的数据存放在磁盘中;而Redis的数据存放在内存中。4、MySQL常用数据类型有数值、日期/时间…

    2026年8月30日
    100
  • Ubuntu命令行下MySQL数据导出与导入语句

    你知道Ubuntu命令行下的MySQL数据的导出与导入吗?下文是小编整理的在Ubuntu命令行下数据库导入导出的方法,一起来学习一下吧! mysqldump -h主机 -u用户名 -p 数据库名 > 导出的数据库名.sql 几个比较常用的参数有:-p或–port          …

    用户投稿 2026年8月30日
    000
  • React中Promise和箭头函数大括号:异步操作的返回值为何不同?

    react异步操作中promise与箭头函数大括号的差异 本文探讨React中使用Promise和箭头函数时,大括号的使用如何影响异步操作的返回值。 核心问题在于箭头函数的隐式返回机制。 我们以get函数为例,对比两种不同的实现方式: 正确写法 (隐式返回): get: () => new P…

    2026年8月30日
    100
  • mysql默认引擎是什么

    MySQL5.5之前,默认引擎是“MyISAM”;从MySQL5.5版本开始,默认引擎是“InnoDB”,该引擎完全支持符合ACID和事务,支持外键、提交、回滚、前滚操作,表的大小最高可达64TB。在MySQL中,可以使用“SHOW ENGINES;”命令查看系统所支持的引擎类型以及默认引擎;输出结…

    2026年8月30日
    000
  • mysql怎么查询两个字段的值

    mysql怎么查询两个字段的值mysql怎么查询两个字段的值mysql怎么查询两个字段的值mysql怎么查询两个字段的值

    在mysql中,可以通过SELECT语句来查询两个字段的值,查询语法为“SELECT 字段名1,字段名2 FROM 数据表名 [WHERE子句];”。SELECT语句可以获取多个字段下的数据,只需要在关键字SELECT后面指定要查找的字段名称,不同字段名称之间用逗号“,”分隔开即可;而“WHERE子…

    2026年8月30日 用户投稿
    000
  • mysql管理工具有哪些

    mysql管理工具有哪些mysql管理工具有哪些mysql管理工具有哪些mysql管理工具有哪些

    mysql管理工具有:1、Induction,是一款用于理解数据关系的开源管理工具;2、Pinba,是一种MySQL存储引擎工具;3、DB Ninja,是一款基于Web的MySQL数据库管理与开发应用程序;4、DBManager,是一款功能强大的数据管理应用程序;5、MyWebSQL,可管理基于We…

    2026年8月30日 用户投稿
    000
  • mysql怎么取字符串前几位

    mysql怎么取字符串前几位mysql怎么取字符串前几位mysql怎么取字符串前几位mysql怎么取字符串前几位

    3种提取方法:1、使用SUBSTRING()函数,可从字符串头部开始截取指定长度的子字符串,语法“UBSTRING(字符串,1,子串长度)”。2、使用left()函数,可从字符串开头截取指定长度的子字符串并返回,语法“LEFT(字符串,子串长度)”。3、使用substr()函数,可从字符串开头截取指…

    2026年8月30日 用户投稿
    300
  • deepseek创始人是谁

    DeepSeeK的创始人梁文锋是人工智能领域的专家,拥有量化投资和机器学习技术背景。梁文锋于2002年考入浙江大学,2010年获硕士学位。在校期间,他带领团队使用机器学习进行量化交易。2013年,梁文锋与同学创立杭州幻方科技,专注于量化投资。2023年,梁文锋正式进军通用人工智能领域,创办了Deep…

    2026年8月30日
    100
  • 麦芒40手机详细参数曝光:内置双AI 支持卫星通信

    中国电信官方此前宣布将推出新一代麦芒ai手机。最新消息显示,中国电信麦芒40手机上市暨星小辰终端智能体发布会定于6月25日14:30正式开启。cnmo了解到,已经有数码博主提前透露了麦芒40的详细参数信息。 麦芒40 据透露,麦芒40内置小艺与电信星小辰双AI系统,能够实时分析通话内容,有效防范电信…

    2026年8月30日
    000
  • Async/await和.then混合使用时,如何避免异步操作未完成就跳出循环?

    Async/await和.then并发执行的陷阱及解决方案 在使用async/await和.then处理异步任务时,常常会遇到一个棘手的问题:await后的代码执行完毕,async函数就提前返回,导致后续的.then代码未执行完成。本文将深入分析此问题,并提供有效的解决方案。 问题场景:假设父组件使…

    2026年8月30日
    000

发表回复

登录后才能评论
关注微信