精华内容
下载资源
问答
  • mysql中文乱码解决
    2021-03-04 00:09:49

    Mysql中文乱码解决方案

    时间:2017-07-11     来源:华清远见JAVA学院

    中文乱码问题一直是我们编程过程中比较常见又让人头疼的问题,但是只要按照标准进行配置,就能很好的避免出现中文乱码问题,今天小编就和大家分享下Mysql中文乱码解决方案。

    b9f9b2d1c1afee5954b75cb890eb7a43.png

    Mysql中文乱码解决方案

    MySQL 4.1的字符集支持(Character Set Support)有两个方面:字符集(Character set)和排序方式(Collation)。对于字符集的支持细化到四个层次: 服务器(server),数据库(database),数据表(table)和连接(connection)。下面将分两部分,分别设置服务器编码和数据库、数据表与连接部分的编码,从而杜绝中文乱码的出现。

    Mysql中文乱码解决第一阶段:服务器编码设置

    服务器编码设置方法有二:

    一是安装mysql时,其中会有一个步骤选择编码方式,此时选择gbk即可。如果不选择,默认的编码是latin1;

    二是在安装玩mysql之后,手动修改其配置文件,如下:

    (1)修改 MySql安装目录下面的my.ini(MySQL Server Instance Configuration 文件)。 设置

    default-character-set=gbk(注意,有2处)

    (2)修改data目录中相应数据库目录下的db.opt配置文件

    default-character-set=gbk

    default-collation=gbk_chinese_ci

    重启数据库,关闭控制台窗口重新登录数据库即可。

    Mysql中文乱码解决第二阶段:数据库、数据表和连接部分的编码设置

    2.1 设置数据库和数据表编码

    要解决乱码问题,首先必须弄清楚数据库和数据表用什么编码。如果没有指明,将是默认的latin1。

    用得多的应该是这3种字符集 gb2312,gbk,utf8。

    如何去指定数据库和数据表的字符集呢?下面也gbk为例:

    【在MySQL Command Line Client创建数据库 】

    mysql> CREATE TABLE `mysqlcode` (

    -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,

    -> `content` VARCHAR( 255 ) NOT NULL

    -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

    Query OK, 0 rows affected, 1 warning (0.03 sec)

    其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

    就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

    当然也可以通过如下指令修改数据库数据表的字符集:

    alter database mysqlcode default character set 'gbk'.

    前面已经设置了服务器、数据库和数据表的编码,那么数据库中的编码便都是gbk,中文可以存储进去。

    但是如果你要通过执行insert或select等操作时,仍然会出现中文乱码问题,这是因为还没设置

    “连接(connection)”部分的编码,而insert、select等数据库操作都包含与数据库的连接动作。如果不信

    ,你现在可以执行下面的sql文试一试:

    mysql> insert into mysqlcode values(null,'java爱好者');

    按回车,结果如下:

    ERROR 1406 (22001): Data too long for column 'content' at row 1

    2.2 设置连接编码

    设置了服务器、数据库和数据表部分的编码,必须设置连接编码。连接编码设置如下:

    mysql> SET character_set_client='gbk';

    mysql> SET character_set_connection='gbk'

    mysql> SET character_set_results='gbk'

    设置好连接编码,下面便可以成功插入中文了:

    mysql> insert into mysqlcode values(null,'java爱好者');

    Query OK, 0 rows affected (0.02 sec)

    其实,上面设置连接编码的三条命令可以简化为一条:

    mysql> set names 'gbk';

    设置好了连接编码后,在select查询时,也能正确显示中文:

    mysql> select * from mysqlcode;

    +----+-----------+

    | id | content |

    +----+-----------+

    | 1 | java爱好着 |

    +----+-----------+

    1 row in set (0.00 sec)

    Mysql中文乱码解决完整示例

    下面将用一个例子完整地将上面的理论演示一遍,后达到能向mysql中插入中文的目的:

    3.1 设置mysql服务器编码

    这一步请参见上文第一节,主要就是在安装mysql之后,修改my.ini和dataTable.db中的编码为gbk

    3.2 创建一个数据库

    先连接到本地数据库:mysql -h localhost -u root -proot,接着创建一个数据库:

    mysql> create database test;

    3.3 创建数据表并设置其编码

    -- 中文编码测试数据表

    use test

    DROP TABLE IF EXISTS `test`.`test_nml`;

    SET @saved_cs_client = @@character_set_client;

    SET character_set_client = gbk;

    CREATE TABLE `test`.`test_nml` (

    `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,

    `content` VARCHAR( 255 ) NOT NULL

    ) ENGINE=InnoDB DEFAULT CHARSET=gbk COMMENT='用户基本信息';

    SET character_set_client = @saved_cs_client;

    这里的红色部分等价于上文中的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

    3.4 插入中文数据

    --插入数据

    SET @saved_cs_client = @@character_set_client;

    set names gbk;

    insert into test_nml values(null,'我是中文');

    注意:每次执行insert或update或select连接操作时,都必须设置编码,即在前面加上:set names 'gbk';

    以上就是Mysql中文乱码解决的基本方法,出现中文乱码问题时,按照以上的步骤一步步进行排除,基本就能解决大部分中文乱码问题。

    更多相关内容
  • MySQL中文乱码解决办法 前言: MySQL是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情况。 1、中文乱码 1.1...
  • 2、将MySQL编码设置成UTF-8 show variables like 'character_set_%'; 各字段的含有如下: 主要关注的是character_set_client、character_set_connection、character_set_results这三个变量。 他们的含义可以看...

    方法1、QSqlDatabase对象设置UTF-8编码

    QSqlDatabase db;
    db.exec("SET NAMES 'UTF-8'");
    

    方法2、将MySQL编码设置成UTF-8

    show variables like 'character_set_%';
    

    在这里插入图片描述
    各字段的含有如下:
    请添加图片描述
    主要关注的是character_set_client、character_set_connection、character_set_results这三个变量。
    他们的含义可以看以下例子:

    首先client一般会发送一条sql给客户端,比如select * from table where name = ‘某某某’;,在分析的过程中,我们主要对查询参数“某某某”进行分析。
    1、首先“某某某”三个字被client端进行编码为二进制流,传输给服务器。
    2、服务器收到后,会认为客户端的编码为character_set_client对“某某某”进行解码,获取client发送的字符串sql。
    3、解码之后,再把sql转换为character_set_connection格式,使得能与数据库连接的字符集相同。
    4、解码成character_set_connection之后,就进行数据比对查询。此时如果要比对的列的字符集与character_set_connection不相等,那显然就是会有问题的。
    5、数据查询出来之后,对结果要进行编码,编码的字符集就采用character_set_results字符集,此时如果客户端接收的字符集与character_set_connection不相同,那么客户端解码的数据也会出现问题。

    设置MySQL编码:

    set character_set_client=utf-8;
    set character_set_connection=utf-8;
    set character_set_database=utf-8;
    set character_set_results=utf-8;
    set character_set_server=utf-8;
    set collation_database = utf8mb4_unicode_ci;
    set collation_connection = utf8mb4_unicode_ci;
    

    方法3、MySQL的my.ini文件或my.cnf设置UTF-8

    在mysql数据库的安装根目录下找到my.ini,例:C:\ProgramData\MySQL\MySQL Server 8.0

    # 在[mysql]下设置mysql客户端默认字符集
    default-character-set=utf8 
    # 在[mysqld]下设置服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    

    然后重启MySQL服务。

    方法4、头文件设置UTF-8

    #pragma execution_character_set("utf-8")
    

    方法5、使用QString::fromLocal8Bit()

    QString sql = QString::fromLocal8Bit("SELECT * FROM table");
    
    展开全文
  • mysql中文乱码解决方式

    千次阅读 2021-01-28 00:35:25
    尝试了多种方案,最终解决乱码问题,总结一下解决方式,给遇到同样问题的人一点參考。中文乱码的原因1.安装mysqlserver的时候编码集设定有问题2.创建数据库的时候编码集设定有问题3.创建表的时候编码集设定有问题4....

    近期项目使用到mysql。却突然出现了中文乱码问题。尝试了多种方案,最终解决乱码问题,总结一下解决方式,给遇到同样问题的人一点參考。

    中文乱码的原因

    1.安装mysqlserver的时候编码集设定有问题

    2.创建数据库的时候编码集设定有问题

    3.创建表的时候编码集设定有问题

    4.client的编码集设定有问题

    能够通过命令查看编码集:

    show variables like "%char%";

    491489830e5a07d7408d63b49971d5fe.png

    经常使用编码集

    1.java中的经常使用编码UTF-8;GBK;GB2312;ISO-8859-1;

    2.相应mysql数据库中的编码utf8;gbk;gb2312;latin1

    建议使用utf8格式,utf8能够兼容世界上全部字符

    mysql编码集设置命令

    注意:假设不是通过my.ini配置文件设置的内容,仅仅在当前状态下有效,当重新启动数据库服务后失效。所以假设想要不出现乱码仅仅有改动my.ini文件,数据库编码能够在创建数据库时候指定UTF8

    mysql设置编码命令

    SET character_set_client = utf8;

    SET character_set_connection = utf8;

    SET character_set_database = utf8;

    SET character_set_results = utf8;

    SET character_set_server = utf8;

    SET collation_connection = utf8_bin;

    SET collation_database = utf8_bin;

    SET collation_server = utf8_bin;

    e99b0d5e8cfe12ef6934f87c3fc89676.png

    设定mysqlserver编码

    设定mysqlserver的编码。须要又一次安装mysql服务,步骤例如以下:

    1.打开命令提示符(管理员)。假设不以管理员身份执行可能会出现错误

    2.进入mysql安装文件夹下的bin文件夹

    3.关闭服务

    net stop mysql

    4.卸载

    mysqld -remove

    5.改动mysql的配置文件。在mysql安装文件夹下找到my.ini文件

    b5afe1474eff32a0c7fd88c44a6e6e11.png

    改动配置文件,在配置文件里增加

    character-set-server=utf8

    贴出我的配置文件

    [mysqld]

    #设置字符集

    character-set-server=utf8

    #这里把路径改改为你的mysql安装文件夹

    basedir=D:\develeper\mysql5.6

    datadir=D:\develeper\mysql5.6\data

    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

    6.安装

    mysqld -install

    7.启动服务

    net start mysql

    f21ad355f5423cf37a13b20e13e2705c.png

    创建时指定字符集

    1.创建数据库时设定字符集

    create database testdb default character set utf8;#建立数据库

    2.创建表时设定字符集

    use testdb;

    create table student(

    id char(50) primary key,

    sname varchar(100) not null,

    age int

    )engine=innodb default charset=utf8;

    3、client字符集的设定。通过连接字符串来设定。

    jdbc:mysql://localhost:3306/testdb?

    characterEncoding=utf8

    展开全文
  • 一般来说,造成MySQL出现中文乱码的因素主要有下列几点: 1.server本身字符集设定的问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程序(例如php)的连线语系设定问题 对此,...
  • 使用 docker 启动 mysql 容器可能会出现中文乱码的情况,这里记录如何制作支持中文mysql 镜像 docker版本:18.06 mysql 版本:5.7 1. 创建 my.cnf 文件 [client] default-character-set=utf8 [mysql] default-...
  • 个人总结了遇到使用Mysql数据库插入中文时产生乱码问题的解决方法
  • 第一个方法: MySQL 4.1 中文乱码的问题 最近要将 MySQL 4.0 升级到 MySQL 4.1 ,发现了中文乱码的问题,希望以下见解对大家有用。 1. MySQL 4.1 在文字上有很大改进,它有了 Character Set 与 Collation 的慨念。 2...
  • JDBC连接mysql处理中文乱码解决办法详解 近日,整合的项目需要跟一个比较老版本的mysql服务器连接,使用navicat查看,发现此mysql服务器貌似没有设置默认编码,而且从操作此mysql的部分php文件看,应该是使用的gb...
  • 现象 在IDEA中查询,中文显示正常。IDEA中的jdbc连接字符串是: jdbc:mysql://172.16.184.13:3306/ry-vue?useUnicode=true&...但是在命令行中查询则出现中文乱码问题: select user_name,nick_name,sex fr

    现象

    在IDEA中查询,中文显示正常。IDEA中的jdbc连接字符串是:

    jdbc:mysql://172.16.184.13:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    

    在这里插入图片描述

    但是在命令行中查询则出现中文乱码问题:

    select user_name,nick_name,sex from sys_user;
    

    在这里插入图片描述

    原因分析

    查询编码格式

    show variables like'%char%';
    

    在这里插入图片描述
    数据库设置的是utf8格式的,但是命令行mysql查的是latin1格式的,所以导致乱码问题的出现。

    解决办法

    更改results编码格式

    set character_set_results=utf8;
    

    在这里插入图片描述
    这样问题就解决了。
    上面一行就能解决查询乱码的问题了。
    为了保险起见,可以把其他的也设置成utf8

    set character_set_client=utf8;
    set character_set_connection=utf8;
    set character_set_database=utf8;
    set character_set_results=utf8;
    

    设置完成以后编辑格式就是如下:
    在这里插入图片描述
    然后我执行了update语句,中文的字段更新也正常了。

    永久解决

    如果每次都手动执行set character_set_results=utf8;解决乱码问题,太麻烦了。关键是有时会忘记,有一次导数据忘记了,导致插入了好多中文乱码的数据,很麻烦。

    解决办法很简单:
    在你的电脑(客户端)以下配置文件中~/.my.cnf加入如下内容:

    [mysql]
    default-character-set=utf8
    

    这样下次运行就不用手动设置编码格式了,直接可以使用。
    在这里插入图片描述

    参考

    《MySQL命令行查询乱码解决方法》
    https://www.cnblogs.com/aksir/p/7070493.html

    展开全文
  • 在搭建Mysql环境的时候遇到了中文乱码问题,下面与大家分享下具体的解决方法,感兴趣的朋友可以参考下哈,希望对大家有所帮助
  • 主要介绍了解决java中springmvc+mybatis+mysql中文乱码问题的相关资料,需要的朋友可以参考下
  • 中文存入 mysql 数据库出现的乱码,从 JSP 页面读取 mysql 中文数据出现乱码,以及在 sell 环境下查看数据库表中文数据出现乱码。为了解决中文乱码问题,首先是采用同一字符集。本人采用的是Gbk.1.安装mysql后首先...
  • MySQL默认latin1(其实就是ISO-8859-1)字符集。这显然不能满足我们的需要,因此我们把它调整为UTF8字符集,以兼容大多数字符集。 1. 先来执行两条SQL,来检测下当前的MySQL默认字符集编码: Sql命令: mysql>...
  • 解决MYSQL中文乱码问题

    千次阅读 2022-02-16 22:12:17
    一、乱码的原因: 1、 client客户端的编码不是utf8 2、server端的编码不是utf8 3、database数据库的编码不是utf8 4、数据库的表的编码不是utf8 5、表中的列字段编码不是utf8 主要的原因在于前三个偏多。 二、查看...
  • MySQL和Apache两个系统的编码(字符集)问题让我费劲脑筋,吃尽苦头。网上对这些问题的解决比较零散,比较片面,大部分是提供解决方法,却不说为什么。于是我将这几天收获总结一下,避免后来者再走弯路
  • 最简单的完美修改方法,修改mysql的my.cnf文件中的字符集键值(注意配置的字段细节)
  • 本文章向码农们介绍php mysql 中文乱码解决方法,对码农们非常实用,需要的码农可以参考一下。从MySQL 4.1开始引入多语言的支持,但是用PHP插入的中文会出现乱码.无论用什么编码也不行解决这个问题其实很简单.1.在...
  • java插入mysql中文乱码解决
  • mysql中文乱码解决

    2017-10-23 17:22:58
    1、mysql中文乱码解决: 中文乱码 主要从几个方面解决: a. 配置文件 windows->my.ini linux->my.cnf b. 配置字段: show variables like ‘%char%’ ->设置客户端和返回结果的编码
  • 在进行数据库连接的时候,发现代码插入不了中文,在此将中文乱码问题做一个简单的总结。 一:将IDEA中的文件设置为UTF-8编码方式 将File => Settings => Editor => File Encodings => Project Encoding...
  • 今天在做java前后端分离项目的时候遇到了读取mysql中文乱码问题,首先在项目中的要求是通过springboot和mybatis-plus构建访问数据库,后面在通过浏览器访问固定地址读取查询表内容的时候(select * from hospital_...
  • 1、中文乱码1.1、中文乱码 create table user(na ...mysql是我们项目中非常常用的数据型数据库。但是因为我们需要在数据库保存中文字符,所以经常遇到数据库乱码情况。下面就来介绍一下如何彻底解决数据库中文乱码情...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 46,958
精华内容 18,783
关键字:

mysql中文乱码解决

mysql 订阅