在开发程序的时候,我们使用mysql数据库开发的时候,有时会碰到自己明明输入的是中文,为什么数据库中存储的就是????

1、在配置Connection URL时,加上?useUnicode=true&characterEncoding=utf-8

2、编辑/etc/my.cnf

在[mysqld]下添加

default-character-set=utf8

在[client]下添加

default-character-set=utf8

 

可是这样做的原理是什么?为什么这样做就能解决问题那?

逐步分析一下:

1、useUnicode=true这个用加吗?答案是不用,翻看connector-j-en.a4.pdf

它的默认值就是true

2、 mysqld 下的default_character_set=utf8;,这个需要吗?答案是不需要。查看refman-5.1

它的作用是

当启动mysqld时,根据使用的初始选项设置来确定服务器字符集和 校对规则。可以使用--default-character-set设置字符集;

如果在CREATE TABLE语句中没有指定表字符集和校对规则,则使用数据库字符集和校对规则作为默认值。默认数据库的字符集和校对规则可以用作character_set_database和 collation_database系统变量。无论何时默认数据库更改了,服务器都设置这两个变量的值。如果没有 默认数据库,这两个变量与相应的服务器级别的变量(character_set_server和collation_server)具有相同的值。

大白话就是:如果你建表的时候没有指定字符编码,则会使用character_set_database,如果character_set_database也没有设值,则使用character_set_server

3、 client 下的default_character_set=utf8; 它是需要的,可是它的作用是干吗的?

它的作用等同执行以下3个命令

SET character_set_client = utf8

SET character_set_results = utf8;

SET character_set_connection = utf8;

这3个参数的作用如下

系统变量character_set_client:用来指定解析客户端传递数据的编码

系统变量character_set_connection:用来指定数据库内部处理时使用的编码

系统变量character_set_results:用来指定数据返回给客户端的编码方式

现在讲述一下?useUnicode=true&characterEncoding=utf-8中的characterEncoding

它的作用就是指定character_set_client和character_set_connection的值,而在jdbc链接中使用characterSetResults=UTF-8,即可设置character_set_results的值

但是如上所述,当你配置了client的default_character_set之后,characterEncodingcharacterSetResults这两个变量你设置与否都不重要了。

 

结论如下:

如果你只愿意配置服务器的话:

在[client]下添加

default-character-set=utf8即可

如果你只愿意配置客户端的话:

你可以使用jdbc:mysql://localhost:3306/test? characterEncoding=UTF-8&characterSetResults=UTF-8即可

使用jdbc

character_set_client - utf8

character_set_connection - utf8

character_set_database - utf8

character_set_filesystem - binary

character_set_results -

character_set_server - utf8

character_set_system - utf8

character_sets_dir - /usr/share/mysql/charsets/

使用mysql客户端

character_set_client utf8

   

character_set_connection utf8

 

character_set_database utf8

   

character_set_filesystem binary

 

character_set_results utf8

   

character_set_server utf8

   

character_set_system utf8

   

character_sets_dir /usr/share/mysql/charsets/

mysql编码详解的更多相关文章

  1. mysql存储过程详解

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  2. mysql 存储过程详解 存储过程

    mysql存储过程详解 1.      存储过程简介         我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成 ...

  3. MySQL存储过程详解 mysql 存储过程

    原文地址:MySQL存储过程详解  mysql 存储过程作者:王者佳暮 mysql存储过程详解 1.     存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储 ...

  4. MySQL存储过程详解 mysql 存储过程(二)

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  5. MySQL字符集详解

    Reference:  https://www.cnblogs.com/wcwen1990/p/6917109.html MySQL字符集详解   一.字符集和校验规则 字符集是一套符合和编码,校验规 ...

  6. Python2.7字符编码详解

    目录 Python2.7字符编码详解 声明 一. 字符编码基础 1.1 抽象字符清单(ACR) 1.2 已编码字符集(CCS) 1.3 字符编码格式(CEF) 1.3.1 ASCII(初创) 1.3. ...

  7. MySQL存储过程详解 mysql 存储过程(转)

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

  8. mysql存储过程详解实例

    mysql存储过程详解 1.      存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL ...

  9. mysql存储过程详解及基于PHP使用实例

    mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的S ...

随机推荐

  1. hdu1828(线段树+扫描线)

    又知道了线段树的一种用法,除了单点更新,区间更新,还有这种在一段线段上标号但不往下推. 真是神奇 hdu1828 #include <iostream> #include <stdi ...

  2. SQL group by分组查询(转)

    本文导读:在实际SQL应用中,经常需要进行分组聚合,即将查询对象按一定条件分组,然后对每一个组进行聚合分析.创建分组是通过GROUP BY子句实现的.与WHERE子句不同,GROUP BY子句用于归纳 ...

  3. (转)FirstResponder 释放问题

    FirstResponder 释放问题 转自:http://www.cnblogs.com/smileEvday/archive/2012/03/18/2405190.html View的FirstR ...

  4. python执行mysqldump命令

    本文简单讲述如何利用python执行一些sql语句,例如执行mysqldump命令,进行数据库备份,备份成sql文件 #!/usr/bin/python#导入os模块import os#导入时间模块i ...

  5. IOS中微博正文开发步骤总结

    微博正文开发步骤总结 1.新建正文控制器,在点击首页的某一条微博时跳转过去 2.在MainController中设置导航控制器的代理,监听所有导航控制器的跳转 1> 如果即将显示的不是根控制器 ...

  6. [反汇编练习] 160个CrackMe之026

    [反汇编练习] 160个CrackMe之026. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...

  7. matlab注释使用,以及相应的注释快捷键

    1.多行注释 单行注释是加% %{ 若干语句 %} 2.快捷键 多行注释: 选中要注释的若干语句, 编辑器菜单Text-<Comment, 或者快捷键Ctrl+R 取消注释: 选中要取消注释的语 ...

  8. 【英语】Bingo口语笔记(22) - Talk系列

    talk back 顶嘴 talk somebody in to something 劝某人做某事 tal somebody out of something 劝某人不做某事

  9. KVM虚拟化技术简介

    kernel-based Virtual Machine的简称,是一个开源的系统虚拟化模块,自Linux 2.6.20之后集成在Linux的各个主要发行版本中.它使用Linux自身的调度器进行管理,所 ...

  10. 【转】iOS 开发之协议protocal-代理传值delegate

    原文网址:http://www.cnblogs.com/wzrong/p/3201938.html 刚开始做iOS开发的时候,对 protocol.delegate 的理解一直都是晕晕乎乎一知半解的状 ...