问题:从eclipse写中文入mysql数据库结果为‘?’

问题:从eclipse写中文入mysql数据库结果为‘?’


问题描述

在eclipse中连接好数据库后往表中插入数据,英文数字显示正常,但是中文全部都变成了‘?’


运行环境

  • windows8.1
  • mysql5.6
  • jdk1.8
  • eclipse Neon.1a Release (4.6.1)
  • navicat for mysql 10.0.11

解决办法

第一步:先进行判断,尽可能确定是何种问题,查看第二步的修改方法

存在多种问题的可能性很大,比如同时存在四种情况,同时存在两种情况,当然也可能只是一种情况,所以很可能要做多种修改,这里提供的是从简单到麻烦的判断思路
1. (情况一)首先,试着修改项目中配置连接数据库的url,并运行程序进行测试,如果成功就不需要继续了,不成功则继续向下看
2. (情况二)其次,利用navicat查看相关的数据库以及表字段是否设置成为了不相关的编码方式(例如latin)或者不一致,这是手动建表很容易被忽视的错误,修改相关设置并运行程序进行测试,如果成功就不需要继续了,不成功则继续向下看
3. (情况三)然后,试着设置IDE(eclipse)的工作空间字符编码以及单独设置项目字符编码,并运行程序进行测试,如果成功就不需要继续了,不成功则继续向下看
4. (情况四)最后,查看mysql的默认编码方式
- 利用【mysql -uroot -p】在命令行中登录mysql
- 登陆后利用【show variables like “%char%”;】查看现在的字符集状况,发现不一样(大概是这样,我的改过了这是网上找的图,具体每一项的含义请参考ChavinKing:MySQL字符集详解)
问题:从eclipse写中文入mysql数据库结果为‘?’_第1张图片
5.(情况五)还没成功?我也不知道了,目前我碰到的就这些,以后还可能会补充。度娘查查看,多看一些帖子,潜意识的补充一下相关的知识,更容易推断出问题出现在哪里~

第二步:进行修改

情况一. 修改项目jdbc中连接数据库配置的url(根据不同的状况设置细节可能各有不同,此处不做陈述)

jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8)

情况二. navicat客户端数据库设置

  • 连接级别
    问题:从eclipse写中文入mysql数据库结果为‘?’_第2张图片

    • 如果连接此时是打开状态,会弹出下面,点击ok
      问题:从eclipse写中文入mysql数据库结果为‘?’_第3张图片
      问题:从eclipse写中文入mysql数据库结果为‘?’_第4张图片
  • 数据库级别
    问题:从eclipse写中文入mysql数据库结果为‘?’_第5张图片
    问题:从eclipse写中文入mysql数据库结果为‘?’_第6张图片

  • 表级别

    • 查看
      问题:从eclipse写中文入mysql数据库结果为‘?’_第7张图片
      问题:从eclipse写中文入mysql数据库结果为‘?’_第8张图片

    • 修改
      问题:从eclipse写中文入mysql数据库结果为‘?’_第9张图片
      问题:从eclipse写中文入mysql数据库结果为‘?’_第10张图片

  • 字段级别
    问题:从eclipse写中文入mysql数据库结果为‘?’_第11张图片

情况三.设置IDE(eclipse)工作空间字符编码以及单独设置项目字符编码

  • 设置eclipse工作空间(workplace)编码格式
    问题:从eclipse写中文入mysql数据库结果为‘?’_第12张图片
    问题:从eclipse写中文入mysql数据库结果为‘?’_第13张图片

  • 设置单个项目编码格式
    问题:从eclipse写中文入mysql数据库结果为‘?’_第14张图片
    问题:从eclipse写中文入mysql数据库结果为‘?’_第15张图片

情况四. 设置mysql字符编码格式

  • 通过修改my.ini配置文件来修改mysql的字符集
  • 但发现MySQL的安装目录下没有my.ini配置文件,只有一个my-default.ini,于是根据CSDN_wujian:修改mysql5.6.24解压缩版编码格式,将【my-default.ini】复制并命名为【my.ini】
  • 修改【my.ini】:
    • character-set-server=utf8放在[mysqld]后面
    • sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES后面另起一行插入,即文件最后插入

      [client]
      default-character-set=utf8

      不知道为什么要放在sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES后面,之前随手放在了[mysqld]前面,结果只有部分修改成功,一部分不成功(知道原因后再来补)

  • 修改之后重启mysql进程

    尚不清楚直接mysqld就可以,还是必须要先结束【ctrl+shift+esc】中的mysqld进程后再重新启动才可以,可以都试一下(知道后再来补充)

  • 登录后,利用【show variables like ‘char%’;】查看设置的字符集状况
    问题:从eclipse写中文入mysql数据库结果为‘?’_第16张图片

参考知识

  • 问题本质在于保持整个数据插入过程中字符编码的一致性。主要存在四方面:

    • 其一:服务器级别:mysql字符编码格式
    • 其二:数据库级别以及表级别列级别:mysql创建的数据库、表以及字段的编码格式
    • 其三:eclipse的工作空间,项目以及java文件的编码格式(对于java文件的编码格式,具体尚不清楚,因为没有用到)
    • 其四:连接级别配置文件里面jdbc的url的(jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8)设置编码,根据不同的状况设置细节可能各有不同
  • 字符集的大小:latin1 < gb2312 < gbk < utf8


参考文件

ChavinKing:Mysql字符集详解

qq_31968809:eclipse插入数据到mysql中的乱码问题解决

北原之风:eclipse往mysql里面插入数据时的乱码

CSDN_wujian:修改mysql5.6.24解压缩版编码格式

ChavinKing:MySQL字符集详解

你可能感兴趣的:(MySql)