zoukankan      html  css  js  c++  java
  • 解决mysql数据库在web开发中的乱码问题

    首先,出现的乱码的原因在于编码方式不统一,主要是mysql数据库的编码方式和web项目的编码方式,只有遵循了编码方式统一的原则,才能避免产生乱码问题。

    通常项目中使用的都是UTF-8编码,因此,我们在新建数据库时,要设置默认编码方式为UTF-8,具体步骤如下:

    一、Windows环境下的mysql配置:

    进入mysql安装目录,找到my.ini或者是my-default.ini文件,在[mysqld]和[client]后面增加"default-character-set=utf8",设置mysql默认编码为utf8:

    设置后记住重启mysql服务。

    二、更改了数据库系统编码后,还需注意数据库编码,使用create database 新建数据库时,要在后面加上character set utf8 collate utf8_general_ci:

    create database mydb1 character set utf8 collate utf8_general_ci;

    collate utf8_general_ci是指定该数据库的校对规则。

    三、新建数据库表时,添加default charset utf8:

    create table mytb1

    (id varchar(20) primary key,

    name varchar(40) not null) 

    default charset utf8;


    这样,新表的编码就是UTF-8了。

    四、应用程序的编码:

    以jsp页面为例:

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

    五、应用系统与数据库系统连接的编码:

    以JDBC为例,在编写用于连接的url时,需加上相应参数:

    String jdbcUrl = "jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&amp;characterEncoding=UTF-8&amp";

    &amp;是&的转义符。

    六、在编写应用程序中,其它需要注意编码的地方:

    比如:servlet中,

    request.setCharacterEncoding("UTF-8");

    response.setCharacterEncoding("UTF-8");

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

    String value = request.getParameter("name");

    value = new String(value.getBytes("ISO8859-1"),request.getCharacterEncoding());

     

    另外,在项目建立起来后,发现的mysql乱码问题,有时很可能需要修改数据库的编码方式,除上述几个涉及到mysql的修改方式外,还需以下几个操作:

    一、部分数据表的列编码需要修改:

    使用show create table tb2时,可以看到有可能修改了数据库、数据库表的编码方式,但列的编码方式没有修改为utf8:

    因此,需要单独修改:

    alter table mytb2 change username username varchar(40) character set utf8;

    二、依次将编码不正确的列进行修改,当修改具有外键约束的列时,又会出现新的问题,mysql系统不允许修改,并抛出错误。

    因此,必须将具有外键约束的表解除约束,再进行修改,之后再重新添加约束:

    alter table mytb2 drop foreign key foreignKeyName;

    alter table mytb2 change foreignKeyName foreignKeyName varchar(40) character set utf8;

    alter table mytb2 add constraint FK_foreignKeyName foreign key(foreignKeyName) references mytb1(column_name);

    经过了上面的所有操作后,mysql乱码问题就可以解决了。

  • 相关阅读:
    TextView控件中使用android:drawableLeft图片和文字使用gravity只能使文字居中,无法使图片随文字同时居中, 让图片随文字同时居中
    Android Studio sdk无法下载的问题
    CollapsingToolbarLayout的使用,实现向上滑动时,图片自动压缩消失,下拉到最上面图片显示出来
    android studio开发app时,运行时百度地图显示合适,app打包后地图不显示
    两个日期相差的天数
    Android实现定点任务(定时定点做某事)
    Conversion to Dalvik format failed: Unable to execute dex: Cannot merge new index 69457 into a non-jumbo instruction!
    JSP易错点及常用标签
    Java异常机制总结
    java内存区域简单介绍
  • 原文地址:https://www.cnblogs.com/microsoftjava/p/6861608.html
Copyright © 2011-2022 走看看