Oracle에서 볼 수 있는 문자열의 실제 길이
그래서 Oracle 데이터베이스에 데이터를 저장하려고 합니다.문자열이 있습니다.
Väste
(어디선가 있는 주의 이름).
.length()를 실행하면 5가 되지만 데이터베이스에 저장하면 다음과 같이 됩니다.
ORA-12899: value too large for column "dude"."POST_ADR"."STATE_CD" (actual: 6, maximum: 5)
그럼 어떻게 "오라클" 길이를 얻을 수 있을까요?
다른 사람들이 보여준 것처럼 Oracle 데이터베이스의 문자 집합을 사용하여 Java 문자열을 바이트 배열로 변환한 다음 이 문자열에서 길이를 바이트 단위로 가져올 수 있습니다.그러나 데이터베이스의 문자 집합이 무엇인지 알고 있어야 합니다. 데이터베이스마다 문자 집합이 다르므로 같은 문자열의 바이트 길이가 다릅니다.
데이터베이스가 UTF-8과 같은 가변 너비 문자 집합을 사용하고 있다고 가정합니다.NLS_CHARACTERSET
또한 Oracle에서 바이트 길이가 아닌 문자 길이를 기준으로 열을 선언할 수 있습니다.문자열의 문자 길이만 확인할 수 있으므로 코드를 단순화할 수 있습니다.또한 사용자의 의사소통을 단순화합니다.일반적으로 필드가 문자열의 일부인 문자에 따라 2개의 문자열을 거부하는 반면 필드가 5개의 문자를 저장할 수 있는 이유를 사용자가 이해하기 어렵습니다(UTF-8 문자 집합에서 1개의 문자는 최대 3바이트의 저장소가 필요할 수 있음).
기본적으로 열을 선언할 때
CREATE TABLE foo (
col_name VARCHAR2(5)
);
최대 5바이트의 데이터를 허용하도록 Oracle에 지시합니다.그러나 바이트 수에 관계없이 5자의 데이터를 허용하려면 문자 길이 의미론을 사용할 수 있습니다.
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
DDL을 실행하는 동안 모든 테이블에 대해 이 작업을 수행할 것이라고 가정하면 다음과 같이 설정할 수도 있습니다.nls_length_semantics
DDL을 실행하기 전에 세션 수준에서
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
최대 5자의 데이터를 허용하는 열이 있는 테이블을 만듭니다.
Oracle은 이 길이를 바이트 단위로 제공합니다."ä"
는 UTF-8(c3a4)의 2바이트입니다.
자세한 내용은 여기를 참조하십시오.
다음을 사용하여 길이를 바이트 단위로 표시할 수 있습니다.str.getBytes("UTF-8").length
합성 문자를 사용하고 있기 때문에 기본 바이트 배열을 얻은 다음 해당 길이를 얻어야 합니다.
"Väste".getBytes(java.nio.charset.StandardCharsets.UTF_8).length
6을 출력할 것입니다.
쿼리를 사용하여 문자열의 오라클 바이트 길이를 얻으려는 사용자는
SELECT
LENGTHB ('Test') "Length in bytes"
FROM
DUAL;
결과는 4로 나옵니다.
참조: http://www.dba-oracle.com/t_lengthb_lengthc_length2_length4.htm
public static int getByteSize(String content) {
int size = 0;
if (null != content) {
try {
size = content.getBytes("utf-8").length;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return size;
}
System.out.println("Väste"); // 6 System.out.println("Bää"); // 7
언급URL : https://stackoverflow.com/questions/24126902/true-length-of-a-string-as-seen-by-oracle
'programing' 카테고리의 다른 글
상수의 이름을 얻는 방법은 무엇입니까? (0) | 2023.08.19 |
---|---|
파워셸에서 N개의 병렬 작업 실행 (0) | 2023.08.19 |
단순 PowerShell 마지막 쓰기 시간 비교 (0) | 2023.08.14 |
Mac OS X에서 Git 설치 폴더 찾기 (0) | 2023.08.14 |
토쿠드와 프랙탈 나무 지수 (0) | 2023.08.14 |