10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册摘录

10.2.1字符集曲目

曲目是字符集中的字符的集合。

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

  • ASCII.:表达式只能包含ASCII字符;即Unicode范围内的字符U + 0000.U + 007 f

  • unicode.:表达式可以包含Unicode范围内的字符U + 0000.U + 10FFFF..这包括基本多语言平面(BMP)范围的字符(U + 0000.U +飞行符)BMP范围之外的补充字符(U + 10000.U + 10FFFF.).

ASCII.范围是一个子集unicode.范围,所以一个字符串ASCII.可以安全地将保留表转换为任何字符串的字符集,而不会丢失信息unicode.曲目。它也可以安全地将任何字符集转换为占地面积ASCII.字符集。(所有MySQL字符集都是的超集ASCII.除了swe7,它重复使用了一些标点字符作为瑞典口音字符。)

使用保留表可以在许多情况下在表达式中进行字符集转换,否则MySQL将返回一个非法混合排序核对胁迫规则不足以解决含糊不清时出错。(有关胁迫的信息,请参阅第10.8.4节“表达中的融合胁迫”.)

下面的讨论提供了表达式及其汇编的示例,并描述了如何使用汇编改变字符串表达式求值:

  • 字符串常量的reptoIre依赖于字符串内容,并且可以与字符串字符集的reptoIre不同。考虑这些陈述:

    设置名字utf8mb4;选择“abc”;选择_utf8mb4'def ';

    虽然字符集是UTF8MB4.在前面的每一种情况中,字符串实际上不包含ASCII范围以外的任何字符,因此它们的配置表是ASCII.而不是unicode.

  • 一列ASCII.字符集有ASCII.因为它的角色集而曲目。在下表中,C1.具有ASCII.曲目:

    创建表T1(C1 Char(1)字符集ASCII);

    以下示例说明了reptograire如何在没有reptoire的情况下发生错误的情况下确定要确定的结果:

    创建表T1(C1 CHAR(1)字符集LATIN1,C2 CHAR(1)字符集ASCII);插入t1值('a','b');从T1中选择Concat(C1,C2);

    如果没有reptoIre,则会发生此错误:

    错误1267(hy000):非法组合的组合(Latin1_swedish_ci,隐式)和(ASCII_GENERAL_CI,隐式)用于操作“CONCAT”

    使用指令集,子集到超集(ASCII.拉丁语)转换可能发生,并返回结果:

    + -------------- + |concat(C1,C2)|+ -------------- + |ab |+ ---------------
  • 只有一个字符串参数的函数继承其参数的全部功能。的结果上(_utf8mb4'abc”)具有ASCII.reptoire因为它的论点ASCII.曲目。(尽管_utf8mb4介绍者,字符串'abc'在ASCII范围之外不包含任何字符。)

  • 用于返回字符串但没有字符串参数和使用的函数character_set_connection.作为结果字符集,结果指令集为ASCII.如果character_set_connection.ASCII.,unicode.否则:

    格式(numeric_column4);

    使用reptoIre改变MySQL如何评估以下示例:

    设置名称ASCII;创建表T1(A INT,B VARCHAR(10)字符集LATIN1);插入T1值(1,'B');从T1中选择concat(格式(a,4),b);

    如果没有reptoIre,则会发生此错误:

    错误1267(HY000):非法组合的组合(ASCII_GENERAL_CI,胁迫)和(LATIN1_WEDISH_CI,隐式)用于操作“CONCAT”

    对于保留表,返回一个结果:

    + ----------------------- + |concat(格式(a,4),b)|+ ----------------------- + |1.0000B |+ ------------------------
  • 具有两个或多个字符串参数的函数使用宽的参数reptoire为结果reptoire,在哪里unicode.是更广泛的比ASCII..考虑以下concat()电话:

    concat(_ucs2 x'0041',_ucs2 x'0042')concat(_ucs2 x'0041',_ucs2 x'00c2')

    对于第一个电话,曲目是ASCII.因为这两个参数都在ASCII范围内。对于第二个电话,曲目是unicode.因为第二个参数超出了ASCII范围。

  • 函数返回值的配置表仅根据那些影响结果的字符集和排序的参数的配置表确定。

    if(column1 

    结果reptoire是ASCII.因为两个字符串参数(第二个参数和第三个参数)都有ASCII.曲目。第一个参数对于结果指令表并不重要,即使表达式使用了字符串值。