数据库如何修改编码格式?

转载于https://blog.csdn.net/hai_chao/article/details/79209408

最近经常在群里碰到问数据库编码格式怎么修改的同学,这类的问题是老生常谈的问题,也是在编程过程中经常让人避之不及的问题。之前也被编码格式问题搞过很多次,为了防止遇到同样问题的人踩坑,故写下这篇文章。 
声明:数据库版本:MySQL5.6 开发软件eclipse 语言:Java 
首先要说的是在MySQL中修改编码,如下:

  • 将具体表的编码格式转换为utf8:

    **alter table <表名> CONVERT TO CHARACTER SET utf8;**
    
    • 1
    • 2
  • 查看数据库编码格式:

         **show variables like 'character_set_database';**
    
    • 1
    • 2
  • 查看数据表的编码格式:

     **show create table <表名>;**
    
    • 1
    • 2
  • 创建数据库时指定数据库的字符集:

    **create database <数据库名> character set utf8;**
    
    • 1
    • 2
  • 创建数据表时指定数据表的编码格式:
create table tb_books (
    name varchar(45) not null,
    price double,
    bookCount int,
    author varchar(45)) default charset = utf8;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 修改数据库的编码格式:

    **alter database <数据库名> character set utf8;**
    
    • 1
    • 2
  • 修改字段编码格式:

     **alter table <表名> change <字段名> <字段名> <类型> character set utf8;**
     - **alter table user change username username varchar(20) character set utf8 not null;**
    
    • 1
    • 2
    • 3
  • 在JDBC链接数据库时转换编码格式:

     **"jdbc:mysql://localhost:3306/db_test?useUnicode=true&characterEncoding=UTF-8";**
    
    • 1
    • 2
  • 在接收页面传入的值时转换编码格式:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
   <%@  page  import="java.net.URLDecoder"  %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<% 

String name=URLDecoder.decode(new String(request.getParameter("name").getBytes("ISO-8859-1"),"UTF-8"),"UTF-8");
request.setAttribute("names", name);

%>
......(略)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 还有个比较奇葩的,在cookie中保存了中文,当选择记住账号密码时,之前的中文竟然乱码了。
  • 这种情况,是因为它不怎么支持中文,解决如下: 
    1.编码: 
    将中文进行编码再放入cookie中:
String username1 = URLEncoder.encode(username, "utf-8");
String userpwd1 = URLEncoder.encode(userpwd, "utf-8");
  • 1
  • 2

其中username和userpwd其中有中文,username1和userpwd1是进行编码之后的字符串。 
比如:(我这里做的是三天免登陆)

Cookie loginCookie = new Cookie("loginCookie",username1+":"+userpwd1);

        //将编码后的内容放到Cookie中

        loginCookie.setMaxAge(24*3600);

        //设置loginCookie的有效期3天 24小时*60分钟*60秒

        resp.addCookie(loginCookie);

         //将loginCookie响应到浏览器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2.解码:(如果不进行解码,页面会获取的是base64编码后的内容)

 String unamePwd = URLDecoder.decode(cookies[i].getValue(),"utf-8"); 
  • 1

其中cookies[i].getValue()是要进行解码的内容,根据自己的情况进行修改。 
我的代码:

//创建存放用户名密码的map
Map<String,String> loginMap = new HashMap<String,String>();

//获取cookies
Cookie[] cookies = req.getCookies();
//进行判断
if(cookies!=null) {
  for(int i=0;i<cookies.length;i++) {
    if(cookies[i].getName().equals("loginCookie")) {
      String unamePwd = URLDecoder.decode(cookies[i].getValue(),"utf-8");
      String[] up = unamePwd.split(":");
      loginMap.put(up[0], up[1]);
      req.getSession().setAttribute("loginMap",loginMap);
    }
  }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

这样cookie就不会乱码了。 
更新: 
在文本框中输入中文,后台通过JSP获取到内容后返回到页面出现乱码: 
在JSP页面中的<body>下面写上这段:

<%  request.setCharacterEncoding("utf-8"); %>


  • 1
    点赞
  • 0
    评论
  • 7
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 书香水墨 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值