_cs, _ci, or _bin,

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

 1 DROP TABLE IF EXISTS `w_ci_bin_cs`;
 2 CREATE TABLE `w_ci_bin_cs` (
 3   `pkey` int(11) NOT NULL AUTO_INCREMENT,
 4   `w` char(255) NOT NULL DEFAULT ‘W‘,
 5   `w_ci` char(255) NOT NULL DEFAULT ‘a‘,
 6   `w_bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘bin‘,
 7   `w_ci_bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘ci_bin‘,
 8   `w__bin` char(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT ‘__bin‘,
 9   PRIMARY KEY (`pkey`)
10 ) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
11
12 -- ----------------------------
13 -- Records of w_ci_bin_cs
14 -- ----------------------------
15 INSERT INTO `w_ci_bin_cs` VALUES (‘1‘, ‘w‘, ‘a‘, ‘bin‘, ‘ci_bin‘, ‘__bin‘);
16 INSERT INTO `w_ci_bin_cs` VALUES (‘2‘, ‘W‘, ‘A‘, ‘BIN‘, ‘CI_BIN‘, ‘BIN‘);
 1 mysql> SELECT * FROM w_ci_bin_cs;
 2 +------+---+------+-------+----------+--------+
 3 | pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
 4 +------+---+------+-------+----------+--------+
 5 |    1 | w | a    | bin   | ci_bin   | __bin  |
 6 |    2 | W | A    | BIN   | CI_BIN   | BIN    |
 7 +------+---+------+-------+----------+--------+
 8 2 rows in set (0.00 sec)
 9
10 mysql> SELECT * FROM w_ci_bin_cs WHERE w=‘w‘;
11 +------+---+------+-------+----------+--------+
12 | pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
13 +------+---+------+-------+----------+--------+
14 |    1 | w | a    | bin   | ci_bin   | __bin  |
15 |    2 | W | A    | BIN   | CI_BIN   | BIN    |
16 +------+---+------+-------+----------+--------+
17 2 rows in set (0.00 sec)
18
19 mysql> SELECT * FROM w_ci_bin_cs WHERE w_ci=‘a‘;
20 +------+---+------+-------+----------+--------+
21 | pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
22 +------+---+------+-------+----------+--------+
23 |    1 | w | a    | bin   | ci_bin   | __bin  |
24 |    2 | W | A    | BIN   | CI_BIN   | BIN    |
25 +------+---+------+-------+----------+--------+
26 2 rows in set (0.00 sec)
27
28 mysql> SELECT * FROM w_ci_bin_cs WHERE w_bin=‘BIN‘;
29 +------+---+------+-------+----------+--------+
30 | pkey | w | w_ci | w_bin | w_ci_bin | w__bin |
31 +------+---+------+-------+----------+--------+
32 |    2 | W | A    | BIN   | CI_BIN   | BIN    |
33 +------+---+------+-------+----------+--------+
34 1 row in set (0.00 sec)
35
36 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.

时间: 2024-10-14 02:56:35

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

Mysql系列-字符集

字符集 怎样选择合适的字符集 如果应用程序需要发布到很多国家和地区,需要支持各种各样的文字,则选择Unicode编码,Mysql中即UTF-8.q如果需要将数据导入数据库,这时候要注意数据库字符集对数据字符集的兼容性,最好一致. 如果数据库支持一般中文,数据量很大,性能要求高,那么应该选择双字节定长编码的中文字符集,比如GBK.因为相对于UTF-8而言GBK每个汉字只需要2个字节,而UTF8每个汉字需要3个字节. 如果数据库需要做大量的检索.比较.排序,应该选择定长字符集. 查看字符集 字符集和

我必须得告诉大家的MySQL优化原理2

如果有同学看完上一篇关于MySQL文章,文末留有两个很开放的问题,如有兴趣可以在脑袋里想想.本文也会试着回答这两个问题,希望能给你一些参考.现在可以思考一个问题,如果数据量非常大的情况下,您根据业务选择了合适的字段,精心设计了表和索引,还仔细的检查了所有的SQL,并确认已经没什么问题,但性能仍然不能满足您的要求,该怎么办呢?还有其他优化策略吗?答案是肯定的.接下来继续和您讨论一些常用的MySQL高级特性以及其背后的工作原理. 分区表 合理的使用索引可以极大提升MySQL的查询性能,但如果单表数据

[MySQL Reference Manual] 10 全球化

10.全球化 本章主要介绍全球化,包含国际化和本地化,的一些问题: ·         MySQL在语句中支持的字符集 ·         如何为服务配置不同的字符集 ·         选择错误信息的语言 ·         如何设置服务的时区和每个连接的时区 ·         选择本土化的日期和月份名 10.全球化... 1 10.1 字符集的支持... 2 10.1.1 字符集和排序规则... 2 10.1.2 mysql中的字符集和排序规则... 3 10.1.3 制定字符集和排序规则

MySQL数据库知识复习

什么是数据库? 所谓数据库,就是存储数据的仓库.数据有多种形式:文字,图片,电影 什么是数据库系统? 管理数据库的软件就被称为数据库系统.数据库系统一般分为两个部分:数据库(DB),数据库管理系统(DBMS) 数据库在Web程序开发中重要地位 动态网站基本上都是要对数据进行操作.例如新闻网站:当我们浏览新闻的时候,网页的内容会经常发生变化,框架是不会变的.这就是一个典型的动态网页.动态网页的数据就是存储在数据库里面. PHP连接数据库执行过程 为什么选择MySQL和PHP进行合作 理由很简单,全

MySQL字符集选择

一.怎样选择合适的字符集对MySQL数据库来说,字符集很重要,因为数据库存储的数据大部分都是各种文字,字符集对数据库的存储,处理性能都会有所影响. 主要考虑一下几方面的因素 1.满足应用支持语言的需求,应用处理各种各样的文字,发布到使用不同语言的国家或地区,可以选择Unicode字符集,MySQL的话可以选择UTF-8 2.如果应用中涉及已有数据的导入,就要充分考虑数据库字符集对已有数据的兼容性.假设数据是GBK文字,如果选择其他数据库字符集,就可能导致某些文字无法正确导入的问题. 3.如果数据

MySQL优化原理(二)

如果有同学看完上一篇关于MySQL文章,文末留有两个很开放的问题,如有兴趣可以在脑袋里想想.本文也会试着回答这两个问题,希望能给你一些参考.现在可以思考一个问题,如果数据量非常大的情况下,您根据业务选择了合适的字段,精心设计了表和索引,还仔细的检查了所有的SQL,并确认已经没什么问题,但性能仍然不能满足您的要求,该怎么办呢?还有其他优化策略吗?答案是肯定的.接下来继续和您讨论一些常用的MySQL高级特性以及其背后的工作原理. 分区表 合理的使用索引可以极大提升MySQL的查询性能,但如果单表数据

MySQL By 孙胜利

一.数据库基本概念 数据库:信息存储的仓库,包括一系列的关系措施! 表:一个数据库中可以有若干张表(形式上你可以看出我们日常生活中建立的表) 字段:表里面的信息会分若干个栏目来存,这些栏目呢,我们在数据库技术中叫"字段",栏目里面存的具体信息叫"字段值" 记录:一条信息我们叫一条记录 一个数据库管理系统中可以建立若干个数据库,每个数据库中又可以建立若干张表,每张表中可以有若干条记录. 二.MySQL支持的数据类型 数值类型.日期类型.字符串类型 1.数值类型 1)整

汇编_指令_CS与DS的区别

cs是值cpu执行的当前指令的段地址,ds是数据开始的段地址. CS是告诉CPU,去哪个位置找内容当成指令去执行:DS是告诉CPU,去哪个位置找内容当成数据被使用. datastring =ds codestring=cs 用到DS的例子: MOV AX,[100H] 这句指令的意思就是把地址[100H](属于数据)放入到寄存器AX里(直接寻址), 此时物理地址计算:DS*10H+100H 原文地址:https://www.cnblogs.com/chuijingjing/p/9324357.h

MySQL基础第二课

回顾 数据库基础知识: 关系型数据库(磁盘)和非关系型数据库(内存) 关系型数据库: 建立在关系模型上的数据库 数据结构: 二维表(比较浪费空间) 操作数据的指令集合: SQL(DDL,DML[DQL]和DCL) 完整性约束: 表内和表之间(实体) Mysql关系型数据库: c/s结构软件(连接认证, 发送SQL指令, 服务器处理指令返回结果,客户端接收结果解析结果) Mysql服务端对象: DBMS -> Database -> Table -> fields SQL基本操作: 库操作