java 存入数据库的中文都变成问号了

本文详细阐述了Java开发中遇到中文存入数据库变问号的问题,通过设置数据库表、连接和项目编码为UTF-8,以及正确编码数据的写入与读取,提供了解决方案。
摘要由CSDN通过智能技术生成


前言

跟后端吵架 因为我在后台管理操作隐私政策相关的问题引起bug
在这里插入图片描述
在这里插入图片描述

问号的bug

这就是问号,很神奇吧。

1. 问题描述

在Java开发过程中,有时候会遇到中文存入数据库后变成问号的问题。这是因为编码不一致导致的,需要正确处理编码才能保证中文数据正确存储和显示。

2. 解决流程

为了解决这个问题,我们可以按照以下流程进行处理:

步骤操作
1设置数据库表的字符集为UTF-8
2设置数据库连接编码为UTF-8
3设置Java项目的编码为UTF-8
4使用正确的编码将中文数据写入数据库
5读取数据库中的中文数据时,使用正确的编码进行解码

接下来,我们逐步解释每一步需要做什么,以及给出相应的代码示例。

3. 具体操作

3.1 设置数据库表的字符集为UTF-8

在创建数据库表时,需要将表的字符集设置为UTF-8,以便正确存储和显示中文数据。可以在创建表的DDL语句中添加字符集设置,如下所示:

CREATE TABLE your_table_name (
  id INT PRIMARY KEY,
  content VARCHAR(100) CHARACTER SET utf8
);

3.2 设置数据库连接编码为UTF-8

在Java代码中,连接数据库时需要设置连接的编码为UTF-8,以确保正确处理中文数据。可以使用useUnicode=true&characterEncoding=utf8参数来设置连接的编码,示例如下:

String url = "jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=utf8";
Connection connection = DriverManager.getConnection(url, username, password);

3.3 设置Java项目的编码为UTF-8

在Java项目中,需要将项目的编码设置为UTF-8,以确保正确读取和处理中文数据。可以在项目的配置文件中设置编码,例如在pom.xml文件中的部分添加以下配置:

<properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

3.4 使用正确的编码将中文数据写入数据库

在将中文数据写入数据库时,需要使用正确的编码进行编码,确保数据能够正确存储。在Java中,可以使用getBytes()方法将字符串按照指定的编码转换为字节数组,再将字节数组写入数据库,示例如下:

String content = "你好世界";
byte[] utf8Bytes = content.getBytes("UTF-8");
// 将utf8Bytes写入数据库

3.5 读取数据库中的中文数据时,使用正确的编码进行解码

在从数据库中读取中文数据时,需要使用正确的编码进行解码,以确保数据能够正确显示。在Java中,可以使用String的构造方法将字节数组按照指定的编码转换为字符串,示例如下:

// 从数据库中读取到的字节数组
byte[] utf8Bytes = // 从数据库中读取到的字节数组
String content = new String(utf8Bytes, "UTF-8");
// 此时content为正确的中文字符串

总结

通过以上步骤,我们可以解决Java中文存入数据库后变成问号的问题。确保数据库表、数据库连接、Java项目的编码设置一致,使用正确的编码进行数据的编码和解码,即可正确存储和显示中文数据。希望本文能够帮助前后端甩锅的问题

  • 22
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可口可乐Vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值