MySQLで型の最小値・最大値を超える値を設定してみる
MySQLで型の最小値・最大値を超える値を設定してみる。
数値型の場合
確認用のテーブルを作成する。
create table sample ( c_tinyint tinyint, c_tinyint_unsigned tinyint unsigned, c_smallint smallint, c_smallint_unsigned smallint unsigned, c_int int, c_int_unsigned int unsigned, c_bigint bigint, c_bigint_unsigned bigint unsigned );
すごく小さな値をINSERTする。
insert into sample ( c_tinyint, c_tinyint_unsigned, c_smallint, c_smallint_unsigned, c_int, c_int_unsigned, c_bigint, c_bigint_unsigned ) values ( -99999999999999999999, -99999999999999999999, -99999999999999999999, -99999999999999999999, -99999999999999999999, -99999999999999999999, -99999999999999999999, -99999999999999999999 );
すごく大きな値をINSERTする。
insert into sample ( c_tinyint, c_tinyint_unsigned, c_smallint, c_smallint_unsigned, c_int, c_int_unsigned, c_bigint, c_bigint_unsigned ) values ( 99999999999999999999, 99999999999999999999, 99999999999999999999, 99999999999999999999, 99999999999999999999, 99999999999999999999, 99999999999999999999, 99999999999999999999 );
各型の最小値・最大値が設定される。
select * from sample;
+-----------+--------------------+------------+---------------------+-------------+----------------+----------------------+----------------------+ | c_tinyint | c_tinyint_unsigned | c_smallint | c_smallint_unsigned | c_int | c_int_unsigned | c_bigint | c_bigint_unsigned | +-----------+--------------------+------------+---------------------+-------------+----------------+----------------------+----------------------+ | -128 | 0 | -32768 | 0 | -2147483648 | 0 | -9223372036854775808 | 0 | | 127 | 255 | 32767 | 65535 | 2147483647 | 4294967295 | 9223372036854775807 | 18446744073709551615 | +-----------+--------------------+------------+---------------------+-------------+----------------+----------------------+----------------------+
文字列型の場合
確認用のテーブルを作成し、サイズを超える文字数を設定する。
create table sample ( c_varchar4 varchar(4) );
insert into sample ( c_varchar4 ) values ( 'abcdefghijklmnopqrstuvwxyz' );
カットされて設定される。
select * from sample;
+------------+ | c_varchar4 | +------------+ | abcd | +------------+
日付型の場合
確認用のテーブルを作成する。
create table sample ( c_timestamp timestamp, c_datetime datetime );
show variables like '%time_zone%'; +------------------+--------+ | Variable_name | Value | +------------------+--------+ | system_time_zone | JST | | time_zone | SYSTEM | +------------------+--------+
小さな日時と大きな日時をINSERTする。
insert into sample ( c_timestamp, c_datetime ) values ( '1970-01-01 09:00:00', '0000-00-00 00:00:00' );
insert into sample ( c_timestamp, c_datetime ) values ( '2038-1-19 12:14:8', '10000-01-01 00:00:00' );
全部「0000-00-00 00:00:00」になる。
select * from sample; +---------------------+---------------------+ | c_timestamp | c_datetime | +---------------------+---------------------+ | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | +---------------------+---------------------+
下記の値だと設定される。
insert into sample ( c_timestamp, c_datetime ) values ( '1970-01-01 09:00:01', '0000-00-00 00:00:01' );
insert into sample ( c_timestamp, c_datetime ) values ( '2038-1-19 12:14:7', '9999-12-31 23:59:59' );
select * from sample; +---------------------+---------------------+ | c_timestamp | c_datetime | +---------------------+---------------------+ | 1970-01-01 09:00:01 | 0000-00-00 00:00:01 | | 2038-01-19 12:14:07 | 9999-12-31 23:59:59 | +---------------------+---------------------+