您的位置:新葡亰496net > 网络数据库 > 有关binlog的那点事,的法力表明

有关binlog的那点事,的法力表明

发布时间:2019-10-05 12:48编辑:网络数据库浏览(178)

    本次我们要追究越来越精细的binlog内容,上次评论的Query_event和Rows_event断定有让您质疑不解的主题素材。Query_event中的status-vars境况变量有什么样,Rows_event的数据类型是怎么样,元数据又是个什么样鬼东西,今天我们就来所有人家解答。

    有关binlog的那一点事(三)(mysql5.7.13),binlogmysql5.7.13

    此次大家要钻探更加精细的binlog内容,上次议论的Query_event和Rows_event确定有令你疑惑不解的难题。Query_event中的status-vars情形变量有如何,Rows_event的数据类型是什么样,元数据又是个怎么样鬼东西,后日我们就来千家万户解答。

    一、Query_event中的令人费解的status-vars

    status-vars据他们说是为着合作低版本的mysql服务器而加入的蒙受变量设置,告诉低版本的mysql服务器sql语句是在怎样景况下推行的

    实际的格式是景况枚举值 状态参数 

    上面以状态枚举值分不要讲下相比根本的几个情景:

    (1)0x00 Q_FLAGS2_CODE 4个字节

    其一首要是对此SQL_AUTO_IS_NULL、FOREIGN_KEY_CHECKS、UNIQUE_CHECKS、AUTOCOMMIT的设置,SQL_AUTO_IS_NULL是全自动填充NULL,FOREIGN_KEY_CHECKS是外键检查,UNIQUE_CHECKS是独一键索引检查,AUTOCOMMIT正是半自动提交,在此处SQL_AUTO_IS_NULL = 1,别的均为0。

    (2)0x01 Q_SQL_MODE_CODE 8个字节

    此间的布局要仿照效法SET sql_mode

    对应的气象列表能够参见

    能够参谋上面包车型地铁汉语翻译:

    1)单项方式:

    2)混合情势:

    1. ANSI:该项假若设置,和REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE等价,在

    2. DB2:该项假设设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一齐设置等价。

    3. MAXDB:该项假使设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USEENVISION一同设置等价。

    4. MSSQL:该项如若设置, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_有关binlog的那点事,的法力表明。KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS. 一同设置等价。

    5. TRADITIONA:该项要是设置,与STQX56ICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

    6. POSTGRESQL:该项如若设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

    7. ORACLE:该项假若设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

    8. MYSQL323:仅对SHOW CREATE TABLE有影响。

    9. MYSQL40:同上。

    (3)0x02 Q_CATALOG 

    默许记录为"x3stdx0",即mysql服务器所使用的目录。一字节长度 NULL字符串

    (4)0x03 Q_AUTO_INCREMENT 

    与AUTO_INCREMENT有关,4字节,前2个字节表示AUTO_INCREMENT,后2个字节表示AUTO_INCREMENT_OFFSET

    (5)0x04 Q_CHARSET_CODE

    字符集 在延续时客商端设定的字符集(2字节) 连接核查时的字符集(2字节) 服务器查对时的字符集(2字节)

    (6)0x05 Q_TIME_ZONE_CODE

    时区  一字节长度 字符串,如"x6 08:00" 正是北京时间,那个待确认。

    (7)0x07 Q_LC_TIME_NAMES_CODE

    星期和月的称号,比方:在匈牙利(Hungary)语文中周一是MON,11月是Jan,在别的文字中就不是那般。

    二、Rows_event的数据类型和元数据

    这里只有介绍常用的数据类型

    (1)日期时间档期的顺序

    1)元数据代表的能够正确到微秒的值 n常常为0-3

    对与那系列型的在my_time.h中有料理的概念。

    MYSQL_TYPE_DATETIME2,是用longlong数据存款和储蓄的, 固定是4位 n,元数据意味着的是外加数据的长短n

    新葡亰496net 1

     1 //来自mysql5.7.13源码 my_time.c
     2 //将longlong时间转化成字符串
     3 //longlong时间格式:
     4 //按位计算
     5 //1 bit  sign(used when on disk)
     6 //17 bits year * 13   month(year 0 - 9999, month 0 - 12)
     7 //5 bits day(0 - 31)
     8 //5 bits hour(0 - 23)
     9 //6 bits minute(0 - 59)
    10 //6 bits second(0 - 59)
    11 //24 bits microseconds(0 - 999999)
    12 //
    13 //Total: 64 bits = 8 bytes
    14 //
    15 //SYYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff
    

    View Code

    MYSQL_TYPE_TIME2,也是是用longlong数据存款和储蓄的, 固定是3位 n,元数据代表的是额外数据的尺寸n

    MYSQL_TYPE_TIMESTAMP2,是时刻戳,固定是4位,元数据代表的是外加数据的长短n

    MYSQL_TYPE_NEWDATE也是以这种办法存的,然而从未元数据

    2)一纸空文元数据,以十进制yyyymmddhhmmss存储的

    MYSQL_TYPE_TIMESTAMP,MYSQL_TYPE_DATETIME都以以这种措施存的。

    MYSQL_TYPE_TIME是时刻戳。

    3)MYSQL_TYPE_YEALAND,不设有元数据。

    其一是一九零四方始的年份存的

    (2)整形,不设有元数据

    MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_INT24,MYSQL_TYPE_LONG,MYSQL_TYPE_LONGLONG和原本大家驾驭的办法同样,只不过是小端数据

    (3)实数型

    MYSQL_TYPE_FLOAT和MYSQL_TYPE_DOUBLE也是透过小端数据存款和储蓄的,差异的是他们有一字节元数据,他们的元数据代表他们有效数据的尺寸。

    MYSQL_TYPE_NEWDEGran LavidaL那个小数存款和储蓄方式不是很鲜明,仅仅在decimal.h中有定义,但是她的元数据第叁个字节代表她有效数据的长短,第三个代表他的精度即小数点后长度

    (4)字符串类型

    MYSQL_TYPE_VARCHA安德拉 他两字节的元数据是她的最长长度。

    MYSQL_TYPE_STRING,MYSQL_TYPE_VAR_ST大切诺基ING 他们的元数据第二个字节代表真正的门类,而第四个字节代表存款和储蓄字符串长度的字节数大小

    (5)bit类型

    MYSQL_TYPE_BLOB 他的元数据存款和储蓄的是bit类型长度的字节数大小

    MYSQL_TYPE_BIT 他的元数据存款和储蓄第二个字节代表有多少bit,而第一个字节代表存款和储蓄bit类型的字节数大小

    为此大家得以拿走结论,元数据越来越多囤积的是该类型的尺寸音讯。

    切切实实更详细的请查看mysql5.7.13的源码 log_event.cc:1953::log_event_print_value()获取越来越多的消息

    此番大家要追究越来越小巧的binlog内容,上次钻探的Query_event和Rows_event料定有让你疑心不...

    sql_mode="",即强制不设定MySql形式(如不作输入检验、错误提醒、语法形式检查等)应该能增进品质,但有如下难点:
    万一插入了不适合数据(错误类型或超过),mysql会将数据设为“最棒的或是数量”而不报错,如:
    /数字 设为:0/大概最小值/或许最大值
    /字符串 设为:空串/可以存款和储蓄的最大容积字符串
    /表明式 设为:再次回到多个可用值(1/0-null)
    为此,化解办法是:全数列都要采纳默许值,那对质量也好。

    MYSQL STRICT_TRANS_TABLES使用图解教程

    一、Query_event中的令人费解的status-vars

    mysql_mode的详细描述:

     

    status-vars据他们说是为了协作低版本的mysql服务器而加入的境况变量设置,告诉低版本的mysql服务器sql语句是在什么条件下实施的

    在mysql 第55中学,暗中同意的是REAL_AS_FLOAT,PIPES_AS_CONTACT,ANSI_QUOTES,GNORE_SPACE和ANSI,
    在这种形式下,允许插入当先字段长度的值,只是插入后,返回的是告诫并非不当,当用ST安德拉ICT_TRANS_TABLES时,
    则是荒唐了,严俊的警告.

    mysql 在insert的时候,平常提示未有暗中同意值,MySQL 1364 错误提醒:#1364 - Field "XXX" doesn't have a default value。XXX字段未有暗中认可的数值;也正是说大家从不为其分配数值,而表中此字段也从不设置暗中同意值。那是mysql情势开启存款和储蓄引擎启用严峻格局,违法数据值被驳回, 笔者把操作实际难点贴一下图:

    切切实实的格式是气象枚举值 状态参数 

    NO_AUTO_CREATE_USER

    新葡亰496net 2  

    上面以状态枚举值分别说下相当重大的多少个情景:

    以免GRANT自动创制新客户,除非还点名了密码。
    上边是手册中的一些介绍

    而我的Tbl_User表里面字段:

    (1)0x00 Q_FLAGS2_CODE 4个字节

    上边描述了支撑的具备格局:
    · ALLOW_INVALID_DATES
    在严苛格局下不要反省全体日子。只检查1到12里面包车型地铁月份和1到31以内的 日。那在Web应用程序中,当您从多少个例外的字段获取年、月、日,而且想要确切保存顾客插入的剧情(不开展日期验证)时很关键。该情势适用于DATE和 DATETIME列。不适合TIMESTAMP列,TIMESTAMP列须求表达日期。
    启用严厉情势后,服务器需求合法的月和日,不唯有是各自在1到12和1到31范围内。比如,禁止使用严谨情势时'2002-04-31′是合法的,但启用严厉格局后是不法的。要想在严刻方式允许掩没固定日期,还应启用ALLOW_INVALID_DATES。
    · ANSI_QUOTES
    将‘”'视为识别符引号(‘`'引号字符),不要视为字符串的引号字符。在ANSI方式,你能够长久以来使用‘`'来引用识别符。启用ANSI_QUOTES后,你无法用双引号来引用字符串,因为它被讲授为识别符。
    · ERROR_FOR_DIVISION_新葡亰496net,BY_ZERO
    在从严形式,在INSERT或UPDATE进程中,假若被零除(或 MOD(X,0)),则发出错误(不然为警告)。如若未提交该形式,被零除时MySQL重临NULL。借使用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。
    · HIGH_NOT_PRECEDENCE
    NOT 操作符的事先顺序是表明式比如NOT a BETWEEN b AND c被演说为NOT (a BETWEEN b AND c)。在部分旧版本MySQL中, 表明式被讲解为(NOT a) BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL形式,能够收获从前的更高优先级的结果。
    mysql>SET sql_mode = ‘';
    mysql>SELECT NOT 1 BETWEEN -5 AND 5;
    -> 0
    mysql>SET sql_mode = ‘broken_not';
    mysql>SELECT NOT 1 BETWEEN -5 AND 5;
    -> 1
    · IGNORE_SPACE
    允许函数名和‘('之间有空格。强制将具备函数名就是保存的字。结果是,倘使你想要访问保存为字的数据库、表或列名,你不可能不援引它。比方,因为有USE讴歌RDX()函数,mysql数据库中的user表名和该表内的User列被保存下来,由此你不能够不援引它们:
    SELECT "User" FROM mysql."user";
    · NO_AUTO_CREATE_USER
    严防GRANT自动创制新客户,除非还点名了密码。
    · NO_AUTO_VALUE_ON_ZERO
    NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的管理。平日景色,你能够向该列插入NULL或0生成下八个体系号。NO_AUTO_VALUE_ON_ZERO禁止使用0,因而唯有NULL能够生成下一个连串号。
    若是将0保存到表的AUTO_INCREMENT列,该格局会很有用。(不推荐使用该惯例)。举个例子,借使您用mysqldump转储表同等对待载,MySQL碰着0值日常会转变新的行列号,生成的表的故事情节与转储的表不一样。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO能够缓慢解决该难题。mysqldump在输出中自动包涵启用NO_AUTO_VALUE_ON_ZERO的语句。
    · NO_BACKSLASH_ESCAPES
    禁止使用反斜线字符(‘')做为字符串内的退出字符。启用该格局,反斜线则变成平时字符。
    · NO_DIR_IN_CREATE
    创立表时,忽视全体INDEX DIRECTO奥迪Q5Y和DATA DIRECTO途达Y指令。该选项对从复克制务器有用。
    · NO_ENGINE_SUBSTITUTION
    一旦要求的贮存引擎被剥夺或未编译,可避防守自动替换存储引擎。
    · NO_FIELD_OPTIONS
    永不在SHOW CREATE TABLE的出口中打字与印刷MySQL专用列选项。该格局在可移植格局(portability mode)下用于mysqldump。
    · NO_KEY_OPTIONS
    毫不在SHOW CREATE TABLE的出口中打字与印刷MySQL专项使用索引选项。该情势在可移植方式(portability mode)下用于mysqldump。
    · NO_TABLE_OPTIONS
    不要在SHOW CREATE TABLE的输出中打字与印刷MySQL专项使用表选项(举例ENGINE)。该格局在可移植情势(portability mode)下用于mysqldump。
    · NO_UNSIGNED_有关binlog的那点事,的法力表明。SUBTRACTION
    在减运算中,假设某些操作数未有标识,不要将结果标志为UNSIGNED。请在意那样使UNSIGNED BIGINT无法百分百用于上下文中。 · NO_ZERO_DATE
    在严谨格局,不要将 ‘0000-00-00′做为合法日期。你依然能够用IGNORE选项插入零日期。在非严刻方式,还可以该日期,但会生成警告。
    · NO_ZERO_IN_DATE
    在严厉形式,不接受月或日有的为0的日子。如若选拔IGNORE选项,大家为附近的日期插入'0000-00-00′。在非严峻情势,可以承受该日期,但会生成警告。
    · ONLY_FULL_GROUP_BY
    毫无让GROUP BY部分中的查询指向未选取的列。
    · PIPES_AS_CONCAT
    将||视为字符串连接操作符(+)(同CONCAT()),而不就是OCRUISER。
    · REAL_AS_FLOAT
    将REAL视为FLOAT的同义词,并不是DOUBLE的同义词。
    · STRICT_TRANS_TABLES
    为有着存款和储蓄引擎启用严刻格局。违规数据值被拒绝。前面有详尽表明。
    · STRICT_TRANS_TABLES
    为作业存款和储蓄引擎启用严酷形式,也说不定为非事务存款和储蓄引擎启用严苛形式。前边有详细表达。
    残忍形式调节MySQL如哪个地区理不合法或有失的输入值。有二种原因能够使多个值为违规。举个例子,数据类型错误,不符合列,或高出范围。当新插入的行不含有某列的尚未显示定义DEFAULT子句的值,则该值被舍弃。
    对于事务表,当启用STSportageICT_ALL_TABLES或STRICT_TRANS_TABLES形式时,假若语句中有不法或遗失值,则会现出错误。语句被抛弃并滚动。
    对此非事务表,假诺插入或更新的第1行出现坏值,三种格局的一言一动相同。语句被放任,表保持不变。若是语句插入或涂改多行,並且坏值出现在第2或前面包车型客车行,结果决意于启用了哪位严俊挑选:
    · 对于STRICT_ALL_TABLES,MySQL重临错误并忽视剩余的行。可是,在这种场地下,前面包车型地铁行已经被插入或更新。那证明您能够部分更新,那大概不是你想要的。要防止那一点,最好使用单行语句,因为如此能够不更动表即能够放任。
    · 对于STRICT_TRANS_TABLES,MySQL将违法值调换为最相仿该列的官方值并插入调治后的值。倘使值错过,MySQL在列中插入隐式暗中认可值。在别的情况下,MySQL都会生成警告实际不是交给错误并继续实行语句。描述了隐式私下认可值。
    适度从紧情势不容许私下日期,比如'2003-04-31′。它区别意防止日期使用“零”部分,比如'二〇〇二-04-00′或“零”日期。要想禁绝,应在严刻方式基础上,启用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL模式。
    设若您不利用严峻形式(即不启用STGL450ICT_TRANS_TABLES或STRICT_ALL_TABLES格局),对于地下或遗失的值,MySQL将插入调节后的值并交付警告。在从严格局,你可以通过INSERT IGNORE或UPDATE IGNORE来实现。
    下边包车型地铁非正规形式连忙组合了前方所列的方式。
    里面囊括大多数新式版本MySQL中的全体方式值。旧版本中,组合方式不富含新本子中绝非的不适用的切实形式值。
    · ANSI
    等同REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。
    · DB2
    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
    · MAXDB
    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER。
    · MSSQL
    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS。
    · MYSQL323
    等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
    · MYSQL40
    等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。
    · ORACLE
    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。
    · POSTGRESQL
    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。
    · TRADITIONAL
    等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER

       www.2cto.com  
    新葡亰496net 3  

    本条器重是对于SQL_AUTO_IS_NULL、FOREIGN_KEY_CHECKS、UNIQUE_CHECKS、AUTOCOMMIT的设置,SQL_AUTO_IS_NULL是电动填充NULL,FOREIGN_KEY_CHECKS是外键检查,UNIQUE_CHECKS是独一键索引检查,AUTOCOMMIT正是全自动提交,在此间SQL_AUTO_IS_NULL = 1,其余均为0。

    您大概感兴趣的稿子:

    • MySQL数据库INSERT、UPDATE、DELETE以及REPLACE语句的用法详解
    • MySQL Order by 语句用法与优化详解
    • mysql中event的用法详解
    • mysql中explain用法详解
    • mySQL中replace的用法
    • Mysql全文搜索match against的用法
    • Mysql字符串截取函数SUBST奥迪Q3ING的用法表明
    • MySQL replace函数替换字符串语句的用法
    • Mysql之SQL Mode用法详解

    消除措施:正是在mysql的配置文件my.ini里面

    (2)0x01 Q_SQL_MODE_CODE 8个字节

     

    此处的安顿要参照他事他说加以考察SET sql_mode

    XML/HTML代码

    对应的情事列表能够参考

    01.# Set the SQL mode to strict # sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

    能够参照下边的中文翻译:

    02.改为: 

    1)单项情势:

    03. 

    1. ALLOW_INVALID_DATES:该项倘诺设置,mysql对于日期的月month和日day进行检讨。任何日期只要满意0<month<13 , 0<day<32的整数就可以成为插入值。
    2. ANSI_QUOTES: 若是设置该项,mysql会将引号“"’”作为引号来对待,并不是字符串符号。
    3. ERROR_FOR_DIVISION_BY_ZERO:该项假设设置,mysql会将其他数除以0未来的数以NULL的格局插入。
    4. HIGH_NOT_PRECEDENCE:该项如若设置,not运算符的预先值会被减少,如mysql会将NOT a BETWEEN b AND c 剖判成NOT (a BETWEEN b AND c)
    5. IGNORE_SPACE:该项就算设置,mysql会同意函数名和“(”能有空格。
    6. NO_AUTO_CREATE_USEKoleos:该项假使设置,mysql会幸免在grant语句试行时自动生成新客商。
    7. NO_AUTO_VALUE_ON_ZERO:该项如若设置,mysql在拍卖AUTO_INCREMENT列时,仅仅只对null生成下一个系列号。
    8. NO_BACKSLASH_ESCAPES:该项假使设置,mysql无法应用””作为转义字符。
    9. NO_DIR_IN_CREATE:该项假如设置,在建表时mysql会忽视全数的INDEX DIRECTO奥迪Q5Y 和DATA DIRECTOLacrosseY。
    10. NO_ENGINE_SUBSTITUTION:该项即使设置,在CREATE TABLE 或ALTER TABLE时mysql会对无法利用的引擎报错,但不做实际的操作。
    11. NO_FIELD_OPTIONS仅对SHOW CREATE TABLE命令有效。
    12. NO_KEY_OPTIONS同上。
    13. NO_TABLE_OPTIONS同上。
    14. NO_UNSIGNED_SUBTRACTION:假如该项设置,mysql会在对负数更新到unsingned int数上不开展限定。
    15. NO_ZERO_DATE:借使该项设置,並且严刻的SQL格局设置,mysql对于日期是0000-00-00不能插入更新。
    16. NO_ZERO_IN_DAT:倘诺该项设置,况且严苛的SQL模式设置,mysql对于日期有0值的(除了0000-00-00)无法插入更新。
    17. ONLY_FULL_GROUP_BY在5.75增加产量,对本次开垦尚未影响。
    18. PAD_CHAR_TO_FULL_LENGTH:假若该项设置,mysql不会在搜寻回收剩余的char空间。
    19. PIPES_AS_CONCAT:要是该项设置,mysql将把||看成CONCAT()。
    20. REAL_AS_FLOAT:假设该项设置,mysql将把REAL看成FLOAT。
    21. STRICT_ALL_TABLES:该项假若设置,mysql会进来严谨的sql形式。
    22. STRICT_TRANS_TABLES: 该项如若设置,mysql会进入严俊的sql形式,仅对作业有效。

    04.sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

    2)混合情势:

     

    1. ANSI:该项假设设置,和REAL_AS_FLOAT, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE等价,在

    2. DB2:该项要是设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一齐设置等价。

    3. MAXDB:该项如果设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS, NO_AUTO_CREATE_USELacrosse一同设置等价。

    4. MSSQL:该项即便设置, PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS. 一齐设置等价。

    5. TRADITIONA:该项纵然设置,与STCR-VICT_TRANS_TABLES, STRICT_ALL_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION

    6. POSTGRESQL:该项若是设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

    7. ORACLE:该项若是设置,与PIPES_AS_CONCAT, ANSI_QUOTES, IGNORE_SPACE, NO_KEY_OPTIONS, NO_TABLE_OPTIONS, NO_FIELD_OPTIONS一同设置等价。

    8. MYSQL323:仅对SHOW CREATE TABLE有影响。

    9. MYSQL40:同上。

    把严厉情势去掉,得启mysql就能够

    (3)0x02 Q_CATALOG 

     

    暗许记录为"x3stdx0",即mysql服务器所利用的目录。一字节长度 NULL字符串

    贴一下网络有关方式详细介绍:

    (4)0x03 Q_AUTO_INCREMENT 

    NO_AUTO_CREATE_USER

    与AUTO_INCREMENT有关,4字节,前2个字节表示AUTO_INCREMENT,后2个字节表示AUTO_INCREMENT_OFFSET

      www.2cto.com  

    (5)0x04 Q_CHARSET_CODE

    严防GRANT自动创设新顾客,除非还内定了密码。

    字符集 在连年时顾客端设定的字符集(2字节) 连接核对时的字符集(2字节) 服务器查对时的字符集(2字节)

    NO_UNSIGNED_SUBTRACTION 

    (6)0x05 Q_TIME_ZONE_CODE

    在减运算中,假如有个别操作数未有标识,不要将结果标识为UNSIGNED。请介意那样使UNSIGNED BIGINT不可能百分百用来上下文中。

    时区  一字节长度 字符串,如"x6 08:00" 便是香港(Hong Kong)时间,这一个待确认。

     

    (7)0x07 Q_LC_TIME_NAMES_CODE

    再贴一下别的三种形式:

    星期和月的称号,举例:在阿尔巴尼亚语文中星期二是MON,3月是Jan,在别的文字中就不是这么。

    在mysql 5中,私下认可的是REAL_AS_FLOAT,PIPES_AS_CONTACT,ANSI_QUOTES,GNORE_SPACE和ANSI,

    二、Rows_event的数据类型和元数据

    在这种形式下,允许插入当先字段长度的值,只是插入后,再次回到的是告诫并非荒谬,当用STEvoqueICT_TRANS_TABLES时,

    此地只有介绍常用的数据类型

    则是张冠李戴了,严峻的警告.

    (1)日期时间项目

     

    1)元数据代表的能够正确到飞秒的值 n日常为0-3

    NO_AUTO_CREATE_USER

    对与那连串型的在my_time.h中有对应的概念。

     

    MYSQL_TYPE_DATETIME2,是用longlong数据存款和储蓄的, 固定是4位 n,元数据意味着的是非凡数据的长度n

    防范GRANT自动创设新客户,除非还钦定了密码。

    新葡亰496net 4新葡亰496net 5

    下边是手册中的一些介绍

     1 //来自mysql5.7.13源码 my_time.c
     2 //将longlong时间转化成字符串
     3 //longlong时间格式:
     4 //按位计算
     5 //1 bit  sign(used when on disk)
     6 //17 bits year * 13   month(year 0 - 9999, month 0 - 12)
     7 //5 bits day(0 - 31)
     8 //5 bits hour(0 - 23)
     9 //6 bits minute(0 - 59)
    10 //6 bits second(0 - 59)
    11 //24 bits microseconds(0 - 999999)
    12 //
    13 //Total: 64 bits = 8 bytes
    14 //
    15 //SYYYYYYY.YYYYYYYY.YYdddddh.hhhhmmmm.mmssssss.ffffffff.ffffffff.ffffffff
    

     

    View Code

    上面描述了支撑的具有格局:

    MYSQL_TYPE_TIME2,也是是用longlong数据存款和储蓄的, 固定是3位 n,元数据代表的是额外数据的尺寸n

    · ALLOW_INVALID_DATES

    MYSQL_TYPE_TIMESTAMP2,是时刻戳,固定是4位,元数据代表的是外加数据的长短n

     

    MYSQL_TYPE_NEWDATE也是以这种艺术存的,不过从未元数据

    在严俊情势下不要反省全体日子。只检查1到12里头的月份和1到31里头的 日。那在Web应用程序中,当您从多个例外的字段获取年、月、日,况兼想要确切保存客商插入的内容(不开展日期验证)时很关键。该形式适用于DATE和 DATETIME列。不切合TIMESTAMP列,TIMESTAMP列要求证实日期。

    2)不设有元数据,以十进制yyyymmddhhmmss存储的

     

    MYSQL_TYPE_TIMESTAMP,MYSQL_TYPE_DATETIME都以以这种措施存的。

    启用严刻形式后,服务器要求合法的月和日,不止是个别在1到12和1到31限制内。譬如,禁止使用严厉形式时’二零零二-04-31′是法定的,但启用严厉方式后是违规的。要想在严酷格局允许掩瞒固定日期,还应启用ALLOW_INVALID_DATES。

    MYSQL_TYPE_TIME是时间戳。

      www.2cto.com  

    3)MYSQL_TYPE_YEAPAJERO,一纸空文元数据。

    · ANSI_QUOTES

    那些是一九〇一初叶的年份存的

     

    (2)整形,不设有元数据

    将‘”’视为识别符引号(‘`’引号字符),不要视为字符串的引号字符。在ANSI情势,你能够一直以来选取‘`’来引用识别符。启用ANSI_QUOTES后,你不能够用双引号来引用字符串,因为它被批注为识别符。

    MYSQL_TYPE_TINY, MYSQL_TYPE_SHORT, MYSQL_TYPE_INT24,MYSQL_TYPE_LONG,MYSQL_TYPE_LONGLONG和原先我们清楚的方法一样,只然而是小端数据

     

    (3)实数型

    · ERROR_FOR_DIVISION_BY_ZERO

    MYSQL_TYPE_FLOAT和MYSQL_TYPE_DOUBLE也是经过小端数据存储的,不相同的是他俩有一字节元数据,他们的元数据意味着他们有效数据的尺寸。

     

    MYSQL_TYPE_NEWDE桑塔纳L那么些小数存储方式不是很刚毅,仅仅在decimal.h中有定义,可是他的元数据第八个字节代表他有效数据的尺寸,第三个象征她的精度即小数点后长度

    在严谨方式,在INSERT或UPDATE进程中,假使被零除(或 MOD(X,0)),则发出错误(不然为警告)。假使未提交该方式,被零除时MySQL再次回到NULL。要是用到INSERT IGNORE或UPDATE IGNORE中,MySQL生成被零除警告,但操作结果为NULL。

    (4)字符串类型

     

    MYSQL_TYPE_VARCHA大切诺基 他两字节的元数据是她的最长长度。

    · HIGH_NOT_PRECEDENCE

    MYSQL_TYPE_STRING,MYSQL_TYPE_VAR_STENVISIONING 他们的元数据第一个字节代表真正的类型,而第一个字节代表存款和储蓄字符串长度的字节数大小

     

    (5)bit类型

    NOT 操作符的事先顺序是表达式举个例子NOT a BETWEEN b AND c被批注为NOT (a BETWEEN b AND c)。在部分旧版本MySQL中, 表达式被解说为(NOT a) BETWEEN b AND c。启用HIGH_NOT_PRECEDENCESQL形式,能够赢得从前的越来越高优先级的结果。

    MYSQL_TYPE_BLOB 他的元数据存款和储蓄的是bit类型长度的字节数大小

    mysql>SET sql_mode = ‘’; mysql>SELECT NOT 1 BETWEEN -5 AND 5; -> 0 mysql>SET sql_mode = ‘broken_not’; mysql>SELECT NOT 1 BETWEEN -5 AND 5; -> 1 

    MYSQL_TYPE_BIT 他的元数据存款和储蓄第一个字节代表有稍许bit,而第二个字节代表存款和储蓄bit类型的字节数大小

    · IGNORE_SPACE

    为此我们得以拿走结论,元数据越来越多囤积的是该品种的长短新闻。

     

    具体更详尽的请查看mysql5.7.13的源码 log_event.cc:1953::log_event_print_value()获取更多的音讯

    允许函数名和‘(’之间有空格。强制将具有函数名就是保存的字。结果是,要是你想要访谈保存为字的数据库、表或列名,你必得援用它。举个例子,因为有USE昂科威()函数,mysql数据库中的user表名和该表内的User列被封存下来,因而你必需引用它们:

    SELECT "User" FROM mysql."user"; 

    · NO_AUTO_CREATE_USER

     

    堤防GRANT自动制造新顾客,除非还点名了密码。

      www.2cto.com  

    · NO_AUTO_VALUE_ON_ZERO

    NO_AUTO_VALUE_ON_ZERO影响AUTO_INCREMENT列的管理。日常意况,你能够向该列插入NULL或0生成下多个系列号。NO_AUTO_VALUE_ON_ZERO禁止使用0,因而独有NULL能够生成下一个种类号。

     

    假若将0保存到表的AUTO_INCREMENT列,该形式会很有用。(不推荐使用该惯例)。比方,借使您用mysqldump转储表同仁一视载,MySQL境遇0值平常会转移新的队列号,生成的表的从头到尾的经过与转储的表差异。重载转储文件前启用NO_AUTO_VALUE_ON_ZERO能够消除该难点。mysqldump在出口中活动包罗启用NO_AUTO_VALUE_ON_ZERO的语句。

     

    · NO_BACKSLASH_ESCAPES

    禁止使用反斜线字符(‘’)做为字符串内的退出字符。启用该情势,反斜线则变为平时字符。

     

    · NO_DIR_IN_CREATE

    成立表时,忽视全体INDEX DIRECTO牧马人Y和DATA DIRECTO讴歌MDXY指令。该选项对从复克制务器有用。

     

    · NO_ENGINE_SUBSTITUTION

    比方急需的寄放引擎被剥夺或未编写翻译,可避防范自动替换存款和储蓄引擎。

     

    · NO_FIELD_OPTIONS

    无须在SHOW CREATE TABLE的出口中打字与印刷MySQL专用列选项。该形式在可移植情势(portability mode)下用于mysqldump。

     

    · NO_KEY_OPTIONS

     

    绝不在SHOW CREATE TABLE的输出中打字与印刷MySQL专项使用索引选项。该方式在可移植情势(portability mode)下用于mysqldump。

     

    · NO_TABLE_OPTIONS

      www.2cto.com  

    无须在SHOW CREATE TABLE的出口中打字与印刷MySQL专项使用表选项(举个例子ENGINE)。该情势在可移植格局(portability mode)下用于mysqldump。

     

    · NO_UNSIGNED_SUBTRACTION

     

    在减运算中,如若有些操作数没有标识,不要将结果标识为UNSIGNED。请留心那样使UNSIGNED BIGINT不可能百分之百用于上下文中。 · NO_ZERO_DATE

     

    在严俊方式,不要将 ‘0000-00-00′做为合法日期。你照样能够用IGNORE选项插入零日期。在非严刻形式,还可以该日期,但会生成警告。

     

    · NO_ZERO_IN_DATE

     

    在严峻情势,不接受月或日有的为0的日子。即便选取IGNORE选项,大家为周围的日期插入’0000-00-00′。在非严厉情势,能够承受该日期,但会生成警告。

     

    · ONLY_FULL_GROUP_BY

     

    永不让GROUP BY部分中的查询指向未选拔的列。

     

    · PIPES_AS_CONCAT

     

    将||视为字符串连接操作符(+)(同CONCAT()),而不正是说OLX570。

     

    · REAL_AS_FLOAT

     

    将REAL视为FLOAT的同义词,并非DOUBLE的同义词。

     

    · STRICT_TRANS_TABLES

     

    为富有存款和储蓄引擎启用严俊形式。违规数据值被驳回。

     

    · STRICT_TRANS_TABLES

     

    为专业存款和储蓄引擎启用严厉方式,也也许为非事务存款和储蓄引擎启用严峻形式。后边有详实表明。

     

    严加情势调控MySQL如何地理违规或错失的输入值。有两种原因能够使三个值为不法。比如,数据类型错误,不切合列,或高出范围。当新插入的行不含有某列的尚未出示定义DEFAULT子句的值,则该值被丢弃。  www.2cto.com  

     

    对于事务表,当启用ST汉兰达ICT_ALL_TABLES或STRICT_TRANS_TABLES形式时,即使语句中有地下或遗失值,则会现身谬误。语句被放弃并滚动。

     

    对此非事务表,若是插入或更新的第1行出现坏值,二种格局的作为一律。语句被放任,表保持不改变。如若语句插入或涂改多行,并且坏值出现在第2或后边的行,结果有赖于启用了哪位严厉挑选:

     

    · 对于STRICT_ALL_TABLES,MySQL重回错误并忽视剩余的行。但是,在这种处境下,后面包车型大巴行已经被插入或更新。这表明你能够部分更新,那恐怕不是您想要的。要制止那点,最佳使用单行语句,因为如此能够不变表即能够放任。

     

    · 对于STRICT_TRANS_TABLES,MySQL将不合法值转变为最相仿该列的官方值并插入调节后的值。假使值错失,MySQL在列中插入隐式暗中认可值。在别的景况下,MySQL都会生成警告实际不是交给错误并继续奉行语句。描述了隐式暗许值。

     

    从严方式不容许私行日期,比如’二〇〇〇-04-31′。它不允许禁绝日期使用“零”部分,比方’二零零三-04-00′或“零”日期。要想幸免,应在严谨情势基础上,启用NO_ZERO_IN_DATE和NO_ZERO_DATE SQL模式。

      www.2cto.com  

    假如您不接纳严刻形式(即不启用ST福睿斯ICT_TRANS_TABLES或STRICT_ALL_TABLES形式),对于违规或错失的值,MySQL将插入调解后的值并交由警告。在严酷形式,你能够透过INSERT IGNORE或UPDATE IGNORE来达成。

     

    上面的特有方式火速组合了面前所列的形式。

     

    个中囊括超越四分之二流行版本MySQL中的全部格局值。旧版本中,组合方式不满含新本子中从不的不适用的现实性格局值。

     

    等同REAL_AS_FLOAT、PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE。

     

    · DB2

     

    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。

     

    · MAXDB

     

    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、 NO_AUTO_CREATE_USER。

     

    · MSSQL

     

    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、 NO_FIELD_OPTIONS。

     

    · MYSQL323

     

    等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。

     

    · MYSQL40

      www.2cto.com  

    等同NO_FIELD_OPTIONS、HIGH_NOT_PRECEDENCE。

     

    · ORACLE

     

    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS、NO_AUTO_CREATE_USER。

     

    · POSTGRESQL

     

    等同PIPES_AS_CONCAT、ANSI_QUOTES、IGNORE_SPACE、NO_KEY_OPTIONS、NO_TABLE_OPTIONS、NO_FIELD_OPTIONS。

     

    · TRADITIONAL

     

    等同STRICT_TRANS_TABLES、STRICT_ALL_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER

     

    (二)sql 代码

    1.select @@sql_mode; 

    2. 

    3.CREATE TABLE `t` ( 

    1. `name` varchar(20), 

    2. `email` varchar(40) 

    6.);   www.2cto.com  

    7.desc t; 

    8. 

    9.set session sql_mode="REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ANSI"; 

    10. 

    11.insert into t(`name`, `email`) values("12345678901234567890999999", "[email protected]"); 

    12. 

    13.set session sql_mode="STRICT_TRANS_TABLES"; 

     

     

    本文来源于知行网

    STRICT_TRANS_TABLES使用图解教程 mysql 在insert的时候,通常提示未有暗中同意值,MySQL 1364 错误提醒:#1364 - Field XXX doesnt have a default value。XXX字段...

    本文由新葡亰496net发布于网络数据库,转载请注明出处:有关binlog的那点事,的法力表明

    关键词: