QuoteLENGTHB uses bytes instead of characters to compute the length.
LENGTHC uses Unicode characters to compute the length.
LENGTH2 uses UCS2 code points to compute the length.
LENGTH4 uses UCS4 code points to compute the length.
1 2 3 4 5 6 7 8 9 10
use Encode; my $bytes; eval { # Zeichen als Oktetten (aka Bytes), bei Kodierungsprobleme stirbt das Programm $bytes = encode("utf-8", $string, Encode::FB_CROAK); }; if ($@) { # Falls Problem in eval, dann ... # dein Code zur Fehlerbehandlung }
1
2
3
4
5
6
7
8
9
10
11
...
my $fieldLength = 2000;
foreach (@elements) {
use bytes;
chomp;
if (length($_) >= $fieldLength) {
$_ = substr($_, 0, $fieldLength);
}
...
1 2
my $foo = 'hässlichblöd'; chop $foo while (length(encode("utf-8", $foo)) > 10);
2013-01-29T10:46:13 MuffiVARCHAR2(2000) in Oracle heisst 2000 Bytes, nicht 2000 Zeichen.
SELECT * FROM NLS_DATABASE_PARAMETERS;
CREATE TABLE [tablename] ([columname] VARCHAR2(2000 CHAR) [, ...]);
ALTER SESSION SET NLS_LENGTH_SEMANTICS = 'CHAR';
ALTER TABLE [tablename] MODIFY [columname] VARCHAR2(2000 CHAR);
2013-01-31T14:12:03 tcicitDa hatte wohl vor dir jemand gar keine Ahnung, was in dem Feld gespeichert werden sollte oder konnte nicht die Dokumentation entziffern. Sowas passiert Quereinsteigern von anderen DBs gern.VARCHAR 2000 war mit BYTE angelegt