字符集、字符序的概念与联系

在数据的存储上,MySQL提供了不同的字符集支持。而在数据的对比操作上,则提供了不同的字符序支持。

MySQL提供了不同级别的设置,包括server级、database级、table级、column级,可以提供非常精准的设置。

什么是字符集、字符序?简单的来说:

字符集(character set):定义了字符以及字符的编码。

字符序(collation):定义了字符的比较规则。

举个例子:

有四个字符:A、B、a、b,这四个字符的编码分别是A = 0, B = 1, a = 2, b = 3。这里的字符 + 编码就构成了字符集(character set)。

如果我们想比较两个字符的大小呢?比如A、B,或者a、b,最直观的比较方式是采用它们的编码,比如因为0 < 1,所以 A < B。

另外,对于A、a,虽然它们编码不同,但我们觉得大小写字符应该是相等的,也就是说 A == a。

这上面定义了两条比较规则,这些比较规则的集合就是collation。

同样是大写字符、小写字符,则比较他们的编码大小;

如果两个字符为大小写关系,则它们相等。

字符集涉及数据库配置(character_set_database)、数据表配置(默认继承数据库,也可以修改)、列配置(类型为CHAR、VARCHAR、TEXT的列,可以指定字符集/字符序)、server端配置(character_set_server,所有字符最后存储时,使用的编码字符集)、client端配置(character_set_client)、连接端配置(character_set_connection)

character_set_client 是指客户端发送过来的语句的编码;

character_set_connection 是指mysqld收到客户端的语句后,要转换到的编码;

而 character_set_results 是指server执行语句后,返回给客户端的数据的编码

使用命令查看配置:show variables like 'char%';和 show variables like 'collation_%';

我自己配置的字符集,真是乱极了,所以很容易出现乱码问题

DBA配置的:

使用客户端工具Navicat for MySql连接数据库时指定下面选项后,就可以设置数据表的字符集设置

可以修改数据表的字符集

命令行连接时,设置客户端字符集的方法(使用mysql --help查看更多可用选项):

mysql -h127.0.0.1 -uroot -proot  --default-character-set=utf8mb4

连接后可以看到如下设置情况:

可以在客户端连接里临时修改配置,比如:set @@collation_server=utf8mb4_general_ci;但是这个配置断开后就失效,对其他客户端连接也没有影响。要想全局修改,就得修改配置文件,然后重启mysql。

感受下命令行SET NAMES UTF8;的威力,一次可以设置三个配置。

set names 设置的3个变量就是设置mysqld和客户端通信时,mysqld应该如何解读client发来的字符,以及返回给客户端什么样的编码。

修改配置文件,以mac的xampp配置举例,执行xamppCli进入配置目录,然后修改配置

设置server:

查看结果,数据库也跟着改变,因为数据库的默认字符集继承server:

sqlalchemy做为客户端的字符集设置:

engine = create_engine('mysql+pymysql://user:password@ip:port/db?charset=utf8mb4', echo=False, pool_size=350,max_overflow=50,pool_recycle=300,pool_timeout=60)

show create table talbe_name;可以查看table的创建信息

collation_server服务端字符序:

utf8mb4_bin, utf8mb4_general_ci, utf8_bin, utf8_general_ci

ci 代表: casesensitive ignore 排序时不考虑大小写;而 _bin 结尾的排序时考虑大小写。

遗漏问题:

1、不知道navicat for mysql做为客户端连接mysql的时候,如何设置客户端字符集的

总结:

1、server端设置:character_set_server=utf8mb4

2、客户端连接时带上配置:mysql -h127.0.0.1 -uroot -proot  --default-character-set=utf8mb4

参考:

1、http://mysql.taobao.org/monthly/2015/05/07/

2、https://www.cnblogs.com/chyingp/p/mysql-character-set-collation.html

3、https://www.cnblogs.com/digdeep/p/5228199.html

mysql 特殊字符集_特殊汉字“”引发的对于字符集的思考;mysql字符集;sqlalchemy字符集设置;客户端字符集设置;...相关推荐

  1. mysql set语句_不得不注意!那些容易被忽视的MySQL字符集问题?

    现象 在使用MySQL客户端书写SQL语句的时候,我们可以在字符串前边加_charset_name的符号,其中的charset_name对应着某个具体的字符集,废话不多说,先写两个例子看一下: mys ...

  2. mysql names gb2312_mysql_query(set names gb2312)设置客户端字符集

    $conn=mysql_connect("localhost","root","123456"); mysql_select_db(&quo ...

  3. mysql 高级知识点_这是我见过最全的《MySQL笔记》,涵盖MySQL所有高级知识点!...

    作为运维和编程人员,对MySQL一定不会陌生,尤其是互联网行业,对MySQL的使用是比较多的.MySQL 作为主流的数据库,是各大厂面试官百问不厌的知识点,但是需要了解到什么程度呢?仅仅停留在 建库. ...

  4. 马哥 mysql教学笔记_【马哥linux学员学习笔记】MySQL多实例详解

    本文作者系马哥linux学员云中鹤. 学习联系QQ:1660809109.1661815153.2813150558 马哥Linux运维 更多资讯:www.magedu.com 目录 一.基本概念 1 ...

  5. 2台mysql集群_如何安装配置基于2台服务器的MySQL集群

    这篇文章旨在介绍如何安装配置基于2台服务器的MySQL集群.并且实现任意一台服务器出现问题或宕机时MySQL依然能够继续运行. 注意!虽然这是基于2台服务器的MySQL集群,但也必须有额外的第三台服务 ...

  6. mysql rds 迁移_数据库迁移:如何将数据库从本地MySQL迁移到服务器RDS上?

    使用 数据传输服务 DTS 可以将本地 MySQL 实例的数据迁移到 RDS for MySQL 实例.数据传输服务 DTS (以下简称 DTS) 提供的增量数据同步功能,可以实现在本地应用不停服的情 ...

  7. php mysql 网站 任务书_办公用品网上商城的设计与实现PHP+MYSQL任务书

    办公用品网上商城的设计与实现PHP+MYSQL任务书 毕业设计(论文)任务书 题 目 办公用品网上商城的设计与实现 起讫日期 2013年 3月 25 日 至 2013年 6 月28 日 学生姓名 专业 ...

  8. mysql geo 函数_【后端开发】地理位置geo处理之mysql函数的详细介绍(附代码)

    本篇文章给大家带来的内容是关于地理位置geo处理之mysql函数的详细介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 目前越来越多的业务都会基于LBS,附近的人,外卖位 ...

  9. asp.net mysql 创建变_[ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型...

    [ASP.net教程]EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型 0 2018-06-30 07:00:08 官方教程: ...

最新文章

  1. 【VS Code】vue.js ESLint + vscode 代码格式配置
  2. CSS 基础知识(二)
  3. 局域网聊天工具的设计与实现 java设计代写代做代码源代码
  4. Linux centos openshift安装教程整理
  5. 系列文章----.Net程序员学用Oracle系列
  6. plus 什么是mybais_谈谈自己用mybatis-plus中的一些经验。
  7. 简易的实现对象内存池
  8. 现在好多人做 局域网聊天
  9. js layui跳转页面_layui自己添加图片按钮并点击跳转页面的例子
  10. 最受欢迎web前端技术总结
  11. 405 - 不允许用于访问此页的 HTTP 谓词的处理办法
  12. Heavyocity PUNISH Lite for Mac - 虚拟自动音频增强效果器
  13. 国产三维CAD/CAM软件SINOVATION10.2版本发布,亮点功能抢先看!
  14. 设计主导型思维在商业领域的崛起,将对创意职业产生积极的溢出效应
  15. 在UBUNTU 13.1 中使用五笔拼音混合输入法
  16. 总会用到的系列2:你不理财财不理你的基金定投
  17. 迷你世界显示服务器超时,迷你世界因出现不良信息下架 迷你世界下架原因
  18. 学习笔记之 初试Linux遇到的问题
  19. 【待更新】【Rockchip】瑞芯微/rockchip 开发环境搭建|编译|烧录 开发实例
  20. ffmpeg将mov格式的视频转换成mp4格式

热门文章

  1. 基于结构的虚拟筛选模型 gnina 从源码编译
  2. DbVisualizer 12.0.* Ubuntu
  3. 配置一台用于深度学习的个人工作站系统的实验记录[主机可以买现成的或自己配,裸机即可]
  4. python dataframe中缺失值处理
  5. Java中BigDecimal类型的加减乘除及大小比对
  6. db2 表添加字段及注释操作
  7. c/c++教程 - 1.5 运算符
  8. 记坑 ----- Arrays.sort()
  9. Python怎么去写单元测试用例去测试hello world呢
  10. jQuery中的筛选(六):first()、last()、has()、is()、find()、siblings()等