暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

OceanBase SQL语句列级字符集和字符序

2024-04-20
418

每个"字符"列(即类型为 CHARVARCHARTEXT 类型或任何同义词的列)都有一个列字符集和一个列字符序。

指定列的字符集和字符序

CREATE TABLE 和 ALTER TABLE 语句具有用于指定列的字符集和字符序,语法如下:

CREATE TABLE table_name (
    column_name {CHAR | VARCHAR | TEXT} (column_length)
    [CHARACTER SET charset_name]
    [COLLATE collation_name]
);

ALTER TABLE table_name MODIFY
    col_name {CHAR | VARCHAR | TEXT} (column_length)
    CHARACTER SET [=] charset_name
    [COLLATE [=] collation_name]

示例如下:

obclient> CREATE TABLE t (     
     col1 VARCHAR(5)       
     CHARACTER SET utf8mb4       
     COLLATE utf8mb4_unicode_ci);
Query OK, 0 rows affected 

obclient> ALTER TABLE t MODIFY
      col1 VARCHAR(5)
      CHARACTER SET gbk
      COLLATE gbk_chinese_ci;
Query OK, 0 rows affected 

选择列的字符集和字符序

OceanBase 数据库通过以下方式选择列的字符集和字符序:

  • 如果同时指定了 CHARACTER SET charset_name 和 COLLATE collation_name,则使用字符集 charset_name 和字符序 collation_name

  • 如果指定了 CHARACTER SET charset_name 但未指定 COLLATE,则使用字符集 charset_name 及其默认字符序。要查看每个字符集的默认字符序,请使用 SHOW CHARACTER SET 语句。

  • 如果指定了 COLLATE collation_name 但未指定 CHARACTER SET,则使用与 collation_name 关联的字符集和指定的字符序。

  • 如果既不指定 CHARACTER SET 也不指定 COLLATE,则使用表的字符集和字符序。

如果在各个列定义中未指定列字符集和字符序,则表的字符集和字符序将用作列定义的默认值。

列字符集转换条件

要将二进制或非二进制字符串列转换为指定字符集,可以使用 ALTER TABLE。要成功转换,必须满足以下条件之一:

  • 如果列具有二进制数据类型(BINARYVARBINARY 或 BLOB),则它包含的所有值都必须使用单个字符集(即要将列转换为的字符集)进行编码。如果使用二进制列来存储多个字符集的信息,OceanBase 数据库无法知道哪些值使用哪个字符集,无法正确转换数据。

  • 如果列具有非二进制数据类型(CHARVARCHAR 或 TEXT),则其内容应根据列字符集进行编码。如果列内容以不同的字符集进行编码,可以先将列转换为所使用二进制数据类型,然后再转换为具有所需字符集的非二进制列。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论