gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:53 25 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(AL32UTF8 的 NLS_CHARACTERSET),您还可以根据字符长度而不是字节长度在 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/28218289/

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