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;
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') );
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;
※上限に達してもエラーにならない。