Welcome 微信登录

首页 / 数据库 / MySQL / Oracle中CHAR类型自动补足空格的问题解决

在Oracle中,CHAR类型的字段值会自动补足空格。所以当其作为条件时,就有可能查不出想要的数据。
如果不允许改DB设计的话,那就用RTRIM来解决吧。例:

DB:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->CREATE TABLE TEST

    TEST_ID                        VARCHAR2(64) NOT NULL,
    TEST_CHAR                      CHAR(10),
    CONSTRAINT TEST_ID PRIMARY KEY (TEST_ID)
);
INSERT INTO TEST VALUES("1","a");
测试代码:
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->Session session = factory.getCurrentSession();
session.beginTransaction();
List list = session.createQuery("FROM Test WHERE RTRIM(TEST_CHAR) = "a"").list();
session.close();
assertTrue(list.size() > 0);
输出结果(ORACLE):
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->Hibernate: 
    select
        test0_.TEST_ID as TEST1_0_,
        test0_.TEST_CHAR as TEST4_0_ 
    from
        TEST test0_ 
    where
        rtrim(TEST_CHAR)="a"
14:09:53,171DEBUG StringType:172 - returning "1" as column: TEST1_0_
14:09:53,187DEBUG StringType:172 - returning "a         " as column: TEST4_0_
而MySQL不会自动补足空格,同样的代码也是可以适用的:
输出结果(MySQL):
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->Hibernate: 
    select
        test0_.TEST_ID as TEST1_0_,
        test0_.TEST_CHAR as TEST4_0_ 
    from
        TEST test0_ 
    where
        rtrim(TEST_CHAR)="a"
14:09:01,828DEBUG StringType:172 - returning "1" as column: TEST1_0_
14:09:01,828DEBUG StringType:172 - returning "a" as column: TEST4_0_Oracle相关:Rman Crosscheck删除失效归档Oracle???引存储关系到数据库的运行效率相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数