varchar最大長

 


MySQL : 16383文字
Oracle : 4000バイト or 32767バイト
PosgreSQL : 10485760文字
SQL Server : 8000バイト

(8.0.29)

VARCHARはバイトでの上限が65535バイト。
文字セットがutf8mb4の場合は、上限が16383文字となる。


VARCHAR カラム内の値は可変長の文字列です。 
長さは 0 から 65,535 までの値で指定できます。 
VARCHAR カラムの有効な最大長は、
最大行サイズ (65,535 バイト、すべてのカラムで共有される) 
と使用される文字セットによって決まります。

show variables like '%char%';

 

65535/4 = 16383.75 → 16383

drop table tab1 ;
create table tab1(col1 varchar(16383) );

drop table tab1 ;
create table tab1(col1 varchar(16384) );

→ ERROR 1074 (42000): Column length too big for column 'col1' (max = 16383); use BLOB or TEXT instead


insert into tab1 values('A');
update tab1 set  col1 = concat(col1 , col1);

select * from tab1;
select char_length(col1),length(col1) from tab1;


insert into tab1 values('あ');
update tab1 set  col1 = concat(col1 , col1);

 

(19c)

VARCHAR2は4000バイトが上限

※ MAX_STRING_SIZEをEXTENDED に変更すると32767バイトの上限となる。


drop table tab1 purge;
create table tab1(col1 varchar2(4000) );


drop table tab1 purge;
create table tab1(col1 varchar2(4001) );

→ ORA-00910: 指定した長さがデータ型に対して長すぎます

-- MAX_STRING_SIZEをEXTENDEに変更

alter pluggable database pdb1 close immediate;
alter pluggable database pdb1 open upgrade;

show con_name;
alter session set container = pdb1;

show parameter MAX_STRING_SIZE;
alter system set MAX_STRING_SIZE=extended;

@?/rdbms/admin/utl32k.sql

show con_name;
alter session set container = CDB$ROOT;

alter pluggable database pdb1 close immediate;
alter pluggable database pdb1 open ;

show con_name;
alter session set container = pdb1;
@?/rdbms/admin/utlrp.sql

drop table tab1 purge;
create table tab1(col1 varchar2(32767) );

drop table tab1 purge;
create table tab1(col1 varchar2(32768) );

→ ORA-00910: 指定した長さがデータ型に対して長すぎます


insert into tab1 values('A');
update tab1 set  col1 = col1 || col1;

select * from tab1;
select length(col1),lengthb(col1) from tab1;

insert into tab1 values('あ');
update tab1 set  col1 = col1 || col1;

 

(14)
http://developpp.blog.jp/archives/7575951.html

マニュアルで上限の記載は確認できなかった。


実機確認した限りは
VARCHARは10485760文字が上限の模様

 

drop table tab1 ;
create table tab1(col1 varchar(10485760) );

drop table tab1 ;
create table tab1(col1 varchar(10485761) );

→ ERROR:  length for type varchar cannot exceed 10485760


insert into tab1 values('A');
update tab1 set  col1 = col1 || col1;

select * from tab1;
select char_length (col1),octet_length (col1) from tab1;

insert into tab1 values('あ');
update tab1 set  col1 = col1 || col1;


analyze tab1;
\dt+ tab1
select pg_size_pretty(pg_relation_size('tab1') );
select pg_size_pretty(pg_total_relation_size('tab1') );

 

(2019)
https://learn.microsoft.com/ja-jp/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-ver16

VARCHARは8000バイトが上限


drop table tab1 ;
create table tab1(col1 varchar(8000) );

drop table tab1 ;
create table tab1(col1 varchar(8001) );

→ 列 'col1' に指定したサイズ (8001) は、どのデータ型の許容最大サイズ (8000) も超えています。

insert into tab1 values('A');
update tab1 set  col1 = col1 + col1;

※上限に達してもエラーにならない。

select * from tab1;
select len(col1),datalength(col1) from tab1;

insert into tab1 values('あ');
update tab1 set  col1 = col1 + col1;

※上限に達してもエラーにならない。