【问题标题】:Postgresql Insensitive [closed]Postgresql不敏感[关闭]
【发布时间】:2017-05-31 20:25:59
【问题描述】:

我有一个配置了 PostgreSQL 的项目,当事务发生在 PostgreSQL 上时,我得到关于“ID”的异常不会退出此类错误,这是一个区分大小写的问题。如何让 PostgreSQL 忽略大小写。

【问题讨论】:

  • 请提供确切的错误
  • 我已经回复了一个答案,请看,完全可以理解

标签: java postgresql wso2dss


【解决方案1】:

在 Postgres 中,任何在创建时用双引号引起来的标识符(即列名、表名等)变得区分大小写,而没有双引号的标识符不区分大小写。

例如-

Create table foo ("ID" serial, name character varying); --Now using select query as select id, name from foo -- gives error, id does not exist --correct query select "ID", name from foo -- or you can also use as below select "ID", NAME from foo -- this will also work

“ID”列区分大小写,名称不区分大小写,同样适用于表名或任何其他标识符。因此,为避免混淆,最好使用不带双引号的标识符。

【讨论】:

  • 在查询下面找到,我是如何创建表的,我仍然得到错误。如果不存在 DM_GROUP ("ID" BIGSERIAL NOT NULL 主键,描述文本默认 NULL,GROUP_NAME VARCHAR(100) 默认 NULL,OWNER VARCHAR(45) 默认 NULL,TENANT_ID INTEGER 默认值 0),则创建表;
  • 数据库详细信息。编码 - UTF8 和排序规则 - en_IN
  • 也许您的客户正在更改发送到数据库的查询。检查数据库日志,看看哪个语句返回错误。
  • 您上面的创建查询没有任何问题。那么您能否解释一下您何时收到 ID 不存在的错误。是在您使用选择查询时吗?注意要使用“ID”列,您必须使用双引号。@ThomsonIgnesious
  • 测试你的代码,我认为罪魁祸首是第 50 行,"stmt = conn.prepareStatement(sql, new String[]{"ID"});"相反,你应该试试这个“stmt = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);”并记住在您的文件中导入“java.sql.Statement”。在替换代码运行没有抱怨的那一行之后,我已经在我的机器上测试了代码。希望这对您有所帮助。 @ThomsonIgnesious
【解决方案2】:

您可以在查询中使用lower 之类的函数,也可以使用 citext。您将在此处找到更多信息: https://www.postgresql.org/docs/9.6/static/citext.html

【讨论】:

  • 没有忽略大小写的排序规则(至少在我知道的操作系统上)。
  • 对不起,我的排序规则错了。
猜你喜欢
  • 2021-03-09
  • 2011-08-11
  • 2019-01-12
  • 1970-01-01
  • 1970-01-01
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多