gpt4 book ai didi

java - 在 MySQL 数据库中插入非英文文本时的 JSP 编码

转载 作者:行者123 更新时间:2023-11-29 05:38:58 25 4
gpt4 key购买 nike

我正在使用 Ajax 调用在 MySQL 数据库中插入印度字符。我在我的应用程序流程之间遇到了 UTF-8 编码问题。

当我直接通过 JDBC(不使用 Ajax 调用)插入非英文字符时,它显示“????”在数据库中。

当我包含

response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");

在我的 JSP 文件中,然后我在我的数据库中收到以下内容(问号而不是非英文字符):

????????

当我不包含上面的行时,它会在数据库中显示这样的垃圾字符:

મà«?àª?પà«?ષà«?àª

而实际值是

મખપષ

所以实际问题出在通过JDBC jdbc 连接器向JSP 中的MySQL 命令发送插入请求时或之后。

我在我的所有 JSP 文件中包含了以下标记以确保字符编码:

<%@page contentType="text/html"%>
<%@page pageEncoding="UTF-8"%>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8;charset=UTF-8">

我检查了 MySQL 表是否启用了 Unicode,我能够通过终端正确输入非英语文本。

这个问题是怎么引起的,我该如何解决?

现在,我只能使用插入语句来编写......但是当我混合一些查询和插入语句时......我的应用程序返回以下错误:操作 '=' 的归类 (latin1_swedish_ci,IMPLICIT) 和 (utf8_general_ci,COERCIBLE) 的非法混合以下是我的数据库变量:

| 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/ |
| collation_connection | utf8_general_ci |
| collation_database | utf8_general_ci |
| collation_server | utf8_general_ci |
| completion_type | 0 |
| concurrent_insert | 1 |
| connect_timeout | 10 |

最佳答案

When I am inserting the non-English characters directly by JDBC (not using an Ajax call), then it's showing "????" in the database.

这只有在双方都清楚各自的字符编码差异时才会发生。任何未被另一端使用的字符编码覆盖的字符将被问号替换 ? .否则你会看到 Mojibake .

在这种特殊情况下,这些方面是 Java 方面和数据库方面,以 JDBC 驱动程序作为中介。要解决此问题,您需要告诉 JDBC 驱动程序这些字符的编码方式。您可以通过设置 useUnicode=true&characterEncoding=UTF-8 来做到这一点。 JDBC 连接 URL 中的参数。

jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8

然后,根据您将参数从客户端发送到服务器的方式,您可能还需要修复请求编码。考虑到您在删除 request.setCharacterEncoding("UTF-8") 时看到的是 Mojibake。 ,您正在使用 POST。所以那部分没问题。

对于这种情况,如果您使用 GET 发送参数,则需要在服务器端配置 URI 编码。目前还不清楚您使用的是什么服务器,但如果是 Tomcat,则需要编辑 <Connector>输入 /conf/server.xml如下:

<Connector ... URIEncoding="UTF-8">

另见:

关于java - 在 MySQL 数据库中插入非英文文本时的 JSP 编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8311463/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com