È possibile, come altri hanno dimostrato, convertire la stringa Java in un array di byte utilizzando il set di caratteri del database Oracle e quindi ottenere la lunghezza in byte da questo. Ciò si basa, tuttavia, sulla conoscenza del set di caratteri del tuo database: diversi database avranno set di caratteri diversi che daranno origine a lunghezze di byte diverse per la stessa stringa in set di caratteri diversi.
Supponendo che il database utilizzi un set di caratteri a larghezza variabile come UTF-8 (NLS_CHARACTERSET
di AL32UTF8), è anche possibile dichiarare colonne in Oracle in base alla lunghezza del carattere anziché alla lunghezza del byte. Ciò può semplificare il tuo codice poiché puoi semplicemente controllare la lunghezza del carattere della tua stringa. Semplifica anche la comunicazione per gli utenti. È generalmente difficile per utenti di comprendere perché un campo può talvolta memorizzare 5 caratteri mentre altre volte respinge una stringa di 2 caratteri seconda delle caratteri che fanno parte della stringa (1 carattere nel set di caratteri UTF-8 può richiedere fino a 3 byte di stoccaggio).
Per impostazione predefinita, quando si dichiara una colonna
CREATE TABLE foo (
col_name VARCHAR2(5)
);
che indica a Oracle di consentire fino a 5 byte di dati. Se si desidera consentire 5 caratteri di dati, indipendentemente dal numero di byte, tuttavia, è possibile utilizzare caratteri semantica lunghezza
CREATE TABLE foo (
col_name VARCHAR2(5 CHAR)
);
Supponendo che si vuole fare questo per tutte le tabelle durante l'esecuzione DDL, è anche possibile impostare nls_length_semantics
a livello di sessione prima di eseguire il DDL
ALTER SESSION SET nls_length_semantics = CHAR;
CREATE TABLE foo (
col_name VARCHAR2(5)
);
crea una tabella con una colonna che consente fino a 5 caratteri di dati.
fonte
2014-06-09 19:22:12
È necessario specificare la codifica quando si utilizza getBytes() altrimenti getBytes() dipenderebbe dalla codifica di sistema predefinita. – dimoniy