MySQLの基礎(1)|データ型

MySQLの基礎(1)|データ型


  1. 数値型
TINYINT #小整数值,1 字节,有符号(-128,127),无符号(0,255)
SMALLINT #大整数值,2 字节
MEDIUMINT #大整数值,3 字节
INT或INTEGER #大整数值,4 字节,有符号(-2147483648,2147483647),无符号(0,4294967295)
BIGINT #极大整数值,8 字节

FLOAT #单精度浮点数值,4 字节
DOUBLE #双精度浮点数值,8 字节
DECIMAL #小数值,定点数,DECIMAL(M,D),其中M称为精度,表示总共的位数;D称为标度,表示小数的位数;默认D值为0、M值为10
  1. タイムタイプ
DATE #日期值,YYYY-MM-DD,1000-01-01/9999-12-31
TIME #时间值或持续时间,HH:MM:SS,'-838:59:59'/'838:59:59'
YEAR #年份值,YYYY,1901/2155
DATETIME #混合日期和时间值,8字节,YYYY-MM-DD HH:MM:SS,1000-01-01 00:00:00/9999-12-31 23:59:59
TIMESTAMP #混合日期和时间值,时间戳,4字节,'1970-01-01 00:00:01.000000' 到 '2038-01-19 03:14:07.999999'
  1. 文字列型
# 字节型字符串【二进制字节型字符串,没有字符集概念】
BINARY #定长二进制字节型字符串
VARBINARY #变长二进制字节型字符串

TINYBLOB #不超过 255 个字符的二进制字符串,0-255字节    
BLOB #二进制形式的长文本数据,0-65 535字节    => ~64kb
MEDIUMBLOB #二进制形式的中等长度文本数据,0-16 777 215字节   => ~16MB
LONGBLOB #二进制形式的极大文本数据,0-4 294 967 295字节    => ~4GB

# 字节型字符串 end 

# 字符型字符串

CHAR #定长字符串,0-255字节
VARCHAR #变长字符串, 0-65535 字节

TINYTEXT #短文本字符串,0-255字节    
TEXT #长文本数据,0-65535字节   => ~64kb
MEDIUMTEXT  #中等长度文本数据,0-16 777 215字节    => ~16MB
LONGTEXT #极大文本数据,0-4 294 967 295字节  => ~4GB

# 字符型字符串 end

解決

①区別文字バイトと

  • BINARY(N)そしてVARBINARY(N)Nは、バイト単位の長さを指します。

  • CHAR(N)そして、VARCHAR(N)Nは文字長を参照してください。

  • 以下のためにBINARY(10)10バイトの固定されてもよいが、格納され、そしてためにCHAR(10)格納することができるバイト文字セットの場合に応じては、であってもよいです。

異なる機構BINARY、VARBINARY、CHAR、VARCHAR挿入とクエリの4種類の区別②

  • 挿入されたときに以下Nよりも文字が自動的に末尾のスペースを、テールボックス、クエリに追加されると、非バイナリ文字列を格納するためのCHAR(N)が挿入されたとき、すなわち末尾のスペースが削除されます[破棄されます]

  • 末尾のスペースを、スペース、クエリを満たすために以下のN文字より、非バイナリ文字列、挿入を格納するためのvachar(N)を出力として廃棄されることはありません] [すなわち

  • 取り外したときNが自動的に最後に追加は0x00のバイト未満、バイトのすべてが予約されているに挿入バイナリ文字列格納されたバイナリ(N)は、すべての比較定義された長さのバイト長を返しますバイトが有効である[尾は\ 0を記入します]

  • 0x00のバイトを埋めるつもりはないvarbinary型、クエリを挿入し、彼らはまた、すべてのバイトが[また]有効な比較は出力された場合、任意のバイトを削除しません

    例:

    create table test(
      a VARCHAR(3),
      b CHAR(3),
      c VARBINARY(3),
      d BINARY(3)
    )engine=innodb charset=gbk;
    
    insert into test select 'a ','a ','a ','a ';
    
    select hex(a),hex(b),hex(c),hex(d) from test;
    select concat('$',a,'$'),concat('$',b,'$'),concat('$',c,'$'),concat('$',d,'$')
    from test;
    SELECT a = 'a ', b = 'a', c = 'a ', d = 'a \0'from test;

    1つの結果セット:

    1結果セット

    結果は2を設定します。

3件の結果を設定します。

  1. スプレッド
  • VARCHAR:

    MySQLは最大線幅の制限、すなわち65535(64K)バイト、それ自体が[定義括弧内の数字によって、すなわちVARCHAR(XXX)XXX列]によって定義される文字列のVARCHARの数を満たさなければなりません。単一のテーブルのVARCHARが実際の最大長(65535から2)/ 3 = 21844文字(255 2つのバイトが追加たバイトによって占有されているように、MySQLで使用UFT-8文字セットが文字は、3つのバイトを占め頭上スペース、マイナス2;それは255以下、マイナス1である場合)。

例:

#VARCHAR单表单字段最长不能超过21844
CREATE TABLE test(
    va VARCHAR(21845)
)DEFAULT CHARSET=utf8;
[Err] 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
#这样就可以了
CREATE TABLE test(
    va VARCHAR(21844)
)DEFAULT CHARSET=utf8;
受影响的行: 0
时间: 0.155s
  • テキスト:

    最大制限は64Kバイトであるが、本質は、オーバーフローストレージデータページにのみ768バイトを格納し、残りのデータが最大幅限界線によって単一テーブル65535が、オーバーフロー部に記憶されるが、各テーブルのMySQL BLOBとTEXTカラムのみ実用前のInnoDBデフォルト請求項5~9バイト、店舗オーバーフローの残りの部分。9 + 2バイトの実際の占領テーブルの最大線幅、プラス余分なオーバーヘッド、テーブルの実際の幅とは何の関係もそう。

  • 現在のタイムアプローチをゲット

SELECT CURRENT_TIMESTAMP;
SELECT CURRENT_TIMESTAMP();
SELECT NOW();
SELECT LOCALTIME;
SELECT LOCALTIME();
SELECT LOCALTIMESTAMP;
SELECT LOCALTIMESTAMP();
  • 文字列の転送時間
select str_to_date('2017-10-16 15:30:28','%Y-%m-%d %H:%i:%s'); 
  • 文字列までの時間
select date_format(now(), '%Y-%m-%d %H:%i:%s') ;
  • 一般的な型変換
#字符串转数字
方法一:SELECT CAST('123' AS SIGNED);
方法二:SELECT CONVERT('123', SIGNED);
方法三:SELECT '123'+0;

二进制,同带binary前缀的效果 : BINARY 
字符型,可带参数 : CHAR() 
日期 : DATE 
时间: TIME 
日期时间型 : DATETIME 
浮点数 : DECIMAL 
整数 : SIGNED 
无符号整数 : UNSIGNED

おすすめ

転載: www.cnblogs.com/iwsx/p/12348929.html