主键有空值的时候,写入表会直接删除空格,导致主键重复,是否有参数控制

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】OceanBase_CE 4.2.1.2 (r102010022023121415-f6752332b5001069034f96c6dbb620926dc666f0)
【问题描述】主键有空值的时候,写入表会直接删除空格。从oracle表通过jdbc的 Statement迁移数据到oceanbase时,oracle表主键中有空格,迁移到oceanbase因为主键中空格被删除,出现主键重复。我们业务数据主键中空格有业务含义的,这个机制能否有参数控制。

在数据库上写入数据上验证了下

这是 MySQL 行为。
MySQL :: MySQL 5.7 Reference Manual :: 11.3.2 The CHAR and VARCHAR Types

All MySQL collations are of type PAD SPACE. This means that all CHAR, VARCHAR, and TEXT values are compared without regard to any trailing spaces. “Comparison” in this context does not include the LIKE pattern-matching operator, for which trailing spaces are significant. For example:



For those cases where trailing pad characters are stripped or comparisons ignore them, if a column has an index that requires unique values, inserting into the column values that differ only in number of trailing pad characters results in a duplicate-key error. For example, if a table contains 'a', an attempt to store 'a ' causes a duplicate-key error.


在 mysql 里 ,字符串等值比较会自动去除右边空格,存储的时候不会改变用户输入的字符串。主键要判断唯一性,会自动去除右边空格。

(root@127.1:3304) [test]> select 'a     '='a ', 'a'='a', 'a'='a  ';
+---------------+---------+-----------+
| 'a     '='a ' | 'a'='a' | 'a'='a  ' |
+---------------+---------+-----------+
|             1 |       1 |         1 |
+---------------+---------+-----------+
1 row in set (0.00 sec)

社区版有什么办法不按这种方式删除空格额

没有办法,应该不会做,做了就跟 MySQL 不兼容了。

你可以换 ORACLE 租户,或者让业务改规则。

oracle租户是企业版对吧

是的, 企业版支持oracle