mysql8字符集_mysql8 参考手册--字符集库

字符集 的全部是字符集中的字符集合。

字符串表达式有一个repertoire属性,该属性可以有两个值:

1、ASCII:表达式只能包含Unicode U+0000到 范围内的字符U+007F。

2、UNICODE:表达式可以包含Unicode U+0000到 范围内的字符U+10FFFF。其中包括基本多语言平面(BMP)范围内的字符(U+0000至U+FFFF)和BMP范围外的辅助字符(U+10000至U+10FFFF)。

ASCII范围是UNICODE范围的子集,因此具有ASCII指令集的字符串可以安全地转换为具有UNICODE指令集的任何字符串的字符集或ASCII超集的字符集,而不会丢失信息。(除swe7外,所有MySQL字符集都是ASCII的超集,swe7对瑞典语重音字符使用了一些标点符号。)在表达式中使用repertoire可以在许多情况下进行字符集转换,否则MySQL将返回“非法混合排序规则”错误。

以下讨论提供了表达式及其组成部分的示例,并描述了组成部分的使用如何更改字符串表达式求值:

1、字符串常量的库取决于字符串内容,并且可能与字符串字符集的库不同。考虑以下语句:

SET NAMES utf8; SELECT 'abc';

SELECT _utf8'def';

SELECT N'MySQL';

尽管在utf8上述每种情况下都使用字符集,但是这些字符串实际上并不包含ASCII范围以外的任何字符,因此它们的字符表ASCII不是 UNICODE。

2、具有ascii字符集的列由于其字符集而具有ASCII全部功能。在下表中,c1 具有ASCII曲目:

CREATE TABLE t1 (c1 CHAR(1) CHARACTER SET ascii);

下面的示例说明在没有库的情况下发生错误的情况下,库可以如何确定结果:

CREATE TABLE t1 (

c1 CHAR(1) CHARACTER SET latin1,

c2 CHAR(1) CHARACTER SET ascii

);

INSERT INTO t1 VALUES ('a','b');

SELECT CONCAT(c1,c2) FROM t1;

没有曲目,将发生以下错误:

ERROR 1267 (HY000): Illegal mix of collations (latin1_swedish_ci,IMPLICIT)

and (ascii_general_ci,IMPLICIT) for operation 'concat'

使用库,可以发生子集到超集(ascii到latin1)的转换,并返回结果:

+---------------+

| CONCAT(c1,c2) |

+---------------+

| ab |

+---------------+

3、具有一个字符串参数的函数将继承其参数库。的结果 具有指令集,因为其参数具有指令集。 UPPER(_utf8'abc')ASCIIASCII

4、对于返回字符串但没有字符串参数并character_set_connection用作结果字符集的函数 ,结果表为 ASCIIif character_set_connectionis ascii,UNICODE 否则为:

FORMAT(numeric_column, 4);

使用库会改变MySQL评估以下示例的方式:

SET NAMES ascii;

CREATE TABLE t1 (a INT, b VARCHAR(10) CHARACTER SET latin1);

INSERT INTO t1 VALUES (1,'b');

SELECT CONCAT(FORMAT(a, 4), b) FROM t1;

没有曲目,将发生以下错误:

ERROR 1267 (HY000): Illegal mix of collations (ascii_general_ci,COERCIBLE)

and (latin1_swedish_ci,IMPLICIT) for operation 'concat'

使用曲目时,将返回结果:

+-------------------------+

| CONCAT(FORMAT(a, 4), b) |

+-------------------------+

| 1.0000b |

+-------------------------+

5、具有两个或多个字符串参数的函数使用 “ 最宽的 ”参数表作为结果表(UNICODE大于 ASCII)。考虑以下 CONCAT()调用:

CONCAT(_ucs2 X'0041', _ucs2 X'0042')

CONCAT(_ucs2 X'0041', _ucs2 X'00C2')

对于第一个调用,指令表是 ASCII因为两个参数都在ascii字符集范围内。对于第二个调用,该库是 UNICODE因为第二个自变量在ascii字符集范围之外。

6、仅根据影响结果的字符集和排序规则的参数的清单确定函数返回值的清单。

IF(column1 < column2, 'smaller', 'greater')

结果库是ASCII因为两个字符串参数(第二个参数和第三个参数)都具有ASCII库。即使表达式使用字符串值,第一个参数对于结果库也不重要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值