MySQL 插入 中文数据乱码解决
问题描述:
1、在命令行中进行插入,没有问题。但是显示存在部分乱码
2、在JDBC中插入成功、中文是直接以“??”形式显示。
通过Navicat客户端查看
与在网页中看到的一一致,说明读取没有问题,问题定位在写入数据或存储数据的编码有问题。
解决方案:
当向 MySQL 数据库插入一条带有中文的数据形如 insert into employee values(null,'张三','female','1995-10-08','2015-11-12','Sales',2000,'是个好员工!'); 出现乱码时,使用语句 show variables like 'character%'; 来查看当前数据库的相关编码集。
可以看到 MySQL 有六处使用了字符集,分别为:client 、connection、database、results、server 、system。其中与服务器端相关:database、server、system(永远无法修改,就是utf-8);与客户端相关:connection、client、results 。保证每一项的编码统一就不会产生乱码,当然支持中文的话也可以改成gbk,gb2312,utf-8等,建议是utf-8。在mysql中默认字符集是latin1,他是不支持中文的
client |
为客户端使用的字符集。 |
connection |
为连接数据库的字符集设置类型,如果程序没有指明连接数据库使用的字符集类型则按照服务器端默认的字符集设置。 |
database |
为数据库服务器中某个库使用的字符集设定,如果建库时没有指明,将使用服务器安装时指定的字符集设置。 |
results |
为数据库给客户端返回时使用的字符集设定,如果没有指明,使用服务器默认的字符集。 |
server |
为服务器安装时指定的默认字符集设定。 |
system |
为数据库系统使用的字符集设定。 |
与客户端相关:connection、client、results 。字符集可以通过set names utf8; 或者 set names gbk;进行修改数据库的编码集。
设置完成后即可解决客户端插入数据或显示数据的乱码问题了,但我们马上会发现这种形式的设置只会在当前窗口有效,当窗口关闭后重新打开 CMD 客户端的时候又会出现乱码问题;那么,如何进行一个一劳永逸的设置呢?在 MySQL 的安装目录下有一个 my.ini 配置文件(Linux下是/etc/my.cnf),通过修改这个配置文件可以一劳永逸的解决乱码问题。在这个配置文件中 [mysql] 与客户端配置相关,[mysqld] 与服务器配置相关。默认配置如下:
- [mysql]
- default-character-set=utf8
- [mysqld]
- character-set-server=utf8
修改完成后,我重启了Linux,主要的server 已经改为utf8了。
设置后,从JDBC进行增加的数据、显示出来没有问题了。
tip:不同MySQL版本修改设置项还不同:
在5.1版本时,为了解决中文乱码问题设置默认字符集为utf8时,是写:
default-character-set=utf8
到了5.5版本, [mysql] 项内可以这么写, [mysqld] 项内这么写在启动MySQL服务时会有1067错误,经查询发现这里必须要这样写:
character-set-server=utf8
set names 命令其他试探:
当使用了set names gbk后使用insert后出现乱码,而默认写入编码格式是utf8,所以直接就进行写入没有问题。
得出结论:server编码是数据库最终存储数据的编码格式,而set names命令只修改了写入数据时的数据编码格式。
MySQL 插入 中文数据乱码解决的更多相关文章
- Hibernate向MySQL插入中文数据--乱码解决
<property name="hibernate.connection.url">jdbc:mysql://127.0.0.1:3306/exam?useUnicod ...
- mariadb插入中文数据乱码解决过程
基本情况: 系统:centos 7 mariadb安装方式:yum 乱码解决过程: 查看当前数据库编码(登录数据库后) # show variables like 'character%'; (上图为 ...
- MySQL插入中文数据出现?号
原文转载自:https://blog.csdn.net/LynneZoe/article/details/79174119 运行环境:win10 mysql版本:Mysql5.6 做一个项目的时候,向 ...
- 使用JDBC向Kudu表插入中文数据乱码(转载)
参考:https://cloud.tencent.com/developer/article/1077763 问题描述 使用Impala JDBC向Kudu表中插入中文字符,插入的中文字符串乱码,中文 ...
- mysql插入中文数据变成问号怎么处理
插入中文数据变成问号,一般都是因为字符集没有设置成utf8的原因 1.修改字符集: ALTER TABLE 表名 MODIFY 列名 类型(50) CHARACTER SET "utf8&q ...
- MYSQL导入中文数据乱码的四种解决办法
方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 方法一:通过增加参数 --default-character-set = utf8 解决乱码问题 my ...
- EntityFramewok 插入Mysql数据库 中文产生乱码解决
首先Mysql表,建表的时候,有没有选择UTF8,如果是默认的编码latin1,就会产生乱码 这里修改后,还是乱码,那就要检查发生乱码的列是不是UTF8格式 然后修改App.Config或者Web.C ...
- java web 向数据库插入中文数据乱码问题
一.先检查下是 页面返回数据时已经乱码了,还是在插入数据库的时候乱的码. 二.页面返回乱码: 1. Web.XML 文件配置 <!-- 配置编码过滤器 --> <filter&g ...
- jquery之getJSON方法获取中文数据乱码解决方法
最近公司做的东西要用到js,感觉js太繁琐,所以自己学起了jquery,发现jquery确实强大.在学到jquery ajax的时候(用的工具是eclipse),发现$.getJSON()方法请求服务 ...
随机推荐
- java执行操作系统脚本
http://www.cnblogs.com/bencakes/p/6139477.html 以前只是知道Runtime.getRuntime().exec(command);这种用法,但是有时候命令 ...
- 图形与动画在Android中的实现
public class MyView extends View{ Bitmap myBitmap; Paint paint; public MyView(Context context, Attri ...
- tp5日志分表
/** * 记录网站日志 * * @return bool */ public function record() { // 组装数据 $log = self::$param; $log[self:: ...
- Python 3.8 新功能【新手必学】
Python 3.8 是 Python 编程语言的最新主要版本, 它包含许多新功能和优化. Python 3.8 Python 3.8 的一些新功能包括: 1. 海象运算符 PS:很多人 ...
- 009.CI4框架CodeIgniter, 网页访问GET的URL参数获取,分段输出URL参数
01.代码如下,我们给在PHP CI4框架中定义了一个show函数,并给了3个参数,代码如下: <?php namespace App\Controllers\System; use App\C ...
- pyhton scipy最小二乘法(scipy.linalg.lstsq模块)
最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方之和来作为目标J(θ)J(θ),从而找到最优模型. 7. SciPy最小二乘法 最小二乘法则是一种统计学习优化技术,它的目标是最小化误差平方 ...
- Python3中的bytes和str类型
Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Python 3不会以任意隐式的方式混用str和b ...
- Python基础笔记:使用dict和set
dict 就和 C语言中的 map 的作用一样.查找非常快,以空间换时间! dict的使用: >>> d={'Mike':66,'Bob':77,'John':88} #定义一个di ...
- APIO 2010 特别行动队 斜率优化DP
Description 你有一支由 n 名预备役士兵组成的部队,士兵从 1 到 n 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑,同一支特别行动队中队员的编号 应该连续,即为形如 (i ...
- JAVA中的sqlite
1.SQLiteJDBC SQLite JDBC Driver 可以在这个网站下载https://bitbucket.org/xerial/sqlite-jdbc/overview,当前稳定版本sql ...