powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Rpad дополняет строку длины Length или длины LengthB?
2 сообщений из 2, страница 1 из 1
Rpad дополняет строку длины Length или длины LengthB?
    #40061240
yon_brover
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На Oracle 11 у меня Rpad дополняет строку длины Length.
Вот тут длина Length равна 5 и Rpad дополняет её до длины 11 шестью подчёркиваниями:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE	11.2.0.2.0	Production
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

SQL> select length('Зенит'), lengthb('Зенит'), rpad('Зенит', 11, '_') from dual;
LENGTH('ЗЕНИТ') LENGTHB('ЗЕНИТ') RPAD('ЗЕНИТ',11,'_')
--------------- ---------------- --------------------
              5               10 Зенит______



А на Oracle 12 у меня Rpad дополняет строку длины LengthB:
Вот тут длина LengthВ равна 10 и Rpad дополняет её до длины 11 одним подчёркиванием:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
SQL> select * from v$version;
BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production              0
PL/SQL Release 12.1.0.2.0 - Production                                                    0
CORE	12.1.0.2.0	Production                                                                0
TNS for Linux: Version 12.1.0.2.0 - Production                                            0
NLSRTL Version 12.1.0.2.0 - Production           
                                         0
SQL> select length('Зенит'), lengthb('Зенит'), rpad('Зенит', 11, '_') from dual;
LENGTH('ЗЕНИТ') LENGTHB('ЗЕНИТ') RPAD('ЗЕНИТ',11,'_')
--------------- ---------------- --------------------
              5               10 Зенит_



Вот эти параметры у серверов Oracle 11 и Oracle 12 одинаковые:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
SQL> select * from nls_session_parameters order by parameter;
PARAMETER                                                                        VALUE
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
NLS_CALENDAR                                                                     GREGORIAN
NLS_COMP                                                                         BINARY
NLS_CURRENCY                                                                     р.
NLS_DATE_FORMAT                                                                  DD.MM.RR
NLS_DATE_LANGUAGE                                                                RUSSIAN
NLS_DUAL_CURRENCY                                                                р.
NLS_ISO_CURRENCY                                                                 RUSSIA
NLS_LANGUAGE                                                                     RUSSIAN
NLS_LENGTH_SEMANTICS                                                             BYTE
NLS_NCHAR_CONV_EXCP                                                              FALSE
NLS_NUMERIC_CHARACTERS                                                           ,
NLS_SORT                                                                         RUSSIAN
NLS_TERRITORY                                                                    RUSSIA
NLS_TIME_FORMAT                                                                  HH24:MI:SSXFF
NLS_TIMESTAMP_FORMAT                                                             DD.MM.RR HH24:MI:SSXFF
NLS_TIMESTAMP_TZ_FORMAT                                                          DD.MM.RR HH24:MI:SSXFF TZR
NLS_TIME_TZ_FORMAT                                                               HH24:MI:SSXFF TZR
17 rows selected

SQL> select * from v$nls_parameters order by parameter;
PARAMETER                                                        VALUE                                                                CON_ID
---------------------------------------------------------------- ---------------------------------------------------------------- ----------
NLS_CALENDAR                                                     GREGORIAN                                                                 0
NLS_CHARACTERSET                                                 AL32UTF8                                                                  0
NLS_COMP                                                         BINARY                                                                    0
NLS_CURRENCY                                                     р.                                                                        0
NLS_DATE_FORMAT                                                  DD.MM.RR                                                                  0
NLS_DATE_LANGUAGE                                                RUSSIAN                                                                   0
NLS_DUAL_CURRENCY                                                р.                                                                        0
NLS_ISO_CURRENCY                                                 RUSSIA                                                                    0
NLS_LANGUAGE                                                     RUSSIAN                                                                   0
NLS_LENGTH_SEMANTICS                                             BYTE                                                                      0
NLS_NCHAR_CHARACTERSET                                           AL16UTF16                                                                 0
NLS_NCHAR_CONV_EXCP                                              FALSE                                                                     0
NLS_NUMERIC_CHARACTERS                                           ,                                                                         0
NLS_SORT                                                         RUSSIAN                                                                   0
NLS_TERRITORY                                                    RUSSIA                                                                    0
NLS_TIME_FORMAT                                                  HH24:MI:SSXFF                                                             0
NLS_TIMESTAMP_FORMAT                                             DD.MM.RR HH24:MI:SSXFF                                                    0
NLS_TIMESTAMP_TZ_FORMAT                                          DD.MM.RR HH24:MI:SSXFF TZR                                                0
NLS_TIME_TZ_FORMAT                                               HH24:MI:SSXFF TZR                                                         0
19 rows selected



Хочу на Oracle 12 сделать, как на Oracle 11 и не могу понять, какой параметр отвечает за длину дополняемой Rpad-ом строки при юникодной кодировке.
...
Рейтинг: 0 / 0
Rpad дополняет строку длины Length или длины LengthB?
    #40061409
SQL*Plus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предполагаю, что вы наткнулись на баг.

В Oracle 19.4 такой проблемы нет
Прогон скрипта в Oracle 19.4
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
SQL> SET ECHO ON;

SQL> COLUMN parameter FORMAT A20;
SQL> COLUMN value FORMAT A20;

SQL> SELECT banner_full FROM v$version;

BANNER_FULL                                                                                                                                                     
-------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.4.0.0.0

SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS = CHAR;
Session altered.

SQL> select 'SYSTEM' AS what, parameter, value from v$nls_parameters 
  2  where parameter = 'NLS_CHARACTERSET';

WHAT   PARAMETER            VALUE               
------ -------------------- --------------------
SYSTEM NLS_CHARACTERSET     AL32UTF8            

SQL> select 'SESSION' AS what, parameter, value from nls_session_parameters 
  2  where parameter = 'NLS_LENGTH_SEMANTICS';

WHAT    PARAMETER            VALUE               
------- -------------------- --------------------
SESSION NLS_LENGTH_SEMANTICS CHAR                

SQL> select length('Зенит'), lengthb('Зенит'), rpad('Зенит', 11, '_') from dual;

LENGTH('ЗЕНИТ') LENGTHB('ЗЕНИТ') RPAD('ЗЕНИТ
--------------- ---------------- -----------
              5               10 Зенит______

SQL> ALTER SESSION SET NLS_LENGTH_SEMANTICS = BYTE;
Session altered.

SQL> select 'SESSION' AS what, parameter, value from nls_session_parameters 
  2  where parameter = 'NLS_LENGTH_SEMANTICS';

WHAT    PARAMETER            VALUE               
------- -------------------- --------------------
SESSION NLS_LENGTH_SEMANTICS BYTE                

SQL> select length('Зенит'), lengthb('Зенит'), rpad('Зенит', 11, '_') from dual;

LENGTH('ЗЕНИТ') LENGTHB('ЗЕНИТ') RPAD('ЗЕНИТ
--------------- ---------------- -----------
              5               10 Зенит______



Перейдите на более свежую версию Oracle Database или свяжитесь с техподдержкой My Oracle Support (MOS).
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Rpad дополняет строку длины Length или длины LengthB?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]