人大金仓 金仓数据库KingbaseES 字符串截断特性

金仓数据库KingbaseES 字符串截断特性

关键字:

KingbaseES、mysql、char

1.Kes在不同编码下的字符串

oracle 模式中,假使nls_length_semantics 缺省是 byte :

将GBK作为服务器的编码,客户端的编码设置为UTF8,可以将 insert into test values (‘一二’);成功执行 将UTF8作为服务器的编码,客户端的编码设置为UTF8,可以将 insert into test values (‘一二’);不能成功执行,原因在于utf8在编码时比GBK多了字节,不能正常插入报错。

在mysql 模式中表现和oracle相同,同样,为了证实这一点,穿件binary类型,并对字符串长度进行计算。

GBK编码

字符     |binary               |字节长度|     字符长度
一       | 0xd2bb             |      2 |           1
一二     | 0xd2bbb6fe         |      4 |           2
1一     | 0x31d2bb           |      3 |           2

UTF8编码

字符     |binary               |字节长度|     字符长度
一       | 0xe4b880           |      3 |           1
一二     | 0xe4b880e4ba8c    |      6 |           2
1一      | 0x31e4b880         |      4 |           2

2.Mysql模式中的字符串截断

Kes在mysql模式下默认开启非严格模式,会对超长的字符串进行截断保存,期间只会警告而不会报错终端执行。show sql_mode显示的值中不包含STRICT_ALL_TABLES。要更改默认行为,需要set sql_mode=STRICT_ALL_TABLES,ONLY_FULL_GROUP_BY。

同样,对不同编码的字符进行截断。假设,create table test (col BINARY(1));然后插入相同的数据,就可以得到下表。

UTF8编码

字符     |binary       |字节长度|     字符长度
一       | 0xe4        |      1 |           1
一二     | 0xe4        |      1 |           1
1一      | 0x31        |      1 |           1

实际上0xe4并不能显示出来了,0x31在可以转换显示成1。

同样,对不同编码的字符进行截断。假设,create table test (col char(1));然后插入相同的数据,就可以得到下表。

UTF8编码

字符     |char      |length|     字符长度
一二     | 一      |      1 |           1
1一      | 1        |      1 |           1

注,kes的 mysql模式返回的是字符长度。在对字符串进行统计时,mysql
和kes 表现有差异。Mysql数据库返回的是字节数。如下左为mysql,右为kes的mysql模式:

file

file

GBK 编码

字符     |char      |length|     字符长度
一二     | 一      |      1 |           1
1一      | 1        |      1 |           1

注: GBK表现和UTF8相同,都可以正常的截断字符串。

值得注意的是,kes 的mysql 模式同mysql 表现一致,支持的是字符的截断,也就是create table test (col char(1)),在kes mysql模式中,虽然可以显式的指定类型create table test (col char(1 char)), create table test (col char(1 byte)),但是不推荐使用,其中指定为byte类型时,不能进行截断。如果有需要根据字节进行截断的情况,可以使用binary。

更多信息,参见https://help.kingbase.com.cn/v8/index.html


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部