您的位置:首页 > 数据库 > MySQL

Mysql:语法:字符集、排序规则

2009-06-04 17:31 579 查看
字符集、排序规则

字符集就是 字形符号+对应的编码 的 集合

排序规则就是 如何理解和处理排序

mysql自觉其对字符集和排序规则的处理问题领先于其他数据库系统

基本特性:

分层:server、database、table、column、文字常量

分层:server、client

分层:系统配置文件、系统变量、子句

功能简单:每一级对下一级仅仅是起默认设置的作用,no other purpose

灵活:随时、随机 可以修改

支持丰富:

智能:不用担心出错!

基本命令和变量

命令:{show character set|show charaet} show collation;

变量:character_set_server collation_server、character_set_database collation_database、character_set_connection collation_connection、character_Set_client 、character_set_results、character_set_system

选项:--character-set-server --collation-server

注意

文字常量的默认字符集和排序规则是相关连接connection变量设置的。可以通过 [_character set name]'字符序列' [collation name] 修改,注意有个 "_"!

另外文字常量中的 转义字符总是connection连接变量指定的字符集中的"\x",意思是:如果指定的文字常量的字符集和连接级字符集设置如果不一致,转义字符会使用连接级字符集中的对应转义字符的encode!不过仅仅当connection字符集为latin??????还有只是认为转义字符的endcode必须是单字节字符集"\"???或者说:转义字符"\"在某些字符集下根本是无效的?

nchar:本质上是ansisql标准中的char中的一个具有预先定义的字符集属性的特例而已

unicode是character set ucs2的别名

字符集 和 排序规则 是相关联的。除非特殊需求,只要设置其一即可。设置字符集,即设置了默认的排序规则;设置排序规则,就肯定设置了其关联的字符集

方便的设置字符集

set names 'character_set_name' [collate collation_name] 相当于下面的操作



set character_set_clent='character_set_name'

set character_set_connection='character_set_name'

set character_set_results='character_set_name'



set character set 'character_set name' 相当于下面的操作:



set character_set_clent='character_set_name'

set collation_connection=collation_database  --这一点和set names 不同

set character_set_results='character_set_name'



使用mysql.exe内置客户端程序的字符集设置

选项文件配置:default-character-set

命令行参数:--default-character-set

命令:set names

命令:set character set

命令:charset  --和set names 类似,但是影响以后的reconnnect

如果让server发出的信息、结果集不进行任何字符集转换:set character_set_results={null|binary}

ucs2字符集不能应用于character_set_client,如果你设置了,他不起任何作用

查询当前设置:show variables like ‘’

对于其他客户端环境

你必须要考虑应用程序所处的执行环境:是否支持字符集,字符集是否兼容,有无相关的配置或初始化字符集动作等等!

如果让server发出的信息、结果集不进行任何字符集转换:set character_set_results={null|binary},这个时候结果的字符集是有character_set_system系统变量决定的

mysql的元数据 是utf8字符集编码的

排序规则

对于比较、排序、表达式来说,排序规则有着重要而灵活的应用。他几乎可以用在sql语句的任何部分

binary 'str' 和 cast('str' as binary)完全相同

binary(m) = char(m) character set binary【<>char(m) binary】。该语法是定义二进制类型的一种形式。使用于所有文本类型。注意后面是字段属性:表示使用字符集的 二进制排序规则

特殊的binary排序规则模式 和 _bin排序规则,二者是不相同的



单位不同:字节单位 和 字符编码单位

字符集转换:无 和 有

对某些函数的影响lower()...:有 和 无

比较时是否考虑尾随空格:考虑 和 不考虑

插入 和 获取是尾随空格的处理:char(m)或右填充空格,但获取是trim掉;而binary(m)或右填充0x00,获取是保留



字符集和排序规则的压缩性

unicode字符集 和 非unicode字符集,总是转换非 unicode字符集 到unicode字符集

同一个字符集下的"_bin"、"_cs"、"_ci"字符集混杂时,总是应用"_bin"的排序规则

如果可压缩性形同,字符集相同,又不属于以上情况(排序规则为"_cs"、"_ci"),哈哈哈,你死了!

越小越高越稳定:



0:collate子句

1:两个不同排序规则的字符串连接

2:表列、存储程序、本地变量

3:系统常量、系统函数

4:文本常量的排序规则

5:null



字符集中字元的包容性:ascii是安全的

字符集对模型操作、函数的影响



简单函数的输出字符数据的字符集、排序规则和输入参数的完全相同:instr、mid、substring、lower、lcase、ucase、upper、left、right、ltrim、rtrim、trim、reverse、repea、rpad、soundex,特殊的replace总是大小写敏感的

charset()、collation()函数返回字符串的字符集、排序规则

对于多个输入,一个输出的函数:

如果有一个collate子句,就是他了

如果有2或更多个collate子句,恭喜,你死了

如果collation 都相同,就用它

其他,binary



显示字符集转换

convert('str' using character_set_name)  --ansi sql标准

cast('str' as 字符数据类型 character set character_set_name)

cast('str' as 字符数据类型 ) collate collation_name
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: