gpt4 book ai didi

java - Oracle 看到的字符串的真实长度

转载 作者:搜寻专家 更新时间:2023-10-30 21:17:40 24 4
gpt4 key购买 nike

所以我正在尝试将数据保存到 Oracle 数据库中。我有一个字符串:

Väste

(某个州的名称)。

当我对其执行 .length() 时,我得到 5,但是当我将它保存到数据库时,我得到:

ORA-12899: value too large for column "dude"."POST_ADR"."STATE_CD" (actual: 6, maximum: 5)

那么如何获得“oracle”长度呢?

最佳答案

正如其他人所展示的那样,您可以使用 Oracle 数据库的字符集将 Java 字符串转换为字节数组,然后从中获取以字节为单位的长度。然而,这取决于了解您的数据库的字符集是什么——不同的数据库将具有不同的字符集,这将导致不同字符集中的相同字符串的字节长度不同。

假设您的数据库使用可变宽度字符集,如 UTF-8(NLS_CHARACTERSET of AL32UTF8),您还可以在 Oracle 中根据字符长度而不是字节长度来声明列。这可以简化您的代码,因为您只需检查字符串的字符长度。它还简化了用户的通信。用户通常很难理解为什么一个字段有时可以存储 5 个字符,而有时它会拒绝 2 个字符的字符串,具体取决于作为字符串一部分的字符(UTF-8 字符集中的 1 个字符最多需要 3 个字节存储)。

默认情况下,当你声明一个列时

CREATE TABLE foo (
col_name VARCHAR2(5)
);

告诉 Oracle 允许最多 5 个字节的数据。但是,如果无论字节数如何,都希望允许 5 个字符的数据,则可以使用字符长度语义

CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);

假设您想在运行 DDL 时对所有表执行此操作,您还可以在运行 DDL 之前在 session 级别设置 nls_length_semantics

ALTER SESSION SET nls_length_semantics = CHAR;

CREATE TABLE foo (
col_name VARCHAR2(5)
);

创建一个表,其中一列最多允许 5 个字符的数据。

关于java - Oracle 看到的字符串的真实长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24126902/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com