mysql - UTF-8 在 MySQL DB 中存储为问号
问题描述
我有一个 MySQL 数据库,它创建为 utf8mb4(带有排序规则 utf8mb4_collate_ci),我通过一些 JSP 页面访问它。JSP 页面都存储为 UTF-8,并且都包含以下标签:
<%@ page contentType="text/html; charset=utf-8" %>
<meta http-equiv="Content-type" content="text/html; charset=utf-8">
使用 MySQL Workbench,我可以在 DB 中存储非 ASCII 文本并显示它,在 JSP 页面中,我可以正确显示存储的文本。但是,当我尝试从 JSP 页面插入包含非 ASCII 文本的新行时,它们最终被存储为“??????” 在数据库中(无论是从 JSP 还是从 MySQL Workbench 中选择都显示为这样)。如果我将插入的文本显示为 JSP 页面的一部分,它会在我的浏览器中正确显示。
我唯一能想到的是 JSP 到 MySQL 的网络连接不知何故使用了错误的编码,但我完全不知道如何或为什么。
欢迎任何建议!
解决方案
确实是 JSP-to-MySQL 编码才是问题所在。使用“显示变量”显示“character_set_server”是有罪的一方,被设置为“latin1”而不是“utf8”。Madhur Bhaiya 的评论帮助我找到了一些指向其他页面的链接,这些链接建议将“?characterEncoding = utf8”添加到连接字符串以覆盖服务器的默认连接编码。这解决了问题。谢谢,马杜尔!
推荐阅读
- c# - c#读取不同计算机操作系统和语言上的文本文件目录
- r - 通过R中的列号访问数据框中的变量?
- python - Django 表单:电话字段未显示
- c++ - 当给定要删除的节点的值时,如何从链表中删除节点
- c - 在指针之间进行算术运算的正确方法
- xpath - 如何在 Xquery 函数 (BaseX) 中将字符串转换为 Xpath
- spring-integration - Spring响应式文件集成
- sql - 重构一个字段及其在 Django 中的引用
- flutter - Flutter 应用被 Google Play 商店拒绝:HostnameVerifier 的不安全实现
- r - 计算变量的每个因子水平的 sd()