问题:从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字符集详解)
5.(情况五)还没成功?我也不知道了,目前我碰到的就这些,以后还可能会补充。度娘查查看,多看一些帖子,潜意识的补充一下相关的知识,更容易推断出问题出现在哪里~
第二步:进行修改
情况一. 修改项目jdbc中连接数据库配置的url(根据不同的状况设置细节可能各有不同,此处不做陈述)
jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8)
情况二. navicat客户端数据库设置
连接级别
- 如果连接此时是打开状态,会弹出下面,点击ok
- 如果连接此时是打开状态,会弹出下面,点击ok
数据库级别
表级别
查看
修改
字段级别
情况三.设置IDE(eclipse)工作空间字符编码以及单独设置项目字符编码
设置eclipse工作空间(workplace)编码格式
设置单个项目编码格式
情况四. 设置mysql字符编码格式
- 通过修改my.ini配置文件来修改mysql的字符集
- 但发现MySQL的安装目录下没有my.ini配置文件,只有一个my-default.ini,于是根据优快云_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%’;】查看设置的字符集状况
参考知识
问题本质在于保持整个数据插入过程中字符编码的一致性。主要存在四方面:
- 其一:服务器级别:mysql字符编码格式
- 其二:数据库级别以及表级别列级别:mysql创建的数据库、表以及字段的编码格式
- 其三:eclipse的工作空间,项目以及java文件的编码格式(对于java文件的编码格式,具体尚不清楚,因为没有用到)
- 其四:连接级别配置文件里面jdbc的url的
(jdbc:mysql://localhost:3306/xxx?characterEncoding=utf8)
设置编码,根据不同的状况设置细节可能各有不同
字符集的大小:latin1 < gb2312 < gbk < utf8
参考文件
qq_31968809:eclipse插入数据到mysql中的乱码问题解决