mysql

394 阅读3分钟

字符集和排序规则

COLLATE


常用的是utf8mb4_general_ci(默认)、utf8mb4_unicode_ci、utf8mb4_bin

  1. utf8mb4_bin: 二进制存储,区分大小写;
  2. utf8mb4_general_ci: 不区分大小写, 某些特殊语言或者字符集,排序结果可能不一致,更快;
  3. utf8mb4_unicode_ci: 不区分大小写,能够处理特殊字符的排序,更准确;

CHARACTER SET


  1. utf8:3位可变长度
  2. utf8mb4(utf8 most bytes 4): 比utf8多了emoji编码支持 (MySQL在5.5.3 增加)

finish


由于 MySQL中的数据编码格式已经精确到了“字段”。所以在建数据库的时候最好指定数据库编码格式,在这之后所建的“表”和“字段”的编码格式都会以此格式为默认编码格式。若之后想更改数据库的编码格式的话,就得一一更改之前的“表”和“字段”的编码格式了

varchar 和 Char

  • char 最大长度255
  • varchar 最大 2^16 字符,length 根据字符集计算得出

row_format(fixed与dynamic)

  1. 若一张表里面不存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫静态表,即该表的row_format是fixed,就是说每条记录所占用的字节一样。其优点读取快,缺点浪费额外一部分空间。
  2. 若一张表里面存在varchar、text以及其变形、blob以及其变形的字段的话,那么张这个表其实也叫动态表,即该表的row_format是dynamic,就是说每条记录所占用的字节是动态的。其优点节省空间,缺点增加读取的时间开销。

所以,做搜索查询量大的表一般都以空间来换取时间,设计成静态表。

数据结构

bigint

从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。 
P.S. bigint已经有长度了,在mysql建表中的length,只是用于显示的位数

int

从 -2^31 (-2,147,483,648) 到 2^31 – 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

smallint

从 -2^15 (-32,768) 到 2^15 – 1 (32,767) 的整型数据。存储大小为 2 个字节。

tinyint 
从 0 到 255 的整型数据。存储大小为 1 字节。

时间类型 

类型字节精确性
DATE三字节2015-05-01精确到年月日
TIME三字节11:12:00精确到时分秒
DATETIME八字节2015-05-01 11:12:00精确到年月日时分秒
TIMESTAMP2015-05-01 11:12:00精确到年月日时分秒

字符串类型

类型单位最大特性
CHAR字符最大为255字符存储定长,容易造成空间的浪费
VARCHAR字符可以超过255个字符存储变长,节省存储空间
TEXT字节总大小为65535字节,约为64KB-

JAVA数据类型在MySql中的对应

java类mysql数据库
java.lang.BytebyteTINYINT
java.lang.ShortshortSMALLINT
java.lang.IntegerintegerINGEGER
java.lang.LonglongBIGINT
java.lang.FloatfloatFLOAT
java.lang.DoubledoubleDOUBLE
java.lang.BigDecimalbig_decimalNUMERIC
java.lang.BooleanbooleanBIT
java.lang.StringstringVARCHAR
java.lang.Booleanyes_noCHAR(1)(‘Y’或’N’)
java.lang.Booleantrue_falseCHAR(1)(‘Y’或’N’)
java.uitl.Date / java.sql.DatedateDATE
java.sql.TimetimeTIME
java.sql.TimestamptimestampTIMESTAMP
java.uitl.CalendarcelendarTIMESTAMP
java.uitl.CalendarcalendarTIMESTAMP
java.io.SerializableserializableVARBINARY/BLOB
java.sql.ClobclobCLOB
java.sql.BlobblobBLOB
java.lang.ClassclassVARCHAR
java.uitl.LocalelocaleVARCHAR
java.uitl.TimeZonetimezoneVARCHAR
java.uitl.CurrencycurrencyVARCHAR

int(M)

int(M): M indicates the maximum display width for integer types.1  
在 integer 数据类型中,M 表示最大显示宽度。

M 和 zerofill 一起用采用意义 ,例:int(4)

 id 
 0001 
 0010 
 0100 
 1000