mysql的collation

mysql的collation大致的意思就是字符序。首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则。collation做的就是这个事情,你可以对表进行字符序的设置,也可以单独对某个字段进行字符序的设置。一个字符类型,它的字符序有多个,比如:

下面是UTF8对应的字符序。

utf8_general_ci utf8    33  Yes Yes 1
utf8_bin    utf8    83      Yes 1
utf8_unicode_ci utf8    192     Yes 8
utf8_icelandic_ci   utf8    193     Yes 8
utf8_latvian_ci utf8    194     Yes 8
utf8_romanian_ci    utf8    195     Yes 8
utf8_slovenian_ci   utf8    196     Yes 8
utf8_polish_ci  utf8    197     Yes 8
utf8_estonian_ci    utf8    198     Yes 8
utf8_spanish_ci utf8    199     Yes 8
utf8_swedish_ci utf8    200     Yes 8
utf8_turkish_ci utf8    201     Yes 8
utf8_czech_ci   utf8    202     Yes 8
utf8_danish_ci  utf8    203     Yes 8
utf8_lithuanian_ci  utf8    204     Yes 8
utf8_slovak_ci  utf8    205     Yes 8
utf8_spanish2_ci    utf8    206     Yes 8
utf8_roman_ci   utf8    207     Yes 8
utf8_persian_ci utf8    208     Yes 8
utf8_esperanto_ci   utf8    209     Yes 8
utf8_hungarian_ci   utf8    210     Yes 8
utf8_sinhala_ci utf8    211     Yes 8
utf8_german2_ci utf8    212     Yes 8
utf8_croatian_ci    utf8    213     Yes 8
utf8_unicode_520_ci utf8    214     Yes 8
utf8_vietnamese_ci  utf8    215     Yes 8
utf8_general_mysql500_ci    utf8    223     Yes 1

mysql的字符序遵从命名惯例。以_ci(表示大小写不敏感),以_cs(表示大小写敏感),以_bin(表示用编码值进行比较)。比如:

CREATE TABLE `issue_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

这个表下面的两个sql会出现同样的结果

select * from issue_message where content = 'Yes'
select * from issue_message where content = 'yes'

如果改成下面的定义:

CREATE TABLE `issue_message` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `content` varchar(255) NOT NULL COLLATE utf8_bin,
  PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

那么两个sql结果就会不一样了

所以,如果对字符大小敏感的话,最好将数据库中默认的utf8_general_ci设置为utf8_bin。

时间: 2024-10-01 09:32:12

mysql的collation的相关文章

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

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

MySQL的字符集和排序方式

字符串类型 MySQL的字符串分为两大类: 1)二进制字符串:即一串字节序列,对字节的解释不涉及字符集,因此它没有字符集和排序方式的概念 2)非二进制字符串:由字符构成的序列,字符集用来解释字符串的内容,排序方式决定字符的大小 字符集和排序方式 字符集和排序方式的关系是这样的:一个字符集可以有一个或多个排序方式,有一个默认的排序方式,我们可以通过 以下例子说明: mysql> show character set like '%gbk%'; +---------+----------------

《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 DBA修炼之道》——2.5 常用命令

2.5 常用命令 本节先介绍几个常用命令,如mysql.mysqladmin.mysqldump的简单用法.后续章节还会再详述这些命令的使用.2.5.1 使用mysql命令 首先,需要留意区分MySQL的大小写.标准的说法是,MySQL指MySQL服务器,mysql指客户端. 从Unix/Linux系统下发展出来的MySQL有着优良的设计,客户工具的所有选项都可以保存到一个"-/.my.cnf"的用户级配置文件里的[client]部分中,而且它把适用于MySQL的选项集中在了[MySQ

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

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

mysql欧洲国家的文字乱码?英语、中文没有乱码是什么原因呢?

问题描述 [举例]波兰语Śląskie中的Ś和ą字母显示的是?1.修改配置文件my.ini里的:default-character-set = utf8character-set-server = utf82.命令行设置:mysql> show variables like 'character%';+--------------------------+---------------------------------------------------------+| Variable_na

MySQL笔记之系统信息函数详解_Mysql

系统信息函数用来查询mysql数据库的系统信息 VERSION()返回数据库版本号 复制代码 代码如下: mysql> SELECT VERSION();+-------------------------+| VERSION()               |+-------------------------+| 5.5.28-0ubuntu0.12.10.2 |+-------------------------+ row in set (0.00 sec) 我这里用的是基于ubuntu发

mysql 字符集

基本概念 查看可用字符集 mysql> show character set; +----------+-----------------------------+---------------------+--------+ | Charset | Description | Default collation | Maxlen | +----------+-----------------------------+---------------------+--------+ | big5

mysql字符集编码设置与查看命令

最近,在项目组使用的mysql数据库中,插入数据出现乱码,关于这个问题做了下总结,我们从最基本的地方说起,到错误产生的深层次原因和解决办法. 基本概念:• 字符(Character)是指人类语言中最小的表义符号.例如'A'.'B'等: • 给定一系列字符,对每个字符赋予一个数值,用数值来代表对应的字符,这一数值就是字符的编码(Encoding).例如,我们给字符'A'赋予数值0,给字符'B'赋予数值1,则0就是字符'A'的编码: • 给定一系列字符并赋予对应的编码后,所有这些字符和编码对组成的集