Хабрахабр

По следам Highload++ Siberia 2019 — 8 задач по Oracle

Приведем выдержки из документации (12.1.0.2) по хранению различных типов данных в Oracle.

You specify the database character set when you create your database. CHAR Data Type
The CHAR data type specifies a fixed-length character string in the database character set. If you insert a value that is shorter than the column length, then Oracle blank-pads the value to column length. Oracle ensures that all values stored in a CHAR column have the length specified by size in the selected length semantics.

You specify the database character set when you create your database. VARCHAR2 Data Type
The VARCHAR2 data type specifies a variable-length character string in the database character set. Oracle stores a character value in a VARCHAR2 column exactly as you specify it, without any blank-padding, provided the value does not exceed the length of the column.

0 x 10-130 to but not including 1. NUMBER Data Type
The NUMBER data type stores zero as well as positive and negative fixed numbers with absolute values from 1. If you specify an arithmetic expression whose value has an absolute value greater than or equal to 1. 0 x 10126. Each NUMBER value requires from 1 to 22 bytes. 0 x 10126, then Oracle returns an error. Taking this into account, the column size in bytes for a particular numeric data value NUMBER(p), where p is the precision of a given value, can be calculated using the following formula: ROUND((length(p)+s)/2))+1 where s equals zero if the number is positive, and s equals 1 if the number is negative.

Кроме того, возьмем выдержку из документации насчет хранения Null–значений.

Nulls indicate missing, unknown, or inapplicable data. A null is the absence of a value in a column. In these cases, they require 1 byte to store the length of the column (zero). Nulls are stored in the database if they fall between columns with data values. For example, if the last three columns of a table are null, then no data is stored for these columns. Trailing nulls in a row require no storage because a new row header signals that the remaining columns in the previous row are null.

Считаем, что в БД используется кодировка AL32UTF8. Исходя из этих данных, строим рассуждения. В этой кодировке русские буквы будут занимать 2 байта.

Оба поля имеют значение NULL, после них есть значащие поля, поэтому занимают по 1 байту.
4) C и Z. 1) A и X, значение поля a 'Y' занимает 1 байт, значение поля x ‘Д’ – 2 байта
2) B и Y, ‘Вася’ в b значение дополнится пробелами до 10 символов и займёт 14 байт, ‘Вася’ в d – займет 8 байт.
3) C и K. Поле С занимает 1 байт.
5) K и Z. Оба поля имеют значение NULL, но поле Z – последнее в таблице, поэтому места не занимает (0 байт). Значение в поле K занимает 1 байт, в Z – 0.
6) I и J. Аналогично предыдущему случаю. Длину считаем по взятой из документации формулы: round( (1 + 0)/2) +1 = 1 + 1 = 2.
7) J и X. Согласно документации, оба значения займут по 2 байта. Значение в поле J займет 2 байт, значение в поле X займет 2 байта.

Итого, правильные варианты: С и Z, I и J, J и X.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть