问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

MYsql 字符集乱码的问题,困扰了好久,帮我解决了再加100分

发布网友 发布时间:2022-04-28 11:41

我来回答

5个回答

热心网友 时间:2022-04-07 18:58

1、MySQL库、表存储设置UTF-8

2、驱动连接字符串String url=

”jdbc:mysql://127.0.0.1:3306/dbname?useUnicode=true&characterEncoding=UTF-8“

3、JSP页面中<%@ page contentType="text/html; charset=utf-8"%>

这样应该就可以传递正确编码了、不过你的输入输出环节的转换代码具体是什么样的?

此前如果有遗漏可能还要检查:

4、设置Tomcat6的server.xml中<Connector>标签:<Connector port="8080"protocol="HTTP/1.1"  connectionTimeout="20000" 
URIEncoding="utf-8" useBodyEncodingForURI="true" redirectPort="8443" />

5、JSP页面读取后台中文变量<%=new string(aStrVal.getstring(2).getbytes("iso8859-1"),"utf-8")%>

控制装饰层从前端接收中文变量String aStrVal =new String(req.getParameter("strPara").getBytes("ISO8859_1"));

6、如果第4个措施因特殊情况不能修改,则可以自己写过滤器:

package filters;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;

public class SetCharacterEncodingFilter implements Filter {
    /**
     * The default character encoding to set for requests that pass through
     * this filter.
     */
    protected String encoding = "UTF-8";

    /**
     * The filter configuration object we are associated with.  If this value
     * is null, this filter instance is not currently configured.
     */
    protected FilterConfig filterConfig = null;
    /**
     * Should a character encoding specified by the client be ignored?
     */
    protected boolean ignore = true;

    public void destroy() {
        this.encoding = null;
        this.filterConfig = null;
    }

    public void doFilter(ServletRequest request, ServletResponse response,
                         FilterChain chain) throws IOException, ServletException {

        // Conditionally select and set the character encoding to be used
        if (ignore || (request.getCharacterEncoding() == null)) {
            String encoding = selectEncoding(request);
            if (encoding != null)
                request.setCharacterEncoding(encoding);
        }
        chain.doFilter(request, response);
    }

    /**
     * Place this filter into service.
     * @param filterConfig The filter configuration object
     */
    public void init(FilterConfig filterConfig) throws ServletException {

        this.filterConfig = filterConfig;
        this.encoding = filterConfig.getInitParameter("encoding");
        String value = filterConfig.getInitParameter("ignore");
        if (value == null)
            this.ignore = true;
        else if (value.equalsIgnoreCase("true"))
            this.ignore = true;
        else if (value.equalsIgnoreCase("yes"))
            this.ignore = true;
        else
            this.ignore = false;
    }

    protected String selectEncoding(ServletRequest request) {
        return (this.encoding);
    }
}

<filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
    </init-param>
    <init-param>
        <param-name>ignore</param-name>
        <param-value>false</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>encodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

另外请确认如下都已经设置好:

MySQL 5.1在在my.ini内的 [mysql] 和[mysqld]两处 default-character-set=utf8

MySQL 5.5在在my.ini内的 [mysql]default-character-set=utf8;[mysqld]character-set-server=utf8 

Myeclipse偏好首选设置里:

General->Workspace    Text file encoding;

General->Content Types,右侧Content Types树,点开Text,确认Java Source File下面的Default encoding框中是UTF-8,用到jsp、js、css同上;

--看你的截图只是数据前后交换的问题,项目工作空间的都没问题了。

热心网友 时间:2022-04-07 20:16

1、jsp页面字符集设为utf-8
2、jsp查询mysql之前,先执行一下"set names utf8"
3、jsp文件用记事本打开,另存为,编码选择utf8

热心网友 时间:2022-04-07 21:51

一张测试的结论图,要显示正常,必须客户端、服务、DB设置统一。

或者如上考虑到兼容性。

热心网友 时间:2022-04-07 23:42

一、转码失败
在数据写入到表的过程中转码失败,数据库端也没有进行恰当的处理,导致存放在表里的数据乱码。
针对这种情况,前几篇文章介绍过客户端发送请求到服务端。
其中任意一个编码不一致,都会导致表里的数据存入不正确的编码而产生乱码。
比如下面简单一条语句:
set @a = "文本字符串";
insert into t1 values(@a);
1. 变量 @a 的字符编码是由参数 CHARACTER_SET_CLIENT 决定的,假设此时编码为 A,也就是变量 @a 的编码。
2. 写入语句在发送到 MySQL 服务端之前的编码由 CHARACTER_SET_CONNECTION 决定,假设此时编码为 B。
3. 经过 MySQL 一系列词法,语法解析等处理后,写入到表 t1,表 t1 的编码为 C。
那这里编码 A、编码 B、编码 C 如果不兼容,写入的数据就直接乱码。
二、客户端乱码
表数据正常,但是客户端展示后出现乱码。
这一类场景,指的是从 MySQL 表里拿数据出来返回到客户端,MySQL 里的数据本身没有问题。客户端发送请求到 MySQL,表的编码为 D,从 MySQL 拿到记录结果传输到客户端,此时记录编码为 E(CHARACTER_SET_RESULTS)。
那以上编码 E 和 D 如果不兼容,检索出来的数据就看起来乱码了。但是由于数据本身没有被破坏,所以换个兼容的编码就可以获取正确的结果。
这一类又分为以下三个不同的小类:
1)字段编码和表一致,客户端是不同的编码
比如下面例子, 表数据的编码是 utf8mb4,而 SESSION 1 发起的连接编码为 gbk。那由于编码不兼容,检索出来的数据肯定为乱码。
2)表编码和客户端的编码一致,但是记录之间编码存在不一致的情形
比如表编码是 utf8mb4,应用端编码也是 utf8mb4,但是表里的数据可能一半编码是 utf8mb4,另外一半是 gbk。那么此时表的数据也是正常的,不过此时采用哪种编码都读不到所有完整的数据。这样数据产生的原因很多,比如其中一种可能性就是表编码多次变更而且每次变更不彻底导致(变更不彻底,我之前的篇章里有介绍)。举个例子,表 t3 的编码之前是 utf8mb4,现在是 gbk,而且两次编码期间都被写入了正常的数据。
3)每个字段的编码不一致,导致乱码
和第二点一样的场景。不同的是:非记录间的编码不统一,而是每个字段编码不统一。举个例子,表 c1 字段 a1,a2。a1 编码 gbk,a2 编码是 utf8mb4。那每个字段单独读出来数据是完整的,但是所有字段一起读出来,数据总会有一部分乱码。
三、LATIN1
还有一种情形就是以 LATIN1 的编码存储数据
估计大家都知道字符集 LATIN1,LATIN1 对所有字符都是单字节流处理,遇到不能处理的字节流,保持原样,那么在以上两种存入和检索的过程中都能保证数据一致,所以 MySQL 长期以来默认的编码都是 LATIN1。这种情形,看起来也没啥不对的点,数据也没乱码,那为什么还有选用其他的编码呢?原因就是对字符存储的字节数不一样,比如 emoji 字符 "❤",如果用 utf8mb4 存储,占用 3 个字节,那 varchar(12) 就能存放 12 个字符,但是换成 LATIN1,只能存 4 个字符。
总结
通过上面的详细说明,相信对 MySQL 乱码问题已经有一个很好的了解了。那来回顾下本篇的内容。本篇主要列列举了 MySQL 乱码可能出现的场景,并对应给出详细的处理方法以及相关建议,希望以后大家永远不会出现乱码问题。

热心网友 时间:2022-04-08 01:50

你把数据库,开发工具,页面编码,都修改为UTF-8,把库里面的数据删完。重新添加。
解决MySQL中字符串乱码问题mysql字符串乱码

需要注意的是,这种方法只能对新插入的数据有效,对已有数据的影响不大。3. 指定连接的字符集和排序规则 第三种方法是在程序中指定 MySQL 连接的字符集和排序规则。可以通过以下代码实现:import mysql.connector cnx = mysql.connector.connect(user=’root’, password=’password̵...

解决MySQL中文乱码问题的实用方法mysql中使用中文乱码

如果您的MySQL中存在乱码数据,可以使用MySQL内置的转换函数将其转换为正确的字符集。以下是一些MySQL函数:– CONVERT(str,char_set):将str转换为char_set字符集 – CAST(str AS char(n)):将str强制转换为特定的字符集 – BINARY(str):在比较和排序时将str视为二进制字符串 ...

MySQL如何解决中文乱码问题mysql中文乱码问题

首先,我们要知道MYSQL中出现乱码的原因:MYSQL使用的是指定的字符集,而不是某个具体的字符集,如果现在传输的数据是某个文字的其他编码,就会出现乱码的现象。要解决MYSQL中文乱码,我们需要检查客户端连接的字符集。例如,如果我们希望使用UTF-8编码:mysql&gt; SET NAMES ‘utf8’;我们还可以...

三种解决mysql乱码的方法

首先,要解决数据库导入数据的乱码问题,我们可以将默认的字符集更改为utf-8。具体步骤如下:1. 查看数据库默认的字符集是什么。2. 查询所有默认字符集,其中character_set_database和character_set_server的字符集默认为latin1。3. 使用以下两行代码将其更改为utf-8:4. 进行字符集查询,得到以下结果...

为什么MySQL会出现乱码问题mysql中为何是乱码

解决方法:在客户端和服务器端同时设置相同的字符集,比如都设置为UTF-8,可以减少出现乱码的可能性。2. 数据库编码不正确 在MySQL中,一个数据库也有自己的默认字符集,如果数据库的编码不正确,就会导致乱码问题。例如,当数据库字符集为GBK,而插入的数据为UTF-8编码的数据时,就可能出现乱码。解决...

解决MySQL中个别汉字显示乱码问题mysql个别汉字乱码

在MySQL存储过程或函数中,有时会出现个别汉字显示乱码的问题,这种情况给数据处理和展示带来了很大的不便。然而,这个问题的解决还是比较简单的,只需要进行以下几步即可。步骤一:检查字符集 首先需要检查MySQL的字符集是否为utf8或utf8mb4。在MySQL中,可以使用以下命令查询:SHOW VARIABLES LIKE ‘...

mysql中文乱码原因及解决方法汇总介绍_mysql中文乱码原因及解决方法汇总...

MySQL作为常用的数据库管理系统,有时会遇到中文字符显示乱码的情况。本文将全面解析其出现的原因,并提供有效的解决策略。首先,导致MySQL中文乱码的主要原因有三个:1. MySQL服务器本身的设定,可能是仍使用了不支持中文的字符集,如latin1。2. 数据库表的语系设定,包括character和collation,需要设置为...

如何解决cmd插入MySQL出现乱码问题cmd插入mysql乱码

方法三:使用MySQL GUI工具 如果我们不想使用cmd命令行界面,我们可以考虑使用MySQL GUI工具,例如MySQL Workbench等。这些工具提供了一个更友好的界面和更多的选项,可以帮助我们更轻松地解决乱码问题。尝试使用以上三种方法后,应该可以有效解决cmd插入MySQL出现乱码问题了。如果你还有其他好的方法,欢迎在评论...

MySQL解决输出乱码问题的实用小技巧mysql输出乱码

首先,确定在什么地方出现乱码,是MySQL的客户端还是MySQL的服务器?一般而言,如果乱码出现在MySQL的客户端,那么可以使用MySQL的客户端设置来解决这个问题,使用以下MySQL语句:SET NAMES ‘utf8’;其中,utf8是编码格式。如果乱码出现在MySQL服务器,那么需要登录MySQL服务器端,使用以下命令设置...

MySQLYog如何解决乱码问题mysqlyog乱码

MySQL Yog提供了多种方式来解决乱码问题。1.更改默认字符集 在MySQL Yog中,可以更改默认字符集来解决乱码问题。进入Tools-&gt;Preferences-&gt;Charset设置,将Default字符集设置为与你的数据库编码相同的字符集,如UTF-8。2.更改连接字符集 当连接MySQL数据库时,也可以更改连接字符集来解决乱码问题。连接MySQL...

程序文字乱码是什么问题 jsp乱码如何解决 出现乱码怎么解决 VLC 中文显示乱码问题 Oracle字符集 基本字符集 字符集有哪些 字符集gbk 字符集utf8
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
重本和一本一样吗 永劫无间是第几人称:小说叙事视角分析 名字未定(第三人称双男主 周霖 温宿) 我得了职业病〈轻度苯中毒〉,有职业病诊断证明书.工伤认定期间我没上... ...后来感觉麻烦,就直接去药店买药,他开了很多 这是十年前的功放,求高手看看那几个孔是什么? 车子断保险之后再交是一样的吗 车险断交后再续交 女性查激素六项什么时候检查 有一个素质很低下的室友是一种什么样的体验? 新鲜笋子煮麻辣鱼怎么做 笋子煮麻辣鱼的做法 怎么修改mysql数据库字符集编码为utf-8 如何修改windows的默认字符集为utf-8 mysql字符集乱码问题 如何修改mysql的字符库编码解决中文乱码问题 如何修改windows下mysql的字符集 据说中国即将面临战争,这是真的吗? 中国有开战的可能吗 中国真的会和美国发起战争吗? 中国真敢开战吗? 2016中国会发生战争吗 中国会开战吗 中国会不会发生战争啊 待上海指数过几天走到最低点后,买入000636风华高科股好不好呢? 000636什么时候复牌 大家看看000636 近期会怎么样 9.1买了就到现在7.1 郁闷死了 000636股票怎样 买了000636,今日暴跌,怎么办啊? 000636我5000点的前一天13.75进的,请帮忙分析如何操作 八月份股票sz000636怎样 大家感觉股票000636风华高科最近怎样? 安装mysql,字符编码为什么要选择UTF8?急。。。 光子斩击者的卡片信息 thrasher水洗标在哪里 《清明上河图》的历史价值是什么? 清明上河图之所以具有极高的历史价值原因是什么? 破壳鸡蛋能吃吗 清明上河图的历史价值是什么??? 美丽女孩与僵尸在校园的外国电影 清明上河图的历史价值是什么? 请求NHL各队的中文译名,万分感谢! 壳破了的鸡蛋能吃吗 壳破鸡蛋能吃吗 市场上的破壳鸡蛋能不能吃 鸡蛋破壳了还能吃吗 你知道《清明上河图》有何历史价值吗? 清明上河图有什么历史含义? 破壳鸡蛋可以吃吗 如何玩滑板? 司空是什么官 为什么《清明上河图》有如此艺术价值