High Performance MySQL, Third Edition
by Baron Schwartz, Peter Zaitsev, and Vadim Tkachenko
 
http://dev.mysql.com/doc/refman/5.7/en/charset-general.html
 DROP TABLE IF EXISTS `w_ci_bin_cs`;
CREATE TABLE `w_ci_bin_cs` (
`pkey` int(11) NOT NULL AUTO_INCREMENT,
`w` char(255) NOT NULL DEFAULT 'W',
`w_ci` char(255) NOT NULL DEFAULT 'a',
`w_bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'bin',
`w_ci_bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT 'ci_bin',
`w__bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '__bin',
PRIMARY KEY (`pkey`)
) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8; -- ----------------------------
-- Records of w_ci_bin_cs
-- ----------------------------
INSERT INTO `w_ci_bin_cs` VALUES ('', 'w', 'a', 'bin', 'ci_bin', '__bin');
INSERT INTO `w_ci_bin_cs` VALUES ('', 'W', 'A', 'BIN', 'CI_BIN', 'BIN');
 mysql> SELECT * FROM w_ci_bin_cs;
+------+---+------+-------+----------+--------+
| pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
+------+---+------+-------+----------+--------+
| 1 | w | a | bin | ci_bin | __bin |
| 2 | W | A | BIN | CI_BIN | BIN |
+------+---+------+-------+----------+--------+
2 rows in set (0.00 sec) mysql> SELECT * FROM w_ci_bin_cs WHERE w='w';
+------+---+------+-------+----------+--------+
| pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
+------+---+------+-------+----------+--------+
| 1 | w | a | bin | ci_bin | __bin |
| 2 | W | A | BIN | CI_BIN | BIN |
+------+---+------+-------+----------+--------+
2 rows in set (0.00 sec) mysql> SELECT * FROM w_ci_bin_cs WHERE w_ci='a';
+------+---+------+-------+----------+--------+
| pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
+------+---+------+-------+----------+--------+
| 1 | w | a | bin | ci_bin | __bin |
| 2 | W | A | BIN | CI_BIN | BIN |
+------+---+------+-------+----------+--------+
2 rows in set (0.00 sec) mysql> SELECT * FROM w_ci_bin_cs WHERE w_bin='BIN';
+------+---+------+-------+----------+--------+
| pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
+------+---+------+-------+----------+--------+
| 2 | W | A | BIN | CI_BIN | BIN |
+------+---+------+-------+----------+--------+
1 row in set (0.00 sec) mysql>
 
 
 

11.1.1 Character Sets and Collations in General

A character set is a set        of symbols and encodings. A         collation is a set of        rules for comparing characters in a character set. Let's make        the distinction clear with an example of an imaginary character        set.

Suppose that we have an alphabet with four letters:         A, B,         a, b. We give each letter        a number: A = 0, B = 1,         a = 2, b = 3. The letter         A is a symbol, the number 0 is the         encoding for         A, and the combination of all four letters        and their encodings is a character        set.

Suppose that we want to compare two string values,         A and B. The simplest way        to do this is to look at the encodings: 0 for         A and 1 for B. Because 0        is less than 1, we say A is less than         B. What we've just done is apply a collation        to our character set. The collation is a set of rules (only one        rule in this case): “compare the encodings.” We        call this simplest of all possible collations a         binary collation.

But what if we want to say that the lowercase and uppercase        letters are equivalent? Then we would have at least two rules:        (1) treat the lowercase letters a and         b as equivalent to A and         B; (2) then compare the encodings. We call        this a case-insensitive        collation. It is a little more complex than a binary collation.

In real life, most character sets have many characters: not just         A and B but whole        alphabets, sometimes multiple alphabets or eastern writing        systems with thousands of characters, along with many special        symbols and punctuation marks. Also in real life, most        collations have many rules, not just for whether to distinguish        lettercase, but also for whether to distinguish accents (an         “accent” is a mark attached to a character as in        German Ö), and for multiple-character        mappings (such as the rule that Ö =         OE in one of the two German collations).

MySQL can do these things for you:

  • Store strings using a variety of character sets.

  • Compare strings using a variety of collations.

  • Mix strings with different character sets or collations in            the same server, the same database, or even the same table.

  • Enable specification of character set and collation at any            level.

To use these features effectively, you must know what character        sets and collations are available, how to change the defaults,        and how they affect the behavior of string operators and        functions.

//极简原则 KEEP IT SIMPLE

For sanity’s sake, it’s best to choose sensible defaults on the server level, and perhaps on the database level. Then you can deal with special exceptions on a case-by-case basis, probably at the column level.
 
 

_cs, _ci, or _bin,的更多相关文章

  1. MySQL字符集

    字符集的选择 1.如果数据库只需要支持中文,数据量很大,性能要求也很高,应该选择双字节定长编码的中文字符集(如GBK).因为相对于UTF-8而言,GBK"较小",每个汉字只占2个字 ...

  2. [MySQL Reference Manual] 10 全球化

    10.全球化 本章主要介绍全球化,包含国际化和本地化,的一些问题: ·         MySQL在语句中支持的字符集 ·         如何为服务配置不同的字符集 ·         选择错误信息 ...

  3. mysql笔记04 MySQL高级特性

    MySQL高级特性 1. 分区表:分区表是一种粗粒度的.简易的索引策略,适用于大数据量的过滤场景.最适合的场景是,在没有合适的索引时,对几个分区进行全表扫描,或者是只有一个分区和索引是热点,而且这个分 ...

  4. 9.Mysql字符集

    9.字符集9.1 字符集概述 字符集就是一套文字符号及其编码.比较规则的集合. ASCII(American Standard Code for Information Interchange)字符集 ...

  5. MySQL 支持utf8mb4

    utf8mb4 utf8mb3 utf8 Refer to The utf8mb4 Character Set The utf8 Character Set (Alias for utf8mb3) M ...

  6. mysql字符集和字符排序

    mysql的字符集和字符序:    字符序:字符序(Collation)是指在同一字符集内字符之间的比较规则    一个字符序唯一对应一种字符集,但一个字符集可以对应多种字符序,其中有一个是默认字符序 ...

  7. Mysql系列-字符集

    字符集 怎样选择合适的字符集 如果应用程序需要发布到很多国家和地区,需要支持各种各样的文字,则选择Unicode编码,Mysql中即UTF-8.q如果需要将数据导入数据库,这时候要注意数据库字符集对数 ...

  8. 数据库_11_1~10总结回顾+奇怪的NULL

    校对集问题: 比较规则:_bin,_cs,_ci利用排序(order by) 另外两种登录方式: 奇怪的NULL: NULL的特殊性:

  9. 干货:鲜为人用的MySQL高级特性与玩法!

    上一篇文章<万字总结:学习MySQL优化原理,这一篇就够了!>文末给大家留有两个开放的问题: 有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护, ...

随机推荐

  1. 找不同diff-打补丁patch

    Q:为什么要找不同,为什么要打补丁? A: 在Linux应用中,作为DBA,我们知道MySQL跑在Linux系统之上,数据库最重要的追求就是性能,“稳”是重中之重,所以不能动不动就是换系统或是换这换那 ...

  2. UnicodeEncodeError: ‘gbk’ codec can’t encode character u’\u200e’ in position 43: illegal multib

    [问题] 在执行代码时,提示上述错误,源码如下: # 下载小说... def download_stoy(crawl_list,header): # 创建文件流,将各个章节读入内存 with open ...

  3. Java使用dom4j读取xml时报错:org.dom4j.DocumentException: Error on line 2 of document : Invalid byte 2 of 2-byte UTF-8 sequence. Nested exception: Invalid byte 2 of 2-byte UTF-8 sequence

    1.Java使用dom4j读取xml时报错: org.dom4j.DocumentException: Error on line 2 of document  : Invalid byte 2 of ...

  4. socket.io websocket

    不能不知道的事: 在Http协议中,客户端向服务器端发送请求,服务器端收到请求再进行回应,整个过程中,服务器端是被动方,客户端是主动方: websoket是H5的一种基于TCP的新通信协议,它与Htt ...

  5. 中间件系列三 RabbitMQ之交换机的四种类型和属性

    概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...

  6. php的session问题总结

    1. 看文档发现,在session的configure option中有三个关于gc的,分别是: session.gc_probability "1" PHP_INI_ALL se ...

  7. delphi 10 Seattle 第一个Android程序

    delphi 10 Seattle 第一个Android程序 1.打开Delphi RAD Studio Seattle,如下图     2.选择black application 点击OK   3. ...

  8. slideout

    这里在原有slideout.js增加了shade的遮罩功能 核心: 1,此插件的使用需要配合dom来用: <!-- 左边 --> <nav id="menu" c ...

  9. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)

    题目链接 :https://leetcode.com/problems/search-in-rotated-sorted-array/?tab=Description   Problem :当前的数组 ...

  10. jquery validate 多种使用方式

    前言:jQuery.validator是一款非常不错的表单验证插件,验证方式非常简单方便,它还对HTML5做了兼容处理,了解了验证规则,就基本掌握了它的使用,下面就让我一一道来 jQuery.vali ...