Maison base de données tutoriel mysql Oracle基本数据类型存储格式浅析(二)数字类型

Oracle基本数据类型存储格式浅析(二)数字类型

Jun 07, 2016 pm 03:44 PM
oracle 基本 存储 数字 数据 格式 类型

这篇文章主要描述NUMBER类型的数据和如何在数据库中存储的。 1 number类型的组成 Oracle的number类型最多由三个部分构成,这三个部分分别是 “最高位表示位”、“数据部分”、“符号位”。 其中负数存在符号位,正数没有符号位。 另外,数0比较特殊,它只包

这篇文章主要描述NUMBER类型的数据和如何在数据库中存储的。

1 number类型的组成

Oracle的number类型最多由三个部分构成,这三个部分分别是“最高位表示位”、“数据部分”、“符号位”。

其中负数存在符号位,正数没有符号位。

另外,数值0比较特殊,它只包含一个数值最高位表示位80,没有数据部分,也没有符号位。

1.1 最高位表示位

正数的最高位表示位大于80,负数的最高位表示位小于80。

一个正数的最高位是个位的话,则最高位表示位为0X C1(即十进制的193),百位、万位依次为C2、C3,百分位、万分为依次为C0、BF。

一个负数的最高位为个位的话,最高位表示位为0X 3E(即十进制的62),百位、万位依次为3D、3C,百分位、万分位依次为3F、40。

1.2 数据部分

数据部分每一字节都表示2位数字。(由)这个两位数字(组成的一个数值)的范围可能是从0到99,如果是数据本身是正数,则分别用六进制的1到64表示,如果数据本身是负数,则使用进制65到2表示。

注意:

在数据部分中,同样是(数据部分中的)0,在正数时用0x01表示,而在负数时用0x65表示。

在数据部分中,同样是数据部分中的)99,在正数时用0x64表示,而在负数时用0x2表示。

1.3 符号位

当数字为负数,才有符号位。符号位用0x66表示。

注意:用0x66表示,因为同样的一个数字,在正数与负数表示时,它们之和为0x66。例如:1的数据部分表示为0x02,而-1的数据部分表示为0x64。这个两个数之和为0x66。

2 实验过程

上面的这些是我通过DUMP结果总结出来的,对于上面提到的这些关系常数,Oracle之所以这样选择是有道理的,我们后面根据例子也可以推导出来,而且会进一步说明为什么会采用这种方式表示。这里列出的意思是使大家先对NUMBER类型数据有一个大概的了解。

下面我们通过一个例子详细说明:

SQL> create table test_number (number_col number);

Table created

SQL> insert into test_number values (0);

1 row inserted

SQL> insert into test_number values (1);

1 row inserted

SQL> insert into test_number values (2);

1 row inserted

SQL> insert into test_number values (25);

1 row inserted

SQL> insert into test_number values (123);

1 row inserted

SQL> insert into test_number values (4100);

1 row inserted

SQL> insert into test_number values (132004078);

1 row inserted

SQL> insert into test_number values (2.01);

1 row inserted

SQL> insert into test_number values (0.3);

1 row inserted

SQL> insert into test_number values (0.00000125);

1 row inserted

SQL> insert into test_number values (115.200003);

1 row inserted

SQL> insert into test_number values (-1);

1 row inserted

SQL> insert into test_number values (-5);

1 row inserted

SQL> insert into test_number values (-20032);

1 row inserted

SQL> insert into test_number values (-234.432);

1 row inserted

SQL> commit;

Commit complete

SQL> col d_number format a50

SQL> select number_col, dump(number_col, 16) d_number from test_number;

NUMBER_COL D_NUMBER

---------- --------------------------------------------------

         0 Typ=2 Len=1: 80

         1 Typ=2 Len=2: c1,2

         2 Typ=2 Len=2: c1,3

        25 Typ=2 Len=2: c1,1a

       123 Typ=2 Len=3: c2,2,18

      4100 Typ=2 Len=2: c2,2a

 132004078 Typ=2 Len=6: c5,2,21,1,29,4f

      2.01 Typ=2 Len=3: c1,3,2

       0.3 Typ=2 Len=2: c0,1f

   1.25E-6 Typ=2 Len=3: be,2,1a

115.200003 Typ=2 Len=6: c2,2,10,15,1,4

        -1 Typ=2 Len=3: 3e,64,66

        -5 Typ=2 Len=3: 3e,60,66

    -20032 Typ=2 Len=5: 3c,63,65,45,66

  -234.432 Typ=2 Len=6: 3d,63,43,3a,51,66

15 rows selected

3 结论解释

下面根据例子得到的结果,对每行进行说明。首先说明两点基本的。DUMP函数返回的TYPE=2表示DUMP的数据类型是NUMBER,LENGTH=N表示数值在数据库中存储的长度是N。

3.1 Dump(0)

DUMP(0) 的结果是0x80,在前面已经提到,0只有高位表示位,没有数据位。由于0的特殊,既不属于正数,也不属于负数,因此使用高位表示位用80表示就足够了,不会和其它数据冲突,Oracle出于节省空间的考虑将后面数据部分省掉了。

但是为什么Oracle选择0x80表示0呢?我们知道正数和负数互为相反数,每个正数都有一个对应的负数。因此如果我们要使用编码表示数值,则表示正数和负数的编码应该各占一半,这样才能保证使Oracle表示数据范围是合理的。而0x80的二进制编码是1000 0000,正好是一个字节编码最大值的一半,因此,Oracle选择0x80来表示0,是十分有道理的。

注释:

0x80的二进制编码是1000 0000,正好是一个字节编码最大值的一半,因为

1·0111 1111共2的8次方-1个(Oracle底层是用C语言实现的,我们知道二进制0在C语言中用作字符串终结符,Oracle为了避免这个问题,故将0这个值去掉),而1000 0001·1111 1111也共2的8次方-1个。

3.2 Dump(1)

DUMP(1)的结果是0xc102,0xc1表示了最高位个位,0x2表示数值是1。首先,Oracle为什么用C1表示个位呢?其实,道理和刚才的差不多。采用科学计数法,任何一个实数S都可以描述为A.B×10n,A 表示整数部分,B表示小数部分,而N表示10的指数部分。当S大于1时,N大于等于0,S小于1时,N小于0。也就是说,采用指数的方式表示,N大于0和 N小于0的情况各占一半左右时,Oracle所表示的范围最广(?)。因此,Oracle选择了C1表示个位是最高位的情况。

SQL> SELECT TO_CHAR(ROUND(TO_NUMBER('81', 'XXX') + (TO_NUMBER('FF', 'XXX') - TO_NUMBER('81', 'XXX') + 1)/2), 'XX') VALUE FROM DUAL;

VALUE

-----

   C1

为什么ORACLE使用0x2表示1,而不直接使用0x1表示1呢?Oracle每个字节表示2位数,因此对于这个2位数,出现的可能是0~99共100种可能,问题出在0这里。

Oracle底层是用C语言实现的,我们知道二进制0在C语言中用作字符串终结符,Oracle为了避免这个问题,因此使用了0x1表示0,并依次类推,使用0x64表示99。

3.3 Dump(2)

DUMP(2)的结果是0xc103。

3.4 Dump(25)

DUMP(25)的结果是0xc11a。前面提到,数据部分是以2位为最小单位保存的。因此对于25来说,最高位表示位仍然是个位,个位上的值是25,根据上面推出的规则,25在存储为0xc11a。

SQL> SELECT TO_CHAR(25 + 1, 'xx') VALUE FROM DUAL;

VALUE

-----

1a

3.5 Dump(123)

DUMP(123)的结果是0xc20218。由于123最高为是百位,所以最高位表示位为0xc2,百位上是1,用0x02表示,个位上是23,用0x18表示。

3.6 Dump(4100)

DUMP(4100)的结果是0xc22a。

注意一点,如果数字最后数位上如果是0,Oracle出于节省空间的考虑不会存储。比如:4100只保存百位上的41,12000000只保存百位位上的12,512000只保存万位上的51和百位上的20。

3.7 Dump(132004078)

DUMP(132004078)的结果是0xc5022101294f。最高位是亿位,因此用0xC5表示,亿位上是1用0x02表示,百万位上是32用0x21表示,万位上是0用0x01表示,百位上是40用0x29表示,个位上78用0x4F表示。

注意:中间数位上的0不能省略。

3.8 Dump(2.01)

DUMP(2.01)的结果是0xc10302。最高位是个位用0xC1表示,个位上是2用0x03表示,百分位上是1用0x02表示。

注意:个位下面一位是百分位不是十分位。

3.9 Dump(0.3)

DUMP(0.3)的结果是0xc01f。最高位是百分位,使用0xC0表示,百分位上是30用0x1F表示。

3.10 DUMP(0.00000125)

DUMP(0.00000125)的结果是0xbe021a。最高位是百万分位,用0xBE表示,最高位上的1用0x02表示,25用0x1a表示。

3.11 DUMP(115.200003)

DUMP(115.200003)的结果是0xc20210150104。





3.12 DUMP(-1)

DUMP(-1)的结果是0x3e6466。最高位个位,用0x3E表示,64表示个位上是1,66是符号位,表示这个数是负数。

负数和正数互为相反数,负数的最高位表示位和它对应的相反数的最高位相加的值是FF。 1的最高位表示位是C1,-1的最高位表示位是3E。负数中1用64表示。负数中的数值和它相反数的数据相加是0x66,也就是符号位。正数1用0x02 表示,负数1用0x64表示,二者相加是0x66。负数多个一个标识位,用0x66表示。由于正数的表示范围是0x01到0x64,负数的表示范围是 0x65到0x02。因此,不会在表示数字时出现的0x66表示。

3.13 DUMP(-5)

DUMP(-5)的结果是0x3e6066。0x3e表示最高位是个位,0x60表示个位上是5,0x66是符号标识位。0x3E加0xC1是0xFF。0x60加0x06的结果是0x66。

3.14 DUMP(-20032)

DUMP(-20032) 的结果是0x3c63654566。最高位是万位,正数的万位是0xC3,因此负数的万位是0x3C。万位上是2,正数用0x03表示,负数为0x63,百位上是0,正数用0x01表示,负数使用0x65表示,个位上是32,正数用0x21表示,负数使用0x45表示。0x66是负数表示位。

3.15 DUMP(-234.432)

DUMP(-234.432)的结果是0x3d63433a5166。


ORACLE数值类型详解--NUMBER、BINARY_FLOAT、BINARY_DOUBLE、BINARY_INTEGER、FLOAT


 

转贴:http://www.itpub.net/forum.php?mod=viewthread&tid=308317

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

De quelle quantité de mémoire Oracle a-t-il besoin ? De quelle quantité de mémoire Oracle a-t-il besoin ? May 10, 2024 am 04:12 AM

La quantité de mémoire requise par Oracle dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis : pour le stockage des tampons de données, des tampons d'index, l'exécution d'instructions SQL et la gestion du cache du dictionnaire de données. Le montant exact dépend de la taille de la base de données, du niveau d'activité et du niveau de performances requis. Les meilleures pratiques incluent la définition de la taille SGA appropriée, le dimensionnement des composants SGA, l'utilisation d'AMM et la surveillance de l'utilisation de la mémoire.

Exigences de configuration matérielle du serveur de base de données Oracle Exigences de configuration matérielle du serveur de base de données Oracle May 10, 2024 am 04:00 AM

Exigences de configuration matérielle du serveur de base de données Oracle : Processeur : multicœur, avec une fréquence principale d'au moins 2,5 GHz Pour les grandes bases de données, 32 cœurs ou plus sont recommandés. Mémoire : au moins 8 Go pour les petites bases de données, 16 à 64 Go pour les tailles moyennes, jusqu'à 512 Go ou plus pour les grandes bases de données ou les charges de travail lourdes. Stockage : disques SSD ou NVMe, matrices RAID pour la redondance et les performances. Réseau : réseau haut débit (10GbE ou supérieur), carte réseau dédiée, réseau à faible latence. Autres : alimentation stable, composants redondants, système d'exploitation et logiciels compatibles, dissipation thermique et système de refroidissement.

Les startups d'IA ont collectivement transféré leurs emplois vers OpenAI, et l'équipe de sécurité s'est regroupée après le départ d'Ilya ! Les startups d'IA ont collectivement transféré leurs emplois vers OpenAI, et l'équipe de sécurité s'est regroupée après le départ d'Ilya ! Jun 08, 2024 pm 01:00 PM

" sept péchés capitaux" » Dissiper les rumeurs : selon des informations divulguées et des documents obtenus par Vox, la haute direction d'OpenAI, y compris Altman, était bien au courant de ces dispositions de récupération de capitaux propres et les a approuvées. De plus, OpenAI est confronté à un problème grave et urgent : la sécurité de l’IA. Les récents départs de cinq employés liés à la sécurité, dont deux de ses employés les plus en vue, et la dissolution de l'équipe « Super Alignment » ont une nouvelle fois mis les enjeux de sécurité d'OpenAI sur le devant de la scène. Le magazine Fortune a rapporté qu'OpenA

Le modèle 70B génère 1 000 jetons en quelques secondes, la réécriture du code dépasse GPT-4o, de l'équipe Cursor, un artefact de code investi par OpenAI Le modèle 70B génère 1 000 jetons en quelques secondes, la réécriture du code dépasse GPT-4o, de l'équipe Cursor, un artefact de code investi par OpenAI Jun 13, 2024 pm 03:47 PM

Modèle 70B, 1000 tokens peuvent être générés en quelques secondes, ce qui se traduit par près de 4000 caractères ! Les chercheurs ont affiné Llama3 et introduit un algorithme d'accélération. Par rapport à la version native, la vitesse est 13 fois plus rapide ! Non seulement il est rapide, mais ses performances sur les tâches de réécriture de code dépassent même GPT-4o. Cette réalisation vient d'anysphere, l'équipe derrière le populaire artefact de programmation d'IA Cursor, et OpenAI a également participé à l'investissement. Il faut savoir que sur Groq, un framework d'accélération d'inférence rapide bien connu, la vitesse d'inférence de 70BLlama3 n'est que de plus de 300 jetons par seconde. Avec la vitesse de Cursor, on peut dire qu'il permet une édition complète et quasi instantanée des fichiers de code. Certaines personnes l'appellent un bon gars, si tu mets Curs

China Mobile : l'humanité entre dans la quatrième révolution industrielle et a officiellement annoncé « trois plans » China Mobile : l'humanité entre dans la quatrième révolution industrielle et a officiellement annoncé « trois plans » Jun 27, 2024 am 10:29 AM

Selon les informations du 26 juin, lors de la cérémonie d'ouverture de la Conférence mondiale des communications mobiles 2024 de Shanghai (MWC Shanghai), le président de China Mobile, Yang Jie, a prononcé un discours. Il a déclaré qu'actuellement, la société humaine entre dans la quatrième révolution industrielle, dominée par l'information et profondément intégrée à l'information et à l'énergie, c'est-à-dire la « révolution de l'intelligence numérique », et la formation de nouvelles forces productives s'accélère. Yang Jie estime que de la « révolution de la mécanisation » entraînée par les machines à vapeur, à la « révolution de l'électrification » entraînée par l'électricité et les moteurs à combustion interne, en passant par la « révolution de l'information » entraînée par les ordinateurs et Internet, chaque cycle de révolution industrielle est basé sur « L'information et « l'énergie » constituent l'axe principal, apportant le développement de la productivité

Un professeur américain a utilisé sa fille de 2 ans pour former un modèle d'IA qui apparaîtra dans Science ! Des oursons humains utilisent des caméras frontales pour entraîner une nouvelle IA Un professeur américain a utilisé sa fille de 2 ans pour former un modèle d'IA qui apparaîtra dans Science ! Des oursons humains utilisent des caméras frontales pour entraîner une nouvelle IA Jun 03, 2024 am 10:08 AM

Incroyablement, afin de former un modèle d’IA, un professeur de l’Université d’État de New York a attaché une caméra de type GoPro à la tête de sa fille ! Même si cela semble incroyable, le comportement de ce professeur est en réalité bien fondé. Pour former le réseau neuronal complexe derrière LLM, des données massives sont nécessaires. Notre processus actuel de formation LLM est-il nécessairement le moyen le plus simple et le plus efficace ? Certainement pas! Les scientifiques ont découvert que chez les tout-petits, le cerveau absorbe l’eau comme une éponge, formant ainsi rapidement une vision du monde cohérente. Bien que LLM fonctionne parfois de manière étonnante, avec le temps, les enfants humains deviennent plus intelligents et plus créatifs que le modèle ! Le secret pour que les enfants maîtrisent la langue. Comment mieux former le LLM ? Quand les scientifiques sont intrigués par la solution,

Quelles sont les plates-formes de trading de monnaie virtuelle dans le monde entier? Quelles sont les plates-formes de trading de monnaie virtuelle dans le monde entier? Feb 27, 2025 pm 06:09 PM

Les quatre principales plateformes mondiales de trading de devises virtuelles en 2025 sont: Binance: un leader dans l'industrie, offrant des options de négociation diversifiées et des produits innovants. OKX: une énorme base d'utilisateurs, fournissant des services complets de crypto-monnaie. Gate.io: convivial, offrant une large gamme d'options de crypto-monnaie. Bitget: Focus sur le trading des dérivés et fournit des contrats à terme à fort effet de levier.

L'histoire intérieure de l'algorithme de recherche de Google a été révélée et 2 500 pages de documents avec de vrais noms ont été divulgués ! Les mensonges du classement de recherche dévoilés L'histoire intérieure de l'algorithme de recherche de Google a été révélée et 2 500 pages de documents avec de vrais noms ont été divulgués ! Les mensonges du classement de recherche dévoilés Jun 11, 2024 am 09:14 AM

Récemment, 2 500 pages de documents internes de Google ont été divulguées, révélant le fonctionnement de la recherche, « l’arbitre le plus puissant d’Internet ». Le co-fondateur et PDG de SparkToro est une personne anonyme. Il a publié un article de blog sur son site Web personnel, affirmant qu'« une personne anonyme a partagé avec moi des milliers de pages de documentation divulguée sur l'API de recherche Google que tout le monde dans le domaine du référencement devrait lire ». ! "Depuis de nombreuses années, RandFishkin est le principal porte-parole dans le domaine du SEO (Search Engine Optimization, optimisation des moteurs de recherche), et il a proposé le concept d'« autorité de site Web » (DomainRating). Puisqu'il est très respecté dans ce domaine, RandFishkin

See all articles