mysql字符集和校对规则(Mysql校对集)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
mysql字符集和校对规则(Mysql校对集)
字符集和校对规则
字符集是⼀套符号和编码。
校对规则是在字符集内⽤于⽐较字符的⼀套规则。
MySql在collation提供较强的⽀持,oracel在这⽅⾯没查到相应的资料。
不同字符集有不同的校对规则,命名约定:以其相关的字符集名开始,通常包括⼀个语⾔名,并且以_ci(⼤⼩写不敏感)、_cs(⼤⼩写敏感)或_bin(⼆元)结束
校对规则⼀般分为两类:
binary collation,⼆元法,直接⽐较字符的编码,可以认为是区分⼤⼩写的,因为字符集中'A'和'a'的编码显然不同。
字符集_语⾔名,utf8默认校对规则是utf8_general_ci
mysql字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。
具体来说,我们系统使⽤的是utf8字符集,如果使⽤utf8_bin校对规则执⾏sql查询时区分⼤⼩写,使⽤utf8_general_ci 不区分⼤⼩写。
不要使⽤utf8_unicode_ci。
如create database demo CHARACTER SET utf8; 默认校对规则是utf8_general_ci 。
Unicode与UTF8
Unicode只是⼀个符号集,它只规定了符号的⼆进制代码,却没有规定这个⼆进制代码应该如何存储.
UTF8字符集是存储Unicode数据的⼀种可选⽅法。
mysql同时⽀持另⼀种实现ucs2。
字符集(charset):是⼀套符号和编码。
校对规则(collation):是在字符集内⽤于⽐较字符的⼀套规则,⽐如定义'A'<'B'这样的关系的规则。
不同collation可以实现不同的⽐较规则,如'A'='a'在有的规则中成⽴,⽽有的不成⽴;进⽽说,就是有的规则区分⼤⼩写,⽽有的⽆视。
每个字符集有⼀个或多个校对规则,并且每个校对规则只能属于⼀个字符集。
binary collation,⼆元法,直接⽐较字符的编码,可以认为是区分⼤⼩写的,因为字符集中'A'和'a'的编码显然不同。
除此以外,还有更加复杂的⽐较规则,这些规则在简单的⼆元法之上增加⼀些额外的规定,⽐较就更加复杂了。
mysql5.1在字符集和校对规则的使⽤⽐其它⼤多数数据库管理系统超前许多,可以在任何级别进⾏使⽤和设置,为了有效地使⽤这些功能,你需要了解哪些字符集和校对规则是可⽤的,怎样改变默认值,以及它们怎样影响字符操作符和字符串函数的⾏为。
两个不同的字符集不能有相同的校对规则。
每个字符集有⼀个默认校对规则。
例如,utf8默认校对规则是utf8_general_ci。
存在校对规则命名约定:它们以其相关的字符集名开始,通常包括⼀个语⾔名,并且以_ci(⼤⼩写不敏感)、_cs(⼤⼩写敏感)或_bin(⼆元)结束
确定默认字符集和校对
字符集和校对规则有4个级别的默认设置:服务器级、数据库级、表级和连接级。
数据库字符集和校对
每⼀个数据库有⼀个数据库字符集和⼀个数据库校对规则,它不能够为空。
CREATE DATABASE和ALTER DATABASE语句有⼀个可选的⼦句来指定数据库字符集和校对规则:
例如:
CREATE DATABASE db_name DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci;
MySQL这样选择数据库字符集和数据库校对规则:
· 如果指定了CHARACTER SET X和COLLATE Y,那么采⽤字符集X和校对规则Y。
· 如果指定了CHARACTER SET X⽽没有指定COLLATE Y,那么采⽤CHARACTER SET X和CHARACTER SET X的默认校对规则。
· 否则,采⽤服务器字符集和服务器校对规则。
在SQL语句中使⽤COLLATE
•使⽤COLLATE⼦句,能够为⼀个⽐较覆盖任何默认校对规则。
COLLATE可以⽤于多种SQL语句中。
使⽤WHERE:
select * from pro_product where product_code='ABcdefg' collate utf8_general_ci
Unicode与UTF8
Unicode只是⼀个符号集,它只规定了符号的⼆进制代码,却没有规定这个⼆进制代码应该如何存储.Unicode码可以采⽤UCS-2格式直接存储.mysql⽀持ucs2字符集。
UTF-8就是在互联⽹上使⽤最⼴的⼀种unicode的实现⽅式。
其他实现⽅式还包括UTF-16和UTF-32,不过在互联⽹上基本不⽤。
UTF8字符集(转换Unicode表⽰)是存储Unicode数据的⼀种可选⽅法。
它根据RFC 3629执⾏。
UTF8字符集的思想是不同Unicode字符采⽤变长字节序列编码:
· 基本拉丁字母、数字和标点符号使⽤⼀个字节。
· ⼤多数的欧洲和中东⼿写字母适合两个字节序列:扩展的拉丁字母(包括发⾳符号、长⾳符号、重⾳符号、低⾳符号和其它⾳符)、西⾥尔字母、希腊语、亚美尼亚语、希伯来语、阿拉伯语、叙利亚语和其它语⾔。
· 韩语、中⽂和⽇本象形⽂字使⽤三个字节序列
摘⾃:⽤梦想丈量⼈⽣,⽤奔跑丈量激情
MySQL5.5.8中共有字符集39,校对集195个
#显⽰所有的校对集
Show collation
#显⽰所有的字符集
show character set
所以⼀个字符集对应多个校对集,即同样的⼀个字符集有多重排序规则
⽐如⼀个utf8的字符集共有22中排序规则
通过show collation like ‘utf8\_%'
即可查看
注意:
utf8_general_ci 按照普通的字母顺序,⽽且不区分⼤⼩写(⽐如:a B c D)
utf8_bin 按照⼆进制排序(⽐如:A排在a前⾯,B D a c)。