当前位置: 首页 > 编程日记 > 正文

mysql 数据库乱码

mysql 数据库乱码


转载自https://www.cnblogs.com/gne-hwz/p/8748028.html 如有侵权,请联系。

遇到这种情况,现有项目的数据库已经建好,数据表也已经创建完成。

问题来的,数据库不能插入中文,调试时候发现中文数据从发送请求到最后请求处理完成这些步骤,中文还没有发生乱码。

只有在存储到数据库后查询数据并显示才会乱码。

那么到此可以确定是mysql出现问题了。

那么应该怎么办呢?哈哈,当然是看我们的度娘啦!

看的下度娘解决方法是:

将数据库的编码修改为utf8编码格式,因为安装mysql默认使用的字符编码latin1

what?这个编码是什么鬼,见都没见过。

查了下,Latin1是ISO-8859-1的别名。因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃

这个latin1编码是单字节编码,而一般汉字是需要两个字节存储,所以这个编码格式不支持汉字。

接下来就看怎么改吧

数据库字符优先级有:系统级、数据库级、表级、字段。这5个优先级中字段优先级最高。举个列子。我们要向表中存储中文数据。如果表的字符编码是utf8,而字段的字符编码是latin1。那么如果我们存储中文还是会出现乱码,因为使用的编码是字段的字符编码latin1

在数据库创建时如果不设置数据库的默认字符编码,即缺省时会使用系统的字符编码latin1。创建表缺省时使用数据库的字符编码,字段同理。

从上面可以得出一个重要结论,创建数据库时一定要指定默认字符编码!

1、首先我们查看mysql数据库服务器,客户端,数据库连接,文件系统等的字符编码
show variables like '%char%';
+--------------------------+-------------------------------------+------
| Variable_name | Value |......
+--------------------------+-------------------------------------+------
| character_set_client | utf8 |...... -- 客户端字符集
| character_set_connection | utf8 |......
| character_set_database | latin1|...... -- 数据库字符集
| character_set_filesystem | binary |......
| character_set_results | utf8 |......
| character_set_server | latin1|...... -- 服务器字符集
| character_set_system | utf8 |......
| character_sets_dir | D:\MySQL Server 5.0\share\charsets |......
+--------------------------+-------------------------------------+------

默认安装完mysql数据库时,服务器和数据库使用的编码是latinn1编码格式。

这个上面没有问题,可以先不用考虑

网上看到很多人要修改这个系统级的字符编码,我也不知道什么原因,改完之后中文乱码问题就得到解决了

2、查看数据库的创建语句。以默认的数据库mysql为例

show create database mysql

可以发现其的default character set默认字符编码格式是latin1。由此可以看出,缺省时会自动使用latin1

所以我们需要在创建数据库时指定默认的编码格式

create database 数据库名 CHARACTER SET utf8 COLLATE utf8_general_ci;

修改已创建的数据库的编码

alter database 数据库表名 CHARACTER SET utf8 COLLATE utf8_general_ci;

3、查看数据库中匹配到的表的编码格式。

show table status from 数据库名 like 'pattern/匹配模式';

查看数据库中所有表的编码格式
show table status from mysql like '%%';

4、修改表的默认编码格式。有两种方法
alter table 表名 character set utf8 COLLATE utf8_general_ci;
alter table 表名 convert to character set utf8;
第一种是仅仅修改表的字符编码,而字段的字符编码还是latin1编码格式,这种改变没有意义,可以查看数据表中所有列的字符编码,就可以发现字段的字符编码是否发生改变。
show full columns from 表名;

第二种会将表和字段的编码都更改为utf8编码格式。

5、中文乱码问题得到解决的,但是数据库里那么多表,我们总不可能一个表一个表的进行修改吧,所以我们要使用存储过程,加动态sql语句的方式使用循环自动修改数据库内的所有数据表的编码格式。注意:如果修改完后中文存储还是乱码。将连接数据库的连接后面指定编码格式为utf8如果还是不行,那么将mysql默认的字符编码进行修改,即下面的characterEncoding

jdbcUrl = jdbc:mysql://主机域名:3306/数据库名?characterEncoding=utf8&useSSL=false&useUnicode=true

useSSL:与服务器进行通信时使用SSL,默认值为“假

参考主要参数,表数据来源Mysql JDBC Url参数说明

参数名称 参数说明 缺省值 最低版本要求
user 数据库用户名(用于连接数据库) 所有版本
password 用户密码(用于连接数据库) 所有版本
useUnicode 是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true false 1.1g
characterEncoding 当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk false 1.1g
autoReconnect 当数据库连接异常中断时,是否自动重新连接? false 1.1
autoReconnectForPools 是否使用针对数据库连接池的重连策略 false 3.1.3
failOverReadOnly 自动重连成功后,连接是否设置为只读? true 3.0.12
maxReconnects autoReconnect设置为true时,重试连接的次数 3 1.1
initialTimeout autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒 2 1.1
connectTimeout 和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本 0 3.0.1
socketTimeout socket操作(读写)超时,单位:毫秒。 0表示永不超时

转载于:https://www.cnblogs.com/jakaBlog/p/10565395.html

相关文章:

【C++】【二】动态数组-Dynamic_linklist

// dynamicArray.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdlib.h> #include <iostream>typedef struct DYNAMICARRAY {int* paddr;int size;int capacity; }dynamiCarray;dynamiCarray* Init_dynamiCarray() {dynam…

在MySQL和PostgreSQL之外,为什么阿里要研发HybridDB数据库?

编者按\\在大数据火遍IT界之前&#xff0c;大家对数据信息的挖掘通常聚焦在BI&#xff08;Business Intelligence&#xff09;之上。BI具有着明确的分析需求&#xff0c;清晰地知道需要处理哪些信息&#xff0c;并且如何最终获得多维度的SQL类型数据&#xff0c;这种多维度的分…

Linux命令-安装zip和unzip命令

1 [rootiz2zeea05by6vofxzsoxdbz elasticsearch]# unzip elasticsearch-6.2.4.zip 2 -bash: unzip: command not found 如果你如法使用unzip命令解压.zip文件&#xff0c;可能是你没有安装unzip软件&#xff0c;下面是安装方法 命令&#xff1a; yum list | grep zip/unzip …

【C++】【五】循环链表

数据结构&#xff1a;具体的高效有序的管理内存的方法。 链表&#xff1a;数据结构的一种 节点&#xff1a;每一块内存 每一个节点可以是裸指针 也可以是结构体 &#xff0c;结合企业链表的思路可以将类型强转&#xff0c;完成高效的访问。main.cc // 单向循环链表.cpp …

IntelliJ IDEA 设置项目编码

2019独角兽企业重金招聘Python工程师标准>>> IntelliJ IDEA-> Editor->File Encodings 转载于:https://my.oschina.net/bigxuan/blog/804345

util.sh 脚本

#!/bin/bash for i in zzzhadoop101 zzzhadoop102 zzzhadoop103 doecho " $i "ssh $i /opt/module/jdk1.8.0_144/bin/jps donebin目录是在环境变量里的&#xff0c;所以在哪都可以执行 /home/zzz/bin目录下touch util.sh [zzzhadoop101 bin]$ touch …

bzoj3467: Crash和陶陶的游戏

就一篇题解&#xff1a; BZOJ3467 : Crash和陶陶的游戏 - weixin_34248487的博客 - CSDN博客 1.离线&#xff0c;建出Atrie树&#xff1b;B树的倍增哈希数组&#xff0c;节点按照到根路径字典序排序 2.处理A节点对应前缀对应B中的极长可以匹配的区间。在父亲节点区间内二分即可…

载入图像并且显示

#include <opencv2/opencv.hpp> using namespace cv;void main( ) { const char *fileName "1.jpg";Mat srcImage imread("1.jpg");imshow(fileName,srcImage);waitKey(0); }

alter system switch logfile与alter system archive log current的区别

以前知道 ALTER SYSTEM SWITCH LOGFILE对单实例数据库或RAC中的当前实例执行日志切换&#xff0c; ALTER SYSTEM ARCHIVE LOG CURRENT会对数据库中的所有实例执行日志切换&#xff0c; 所以在RAC环境上大多时间一般使用后者&#xff0c;而今天遇到了不管执行多少次ALTER SYSTEM…

【C++】【六】约瑟夫问题

核心代码&#xff1a; int index 1;clinknode* pcur list->head.next;while (Size_circlelinkist(list)>1){if (index N) {mynum* temnum (mynum*)pcur;printf("%d ", temnum->val);clinknode* pnext pcur->next;RemoveByValue_circlelinkist(list…

第六章:内核数据结构

6.1链表链表表示一种存放和操作的可变数据元素的数据结构。链表与静态数组不同的是它包含的元素是动态创建并且插入链表的&#xff0c;在编译时不必知道具体需要多少个元素。另外链表中每个元素的创建时间各不相同&#xff0c;所以它们在内存中无需占用连续的空间。链表中每个元…

【C++】【七】栈的实现

栈的线性表实现 stack_liner_stack.h #ifndef STACK_LINER_H #define STACK_LINER_H #include <stdlib.h> #define MAX_SIZE 1024 #define stack_liner_false 0 #define stack_liner_true 1typedef struct STACK_LINER_H {void* data[MAX_SIZE];int size; }stack_liner…

推荐两款简单好用的图片放大jquery插件

一、zoomfiy.js 推荐可以从这里下载 使用说明&#xff1a; 使用该jquery 插件引入该插件的js:zoomfiy.js 或 min引入该插件的css:zoomfiy.css 或 min前后顺序都可js里加入 调用插件的函数 $(这里写要放大的图片).zoomify();如果有ajax 新生成的图片&#xff0c;要在ajax里再次调…

对图像的缩放与旋转

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" int main( ) {// 读取图像cv::Mat srcImage cv::imread("..\\images\\flower3.jpg");// 图像读取是否成功if( !srcImage.data ) return 1; // 对图像的缩放与旋…

工具库 --- Validator (JS正则)

工具库 --- Validator 今天写的是一个正则验证类 单例模式 工具库地址&#xff1a;github.com/WeForStudy/… npm地址&#xff1a;www.npmjs.com/package/slm… 单例模式 减少不必要的对象生存&#xff0c;减少资源的占用 由于只需要new一次&#xff0c;项目中其他项目共用一个…

【C++】【九】栈的应用

【C】【九】栈的应用 就近匹配原理及其步骤&#xff1a; 中缀转后缀&#xff1a;

linux中错误日志等级

info&#xff1a;仅是一些基本的讯息说明而已&#xff1b;notice&#xff1a;比 info 还需要被注意到的一些信息内容&#xff1b;warning 或 warn&#xff1a;警示讯息&#xff0c;可能有问题&#xff0c;但是还不至于影响到某个 daemon 作。err 或 error &#xff1a;一些重大…

Mat类简略结构

class CV_EXPORTS Mat { public&#xff1a;int flags; // 标志位 int dims ; // 数组的维数int rows,cols; uchar *data ; // 指向数据的指针int * refcount ; // 指针的引用计数器 阵列指向用户分配的数据时&#xff0c;当指针为 NULL };

数据结构之快速排序

首先快速排序&#xff1a;就是选择一个基数&#xff0c;然后从两端依次进行比较&#xff0c;若右边大于基数&#xff0c;则不进行交换&#xff0c;直到右边的数据小于基数&#xff0c;然后冲左边开始和基数比较&#xff0c;若左边的小于基数&#xff0c;则进行下一个比较&#…

【C++】【十】二叉树

树的基本概念&#xff1a; 树具有递归性&#xff0c;非线性 完全二叉树 &#xff1a;所有节点都在 举例&#xff1a; 递归遍历二叉树&#xff1a; #include <stdlib.h> #include <stdio.h> #include <iostream> #include<string.h>typedef struct B…

记一次网络共享打印机故障

刚开始去到办公室发现电脑之间的环境是XP跟WIN10查看共享主机发现没有监听139和445端口 然后在网卡属性把Microsoft网络客户端和Microsoft网络的文件和打印机共享删除重启 重新安装这两个客户端 发现虽然共享主机有监听端口 但是其他主机还是不能访问 最后检查发现主机之间的工…

Mat 类常用函数用法示例

#include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" #include <iostream> int main( ) {cv::Mat Image1( 10, 8, CV_8UC1, cv::Scalar(5) );// 矩阵行列数获取std::cout << "Image1 row: " << I…

记录智能指针使用shared_ptr使用错误

shared_ptr为智能指针&#xff0c;今天一次在使用shared_ptr时&#xff0c;错误的将其初始化方式写为shared_ptr<T> test shared_ptr<T>(),随后导致崩溃 正确做法是shared_ptr<T> test make_shared<T>() 或shared_ptr<T> test shared_ptr<…

【C++】【十一】二叉树递归遍历与非递归遍历的实现及思路

非递归遍历实现思路&#xff1a; #include <stdlib.h> #include <stdio.h> #include <iostream> #include <string.h>typedef struct LINKNODE {struct LINKNODE* next; }linknode;typedef struct LINKLIST {linknode head;int size; }stack_list;#…

定时调度模块:sched

定时调度模块:sched """A generally useful event scheduler class. 事件调度器类Each instance of this class manages its own queue. 类的每一个实例独立管理自己的队列 No multi-threading is implied; you are supposed to hack that yourself, or use a s…

Mat转换为IplImage 类型和CvMat 类型

cv::Mat img; CvMat cvMatImg img; IplImage IplImg img;转载&#xff1a;http://blog.csdn.net/zhuwei1988

大数据学习思路

学习大数据已经有一段时间了&#xff0c;抽空回顾一下自己学习的一些内容。下图主要为自己学习大数据的一个过程。 阶段一&#xff1a;Java基础 掌握JAVA基本语法、面向对象、集合、IO流、多线程、网络编程 阶段二&#xff1a;MySQL CRUD 阶段三&#xf…

【C++】【十二】排序实现及思路

掌握核心知识点&#xff1a; 1.插入排序在一下2种情况效率较高&#xff1a;1&#xff09;数据基本有序 2&#xff09;数据序列较少 希尔排序是在插入排序的基础上的改进。 2.快速排序 3.归并排序 4.堆排序&#xff1a;数据初始化为数据&#xff0c;根据完全二叉树&#…

Centos 不小心删除了openssl,导致无法使用sshd、yum、wget、curl 等软件的问题。。...

2019独角兽企业重金招聘Python工程师标准>>> 1、如果安装了FTP&#xff0c;可以使用FTP上传rpm到服务器进行安装&#xff1b; 2、挂载光驱cdrom到mnt文件夹下&#xff0c;进入package文件夹rpm进行安装&#xff1b; 3、有源码包进行源码安装&#xff1b; 4、自求多福…