ホームページ  >  記事  >  データベース  >  mysqlにはvarchar2がありますか?

mysqlにはvarchar2がありますか?

青灯夜游
青灯夜游オリジナル
2023-03-30 10:25:033016ブラウズ

Mysql には varchar2 はなく、varchar のみがあります。 VARCHAR は、最大 65,535 文字の長さの可変長文字列を表します。MySQL は、VARCHAR 値を 1 バイトまたは 2 バイトの長さのプレフィックスと実際のデータとして扱います。 VARCHAR2 は可変長文字列を表す Oracle の型で、1 ~ 4000 バイトの値を格納できます。つまり、シングルバイト文字セットの場合、VARCHAR2 列に最大 4000 文字を格納できます。

mysqlにはvarchar2がありますか?

このチュートリアルの動作環境: Windows7 システム、mysql8 バージョン、Dell G3 コンピューター。

Mysql には varchar2 がありません。varchar のみです。Oracle には、バイト長を表す varchar2 があります。中国語の文字を何文字まで収容できるかは、データベースの文字セットに関係します。

MySQL の varchar タイプ

VARCHAR は、長さが 65,535 文字に達する可変長文字列です。 MySQL は、VARCHAR 値を 1 バイトまたは 2 バイトの長さのプレフィックスに実際のデータを加えたものとして扱います。

長さのプレフィックスは、値のバイト数を指定します。列に必要な長さが 255 バイト未満の場合、長さのプレフィックスは 1 バイトです。列が 255 バイトを超える必要がある場合、長さのプレフィックスは 2 バイトの長さになります。

ただし、最大長は最大行サイズ (65,535 バイト) と使用する文字セットによって制限されます。これは、すべての列の合計長が 65,535 バイト未満である必要があることを意味します。

例を見てみましょう。

長さがそれぞれ 32765 (長さプレフィックス 2) と 32766 (2) の 2 つの列 s1 と s2 を持つ新しいテーブルを作成します。 32765 2 32766 2 = 65535 が最大行サイズであることに注意してください。

USE testdb;

CREATE TABLE IF NOT EXISTS varchar_test (
    s1 VARCHAR(32765) NOT NULL,
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

このステートメントはテーブルを正常に作成しました。ただし、列 s1 の長さを 1 だけ増やすとします。

USE testdb;
CREATE TABLE IF NOT EXISTS varchar_test_2 (
    s1 VARCHAR(32766) NOT NULL, -- error
    s2 VARCHAR(32766) NOT NULL
)  CHARACTER SET 'latin1' COLLATE LATIN1_DANISH_CI;

MySQL はエラー メッセージを発行します:

Error Code: 1118. Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs 0.000 sec

上に示すように、行の長さが大きすぎるため、create ステートメントは失敗しました。

VARCHAR カラムの長さよりも長い文字列を挿入すると、MySQL はエラーを発行します。次の例を考えてみましょう:

USE testdb;

CREATE TABLE items (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(3)
);

INSERT INTO items(title)
VALUES('ABCD');

この例では、MySQL は次のエラー メッセージを発行します:

1406 - Data too long for column 'title' at row 1

varchar2 type from oracle

可変長文字列を格納するには、Oracle VARCHAR2 データ型を使用できます。 VARCHAR2 列には、1 ~ 4000 バイトの値を格納できます。これは、シングルバイト文字セットの場合、VARCHAR2 列に最大 4000 文字を格納できることを意味します。

VARCHAR2 列を含むテーブルを作成する場合は、文字列の最大長 (バイト単位) を指定する必要があります:

VARCHAR2(max_size BYTE)

または文字数 -

VARCHAR2(max_size CHAR)

BYTE または CHAR が max_size の後に明示的に指定されている場合、Oracle は BYTE を使用します。つまり、VARCHAR2(N) 列には最大 N バイトの文字を保持できます。

VARCHAR2 列の最大長を超えるサイズの文字列を格納すると、Oracle はエラーを発行します。

たとえば、最大長 20 の VARCHAR2 列を定義すると、シングルバイト文字セットに最大 20 文字を格納できます。 21 文字以上が格納されている場合、Oracle はエラーを返します。

また、VARCHAR2(20) 列に 10 文字を格納する場合、Oracle は 20 バイトではなく 10 バイトのみを格納に使用します。したがって、VARCHAR2 データ型を使用すると、テーブルで使用される領域を節約できます。

VARCHAR2 値を比較する場合、Oracle は非パディング比較セマンティクスを使用します。

VARCHAR2 の最大長

Oracle 12c 以降、VARCHAR2 データ型にできる最大長は 32767 です。 Oracle は MAX_STRING_SIZE パラメータを使用して最大長を制御します。 MAX_STRING_SIZE が STANDARD の場合、VARCHAR2 の最大サイズは 4000 バイトです。 MAX_STRING_SIZE が EXTENDED の場合、VARCHAR2 のサイズ制限は 32767 です。

MAX_STRING_SIZE パラメータの値を取得するには、次のクエリを使用してください:

SELECT
    name,
    value
FROM
    v$parameter
WHERE
    name = 'max_string_size';

上記のクエリ ステートメントを実行すると、次の結果が得られます-

SHOW PARAMETER max_string_size;

[関連する推奨事項: mysql ビデオ チュートリアル ]

以上がmysqlにはvarchar2がありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。