`

转:mysql 的charaset 与 collation

 
阅读更多

http://zhongwei-leg.iteye.com/blog/899227

使用 mysql 创建数据表的时候, 总免不了要涉及到 character set 和 collation 的概念, 之前不是很了解。

 

这两天不是很忙, 就自己整理了一下。

 

 

先来看看 character set 和 collation 的是什么?

&. character set, 即字符集。

我们常看到的 utf-8, GB2312, GB18030 都是相互独立的 character set. 即对 Unicode 的一套编码。

 

那么如何理解 unicode 与 utf-8, GB2312 的区别呢?
打个比方,你眼前有一个苹果,在英文里称之为 apple, 而在中文里称之为苹果。
苹果这个实体的概念就是 unicode , 而 utf-8, GB2312 可以认为就是不同语言对苹果的不同称谓,本质上都是在描述苹果这个物。

 

&. collation, 即比对方法。

用于指定数据集如何排序,以及字符串的比对规则。(这样说可能比较抽象,后面会详细解释。)

 

 

character set 与 collation 的关系

 

软件国际化是大势所趋, 所以 unicode 是国际化最佳的选择。当然为了提高性能,有些情况下还是使用 latin1 比较好。

 

mysql 有两个支持 unicode 的 character set:

1. ucs2: 使用 16 bits 来表示一个 unicode 字符。

2. utf8: 使用 1~3 bytes 来表示一个 unicode 字符。

 

选择哪个 character set 视情况而定,例如 utf8 表示 latin 字符只需要一个字节,所以当用户数据大部分为英文等拉丁字符时,使用 utf8 比较节省数据库的存储空间。据说 SQL Server 采用的是 ucs2, 我表示怀疑。

 

每个 character set 会对应一定数量的 collation. 查看方法是在 mysql 的 console 下输入:

 

Java代码   收藏代码
  1. mysql> show collation;  

 

我们会看到这样的结果:

 

 

collation 名字的规则可以归纳为这两类:

1. <character set>_<language/other>_<ci/cs>

2. <character set>_bin

 

例如:

utf8_danish_ci

 

ci 是 case insensitive 的缩写, cs 是 case sensitive 的缩写。即,指定大小写是否敏感。

奇怪的是 utf8 字符集对应的 collation 居然没有一个是 cs 的。

 

 

 

那么 utf8_general_ci, utf8_unicode_ci, utf8_danish_ci 有什么区别? 他们各自存在的意义又是什么?

 

同一个 character set 的不同 collation 的区别在于排序、字符春对比的准确度(相同两个字符在不同国家的语言中的排序规则可能是不同的)以及性能。

 

例如:

utf8_general_ci 在排序的准确度上要逊于 utf8_unicode_ci, 当然,对于英语用户应该没有什么区别。但性能上(排序以及比对速度)要略优于 utf8_unicode_ci. 例如前者没有对德语中 

 

ß = ss

 

的支持。

 

而 utf8_danish_ci 相比 utf8_unicode_ci 增加了对丹麦语的特殊排序支持。

 

 

补充:

 

1. 当表的 character set 是 latin1 时,若字段类型为 nvarchar, 则字段的字符集自动变为 utf8.

可见 database character set, table character set, field character set 可逐级覆盖。

 

2. 在 ci 的 collation 下,如何在比对时区分大小写:

写道
mysql> select * from pet;
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |
+----------+-------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql> select * from pet where name = 'whistler';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| Whistler | Gwen | bird | NULL | 1997-12-09 | NULL |
| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |
+----------+-------+---------+------+------------+-------+
2 rows in set (0.00 sec)

mysql> select * from pet where binary name = 'whistler';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)

mysql> select * from pet where name = binary 'whistler';
+----------+-------+---------+------+------------+-------+
| name | owner | species | sex | birth | death |
+----------+-------+---------+------+------------+-------+
| whistler | Gwen | bird | NULL | 1988-09-25 | NULL |
+----------+-------+---------+------+------------+-------+
1 row in set (0.00 sec)

 

推荐使用

 

mysql> select * from pet where name = binary 'whistler';

 

这样可以保证当前字段的索引依然有效, 而

 

mysql> select * from pet where binary name = 'whistler';

 

会使索引失效。

 

分享到:
评论

相关推荐

    解决mysql不能插入中文Incorrect string value

    选项default-charaset-set=utf8; 然后创建一个数据表 create table a_table(b varchar(255) not null); insert into a_table values(‘北京’); 这个时候插入的是中文,系统会报告错误:Incorrect string value: ‘\...

    第八节 函数的连续性与间断点.ppt

    第八节 函数的连续性与间断点

    一种开关电源PID增量式算法.c

    开关电源

    k8s nfs provisioner v4.7.0镜像资源

    部署nfs provisioner v4.7.0镜所需镜像资源包,使用以下方式导入: ctr -n k8s.io image import csi-driver-nfs-v4.7.0.tar

    迅风羽毛球俱乐部社交平台的分析与设计(毕业论文,超高质量)

    随着计算机技术的发展,带来社会各行业的进步,信息化逐渐运用到人们的生活中。传统模式的羽毛球俱乐部教学培训满足不了现代人的生活追求,服务质量、服务速度,之前的很多羽毛球俱乐部由于人力、物理、财力等原因,一些网站无法完美的展现它的特色,优势,浪费了很多顾客资源。使用管理系统进行管理,成本大大减小,同时可借助互联网强大的流量入口,因而也降低了推广的难度。因此设计一个管理系统来解决羽毛球俱乐部场地预约、教练预约的问题,一方面可以更好的展现系统直观性,另一方面可以更好的来适应时代的发展。 本文先提出了开发迅风羽毛球俱乐部社交平台管理系统的背景意义,然后通过功能性和非功能性分析阐述本系统的需求,然后从功能设计和数据库设计两方面进行系统的设计建模。在技术设计部分采用了Java作为开发后台的编程语言,客户端使用Jsp技术,数据库选择MySQL,并说明了设计流程。综合表明,本迅风羽毛球俱乐部管理系统满足了羽毛球俱乐部场地预约的基本业务,帮助用户及时在线预定,并为羽毛球俱乐部管理员提供了高效的管理模式。

    3.1-3.2.ppt

    3.1-3.2

    tomcat配置错误页面

    404页面

    ZXMN2A14FTA-VB一款N-Channel沟道SOT23的MOSFET晶体管参数介绍与应用说明

    SOT23;N—Channel沟道,20V;6A;RDS(ON)=24mΩ@VGS=4.5V,VGS=8V;Vth=0.45~1V;

    "python-JSON转列表"文章问题相关数据

    "python-JSON转列表"文章问题相关数据

    洛谷 1003 铺地毯.cpp

    洛谷题目AC源代码

    zzzzzzzzzzzzzzzzz

    zzzzzzzzzzzzzzzzz

    智能车的案例说明.txt智能车的案例说明.txt

    智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明.txt智能车的案例说明

    红枣去核机的设计.doc

    红枣去核机的设计.doc

    数据管理体系规划建设.docx

    数据管理体系规划建设

    牛头刨床执行机构及部件设计.doc

    牛头刨床执行机构及部件设计.doc

    机械精度设计与检测题库.doc

    机械精度设计与检测题库

    Spring Boot与Vue.js实现前后端分离.md

    springboot vue前后端分离

    c语言文件读写操作代码.txt

    c知道

    Python项目开发实战:网站图片抓取工具(案例教程实例课程).pdf

    Python项目开发实战:网站图片抓取工具(案例教程实例课程).pdf

    PopClip for Mac v2024.5.1 增强型复制粘贴工具 激活版 - M芯片

    PopClip 是一款强大的文本辅助工具,它极大地提升了用户在 Mac 上处理文本时的效率和便捷性。在日常的办公、学习和生活中,我们经常需要对文本进行各种操作,如编辑、搜索、转换和分享等。然而,这些操作通常需要打开多个应用、切换窗口或进行繁琐的复制粘贴,不仅耗时费力,还容易打断我们的工作流程。 PopClip 的出现彻底改变了这一状况。当用户在 Mac 上使用鼠标选择文本时,PopClip 会智能地感知到这一操作,并立即在屏幕上方弹出一个包含多种文本处理选项的快捷菜单。这个菜单的设计非常直观和简洁,用户只需通过简单的点击或快捷键,即可快速执行所需的文本操作。 这个快捷菜单中包含了丰富的文本处理选项,满足了用户在日常使用中的多种需求。例如,用户可以直接在菜单中搜索选中的文本,而无需打开浏览器;可以将选中的文本快速翻译成其他语言;还可以将文本直接分享到社交媒体或其他应用上。此外,PopClip 还支持自定义扩展功能,用户可以根据自己的需求安装和使用各种扩展,进一步丰富文本处理的方式和选项。 通过使用 PopClip,用户可以更加高效地完成各种文本处理任务,无需离开当前应用或进行复杂的

Global site tag (gtag.js) - Google Analytics