MySQL的字符集和排序方式

字符串类型

MySQL的字符串分为两大类:

1)二进制字符串:即一串字节序列,对字节的解释不涉及字符集,因此它没有字符集和排序方式的概念

2)非二进制字符串:由字符构成的序列,字符集用来解释字符串的内容,排序方式决定字符的大小

字符集和排序方式

字符集和排序方式的关系是这样的:一个字符集可以有一个或多个排序方式,有一个默认的排序方式,我们可以通过 以下例子说明:

mysql> show character set like '%gbk%';
+---------+------------------------+-------------------+--------+
| Charset | Description            | Default collation | Maxlen |
+---------+------------------------+-------------------+--------+
| gbk     | GBK Simplified Chinese | gbk_chinese_ci    |      2 |
+---------+------------------------+-------------------+--------+
1 row in set (0.00 sec)  

mysql> show collation like '%gbk%';
+----------------+---------+----+---------+----------+---------+
| Collation      | Charset | Id | Default | Compiled | Sortlen |
+----------------+---------+----+---------+----------+---------+
| gbk_chinese_ci | gbk     | 28 | Yes     | Yes      |       1 |
| gbk_bin        | gbk     | 87 |         | Yes      |       1 |
+----------------+---------+----+---------+----------+---------+
2 rows in set (0.00 sec)

从上例中我们可以看出字符集gbk有两个排序方式(分别为gbk_chinese_ci何gbk_bin),其中默认的排序方式为 gbk_chinese_ci。

排序方式的命名规则为:字符集名字_语言_后缀,其中各个典型后缀的含义如下:

1)_ci:不区分大小写的排序方式

2)_cs:区分大小写的排序方式

3)_bin:二进制排序方式,大小比较将根据字符编码,不涉及人类语言,因此_bin的排序方式不包含人类语言

因此,gbk_chinese_ci排序方式就表示:字符集为gbk,人类语言使用中文来比较大小,比较时区分大小写。

常用函数

字符集引导

字符集引导可以让MySQL指定一种字符集来解释字符常量,其语法为:

_charset str

如:

_utf8 'ABCD'   表示以utf8字符集来介绍字符串常量'ABCD'

字符集转换

convert()函数可以把一个字符串转换成指定字符集,其语法为:

convert(str using charset)

如 convert('ABCD' using utf8)  表示把'ABCD'的字符集转换成uft8

length()函数  --返回字节的长度

char_length()  --返回字符长度

与字符集有关的系统变量

通过以下语句可以查看与字符集有关的系统变量:

mysql> show variables like 'character\_set\_%';
+--------------------------+--------+
| Variable_name            | Value  |
+--------------------------+--------+
| character_set_client     | latin1 |
| character_set_connection | latin1 |
| character_set_database   | gbk    |
| character_set_filesystem | binary |
| character_set_results    | latin1 |
| character_set_server     | gbk    |
| character_set_system     | utf8   |
+--------------------------+--------+
7 rows in set (0.01 sec)  

mysql> show variables like 'collation\_%';
+----------------------+-------------------+
| Variable_name        | Value             |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database   | gbk_chinese_ci    |
| collation_server     | gbk_chinese_ci    |
+----------------------+-------------------+
3 rows in set (0.00 sec)

它们的含义如下:

character_set_system:MySQL数据库标识符使用的字符集,永远是utf8

character_set_server和collation_server:服务器的默认字符集和排序方式

character_set_database和collation_database:当前数据库的默认字符集和排序方式
以下三个变量将影响客户端和服务器之间的通信:

character_set_client:客户端向服务器发送SQL语句使用的字符集

character_set_results:服务器向客户端返回结果时使用的字符集

character_set_connection:如果它和character_set_client不同,从客户端发来的SQL语句将转换为它指定的字符 集

默认情况下,上述三个变量都设为为相同的值,如果某个客户端想使用另一种字符集与服务器通信,可以修改它们, 如:

set character_set_client = utf8;
set character_set_results = utf8;
set character_set_connection = utf8;

或者,更简单的方法是使用如下一条语句也能达到相同的效果:

set names 'utf8';

查看本栏目更多精彩内容:http://www.bianceng.cn/database/MySQL/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索字符串排序
, 字符串
, 排序
, 字符集
, gbk
, 字符
, mysql排序
, 方式
, 字符排序
, gbk字符集
character_set_client
mysql字符集排序规则、mysql 默认排序方式、mysql 排序方式、字符集 排序规则、数据库字符集排序规则,以便于您获取更多的相关知识。

时间: 2024-12-03 13:35:02

MySQL的字符集和排序方式的相关文章

字符集和编码方式的问题

问题描述 请教各位大侠,字符集和编码方式有什么区别和关联呢?昨晚看到这样的几句话"UNICODE字符集有多个编码方式,分别是UTF-8,UTF-16,UTF-32和UTF-7编码",一直以为UNICODE,UTF-8都是字符集,看了这以后迷惑了,请教各位解惑?另外还有一个问题,iso8859-1只有255字符,为什么还能显示中文呢?编码是不是就是一种寻址方式?

MySQL字符集和校对规则(Collation)

MySQL字符集和校对规则(Collation) 阅读目录:MySQL的字符集和校对规则 MySQL的字符集 MySQL与字符集 正确使用字符集 MySQL客户端与字符集 字符集编码转换原理 字符集常见处理操作 字符集的正确实践 MySQL的校对规则 一.字符集(Character set) 是多个字符(英文字符,汉字字符,或者其他国家语言字符)的集合,字符集种类较多,每个字符集包含的字符个数不同. 特点: ①字符编码方式是用一个或多个字节表示字符集中的一个字符 ②每种字符集都有自己特有的编码方

《MySQL DBA修炼之道》——3.7 字符集和国际化支持

3.7 字符集和国际化支持 3.7.1 什么是字符集 字符集(character set)是一套符号和编码.校对规则(collation)是在字符集内用于比较字符的一套规则,即字符集的排序规则. 假设我们有一个字母表使用了4个字母:'A'.'B'.'a'.'b'.现在为每个字母赋予一个数值:'A'=0,'B'= 1,'a'= 2,'b'= 3,字母'A'是一个符号,数字0是'A'的编码,那么这4个字母和它们的编码组合在一起就是一个字符集.我们可以认为字符集是字符的二进制的编码方式,即二进制编码到

高性能的MySQL(7)字符集和校对概述

字符集是指一种从二进制编码到某类字符符号的映射,可以参考如何使用一个字节来表示英文. 校对是指一组用于某个字符集的排序规则. 每一类编码字符都有其对应的字符集和校对规则. 一.MySQL如何使用字符集 每种字符集都可能有多种校对规则,并且都有一个默认的校对规则,并且每个校对规则只是针对某个字符集,和其他的字符集么有关系. 一定要记住一点:只有基于字符集的值才真正的有字符集的概念. MySQL的设置可以分为两类: 1.创建对象时的默认值 服务器有默认的字符集和校对规则,数据也有自己的默认值,每个表

MySQL · 实现分析 · 对字符集和字符序支持的实现

前言 在使用MySQL数据库的时候,常常会发现由于charset或collation设置不正确导致的各种问题.一方面由于数据在client和server之间传输需要做转换会导致CPU使用率增加:另一方面由于charset或collation设置的不一致在查询过程中无法使用索引而导致全表扫描.比如数据库的charset是utf8,collation是utf8_general_ci,而client或connection设置的collation是utf8_unicode_ci,就会导致性能问题.所以我

MySQL字符集和copy_and_convert

关于copy_and_convert     在对MySQL做业务压力测试的时候,我们在perf结果中发现 copy_and_convert 是一个耗费cpu的操作.这个函数的意思,就是在字符集之间做内容转换.     如果源和目标的字符集相同,就可以直接用memcpy,这显然比做字符集转换(按字节或字长拷贝更快,和节省cpu)  当整个系统是CPU瓶颈时,我们希望能够减少这种cpu消耗.    一次查询涉及的拷贝     如果我们执行一个简单的select语句,会涉及到两部分的内容:metad

从排序原理到MYSQL中的排序方式

本文参考MYSQL官方文档,算法书籍,部分为自己观点可能有误,如果有误请指出共同讨论 转载请说明出处,谢谢! 一.MYSQL排序可能用到的排序算法 从MYSQL官方文档和源码的接口来看MYSQL使用BUFFER内部快速排序算法,外部多路归并排序算法,相应的接口函数为 filesort()函数,注意filesort()是一个总的接口,内部排序实际调用save_index()下的std::stable_sort\std::sort.归并排序 也包含在下面接口可能为merge_many_buff(),

Mysql的连接字符集和校对

一些字符集和校对规则系统变量与客户端和服务器的交互有关.在前面的章节中已经提到过部分内容: ·服务器字符集和校对规则可以用作character_set_server和collation_server变量的值. ·默认数据库的字符集和校对规则可以用作character_set_database和collation_database变量的值. 在客户端和服务器的连接处理中也涉及了字符集和校对规则变量.每一个客户端有一个连接相关的字符集和校对规则变量. 考虑什么是一个"连接":它是连接服务器

关于ORACLE和MYSQL中文字符乱码的根源剖析

关于数据库的字符集问题一直都是一个比较恶心的问题,如果不了解其实质可能一直 都搞不清楚这个问题的根源,只能出了问题去度娘,这里我打算兼容ORACLE和MYSQL对字符集 的处理来描述乱码出现的情形和如何防止乱码问题出现的可能,本文只用UTF-8和GBK为 例子进行描述,请大家先记住'去'这个字的UTF8和GBK编码,因为整个文章将用'去'字为 例子进行讲述 GBK     UTF8   中文 C8A5    E58EBB  去 同时整篇文章数据库DATABASE端的字符集始终为UTF8 一般来讲