精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

MySQL JSON 類型 NOT NULL 竟無法約束 NULL 值插入?

數據庫 MySQL
正向解析 binlog 生成 SQL 看并無問題,binlog 里記錄的確實是 '' (空)值。但是通過查看線上表數據發現,在 有 JSON NOT NULL? 類型的約束下,對應的回滾 SQL 主鍵值竟然是 NULL 值! 這和 binlog 里記錄的 '' (空)值不一致。

故障現象

業務人員執行了 DELETE 操作,導致數據誤刪除,需要數據回滾。通過工具回滾時,發現回滾生成的 SQL 執行時報錯:

ERROR 3140 (22032) at line 38454 in file: 'rollback.9591.sql': Invalid JSON text: "The document is empty." at position 0 in value for column 'life_band_dig_query.search_stats'.

起初,以為是 SQL 里的反斜杠導致數據被截斷了,sed 完再導入 SQL 發現還是有問題。SQL 文件不小,表也很寬,很難檢查問題,但還是試著分析數據,發現反斜杠是對的。汗。。。

又通過報錯仔細分析對應字段 search_stats 的值,發現 JSON 字段類型回滾生成的 SQL 竟然是 '' (空)值!

  • 版本:MySQL 5.7.21
  • SQL_MODE: ''

故障分析

正向解析 binlog 生成 SQL 看并無問題,binlog 里記錄的確實是 '' (空)值。

但是通過查看線上表數據發現,在 有 JSON NOT NULL 類型的約束下,對應的回滾 SQL 主鍵值竟然是 NULL 值! 這和 binlog 里記錄的 '' (空)值不一致。

正常寫入 NULL 值,會觸發約束報錯,猜測可能是歷史上有過 DDL 操作。

故障復現

將 SQL_MODE 設置為 '',退出重連。(PS:切記重連生效!)

MySQL [xuzong]> create table q(id int ,age varchar(200) default NULL);
Query OK, 0 rows affected (0.0107 sec)

MySQL [xuzong]> insert into q values(1,NULL);
Query OK, 1 row affected (0.0040 sec)

MySQL [xuzong]> select * from q;
+----+------+
| id | age  |
+----+------+
|  1 | NULL |
+----+------+
1 row in set (0.0020 sec)

MySQL [xuzong]> alter table q modify age json not null ;
Query OK, 1 row affected, 1 warning (0.0164 sec)

# 注意到這里有 Warning,感覺這種情況應該是 Error 才對。
Records: 1  Duplicates: 0  Warnings: 1
Warning (code 1265): Data truncated for column 'age' at row 1

# 到這里就發現不對勁了,不僅有 null 值,而且還由 NULL 大寫變成了小寫。
MySQL [xuzong]> select * from q;
+----+------+
| id | age  |
+----+------+
|  1 | null |
+----+------+
1 row in set (0.0020 sec)

MySQL [xuzong]> show create table q \G
*************************** 1.row ***************************
       Table: q
Create Table: CREATE TABLE`q` (
`id` int(11) DEFAULT NULL,
`age` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1rowinset (0.00 sec)

# 查一下試試,也能查出來
MySQL [xuzong]> select * from q  WHERE JSON_EXTRACT(age, '$.age') IS NULL;
+----+------+
| id | age  |
+----+------+
|  1 | null |
+----+------+
1 row in set (0.0019 sec)

# update 一下試試 binlog 是怎么記錄的
MySQL [xuzong]> update q set id=2 where id=1;
Query OK, 1 row affected (0.0023 sec)
Rows matched: 1  Changed: 1  Warnings: 0

# 用 5.7.21 的 mysqlbinlog 解析出來 binlog:null 值 update 的時候 binlog 會記錄為 ''
### UPDATE `xuzong`.`q`
### WHERE
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
###   @2='' /* JSON meta=4 nullable=0 is_null=0 */
### SET
###   @1=2 /* INT meta=0 nullable=1 is_null=0 */
###   @2='' /* JSON meta=4 nullable=0 is_null=0 */

問題處理

查到是字段兼容性問題就好處理了,方法如下:

新建一個庫,建議一個同表結構的表,將 JSON 字段改寫為 TEXT 字段,然后將回滾 SQL 導入。再 UPDATE 修改 '' (空)值為 {},然后再修改為 JSON 字段。業務判斷數據是否正確,INSERT ... SELECT ... 寫入回原表。

這樣就解決了。。。

后續測試

其他版本 MySQL 是否存在同樣的問題?親測 5.7.35 和 5.7.44 也同樣存在,這里不再概述。

但是用 MySQL 8.0 的 mysqlbinlog 去解析 binlog,記錄為 null。

測試 VARCHAT 類型

MySQL [xuzong]> create table j (id int , age varchar(20));
Query OK, 0 rows affected (0.01 sec)

MySQL [xuzong]> insert into j values (1,NULL);
Query OK, 1 row affected (0.01 sec)

MySQL [xuzong]> select * from j;
+------+------+
| id   | age  |
+------+------+
|    1 | NULL |
+------+------+
1 row in set (0.01 sec)

MySQL [xuzong]> alter table j modify age varchar(20) not null;
Query OK, 1 row affected, 1 warning (0.01 sec)
Records: 1  Duplicates: 0  Warnings: 1

MySQL [xuzong]>  show Warnings;
+---------+------+------------------------------------------+
| Level   | Code | Message                                  |
+---------+------+------------------------------------------+
| Warning | 1265 | Data truncated for column 'age' at row 1 |
+---------+------+------------------------------------------+
1 row in set (0.00 sec)

MySQL [xuzong]> select * from j;
+------+-----+
| id   | age |
+------+-----+
|    1 |     |
+------+-----+
1 row in set (0.00 sec)

這樣看的 VARCHAR 會自動轉換為空值。

SQL_MODE

# 再執行復現操作就報錯了,所以還是建議線上開啟嚴格模式的。
set global sql_mode=deafult;

用 ibd2sql 解析一下 ibd 文件,發現數據是正確的:

[root@nvm-22vdnhahrwnq37 ibd2sql-main]# python3 main.py ../mysql4223/xuzong/j.ibd --sql --ddl
CREATE TABLE IF NOT EXISTS `xuzong`.`j`(
    `id` int NULL,
    `age` json NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ;
INSERT INTO `xuzong`.`j` VALUES (2, '{}');

總結

  1. 線上修改表結構,一定要先備份數據,然后在測試環境上修改表結構,測試通過后再上線。
  2. 修改表結構時,一定要注意數據類型的變化,特別是 JSON、BLOB 等特殊類型的變化。
  3. 建議線上開啟 SQL_MODE 嚴格模式,避免出現一些意想不到的問題。
  4. 本次問題不影響線上數據以及主從復制,理論上來說只是 MySQL 5.7 版本 mysqlbinlog 的問題,以及違反了非空約束。

責任編輯:武曉燕 來源: 愛可生開源社區
相關推薦

2022-05-08 18:18:40

JDKValueHashMap

2022-01-27 07:02:52

JavaHashMap單線程

2023-10-26 14:30:05

MySQLInnoDB

2010-05-31 15:23:02

MySQL數據庫NUL

2025-10-09 09:32:29

MySQL數據數據庫

2010-09-28 11:48:36

SQL NULL值

2023-05-10 16:15:58

javaScript算法開發

2024-06-06 08:10:30

多線程Mapnull

2017-09-05 09:02:06

Oraclenot null優化

2025-11-19 08:26:19

MySQLNULL空值字段

2015-07-20 17:05:38

SQL ServerNULL值

2025-01-20 07:10:00

LambdaJavanull

2022-09-13 08:33:05

SQLNULL三值邏輯

2020-07-09 10:15:55

空值Bug語言

2009-08-24 13:52:04

C# 泛型約束

2018-02-06 08:32:09

MySQLNull程序員

2021-06-07 07:59:29

MySQL數據庫 Get

2024-12-09 09:20:00

MySQLNULL 值

2010-09-17 10:24:47

SQL中IS NULL

2010-11-26 13:40:58

MySQL空字符串
點贊
收藏

51CTO技術棧公眾號

成人一区二区三| 久久大香伊蕉在人线观看热2| av黄色在线免费观看| 国产极品久久久久久久久波多结野| 日本一区二区高清| 亚洲一区二区三区香蕉| 日韩黄色一级大片| 日韩在线二区| 亚洲激情在线观看| 999在线观看| 999精品网| 国产调教视频一区| 97在线电影| www.五月婷婷.com| 韩国av一区| 在线日韩中文字幕| 911亚洲精选| 巨胸喷奶水www久久久免费动漫| 亚洲色图.com| 欧美日韩在线高清| 亚洲国产999| 日本视频免费一区| 992tv成人免费视频| 国产精品免费在线视频| 亚洲精品无吗| 日韩午夜激情视频| 国产免费又粗又猛又爽| av资源在线播放| 成人免费在线视频观看| 奇米影视首页 狠狠色丁香婷婷久久综合 | 蜜臀尤物一区二区三区直播| 欧美一区成人| 中文字幕在线日韩| 久久久久亚洲av成人无码电影| 欧美在线在线| 欧美理论片在线| www.色就是色| 婷婷六月国产精品久久不卡| 亚洲一区二区在线免费观看视频| 一区二区三区电影| 国产天堂素人系列在线视频| 97久久精品人人澡人人爽| 97人人模人人爽视频一区二区 | 丝袜亚洲精品中文字幕一区| 久久久在线视频| 老司机成人免费视频| 精品亚洲成人| 一区二区三区动漫| av网站免费在线看| 狠狠做六月爱婷婷综合aⅴ| 精品亚洲夜色av98在线观看| 不许穿内裤随时挨c调教h苏绵| 精品国产乱码一区二区三区| 91精品国产91综合久久蜜臀| 亚洲精品久久久久久宅男| 黄色精品视频| 欧洲国内综合视频| www.天天射.com| 精品国模一区二区三区| 在线观看免费一区| 午夜欧美福利视频| 韩国成人在线| 欧美亚州韩日在线看免费版国语版| 能在线观看的av| 亚洲天堂电影| 欧洲日韩一区二区三区| 男人搞女人网站| 黄色成人在线观看网站| 欧美日韩在线播放| 日本黄色的视频| 日韩成人在线观看视频| 亚洲国产精品va在线看黑人 | 99re8这里有精品热视频免费 | 天天干天天爱天天操| av色综合久久天堂av综合| 国产乱码精品一区二区三区不卡| 日本国产在线观看| 26uuu亚洲婷婷狠狠天堂| 欧美日韩在线观看一区| 91.xxx.高清在线| 亚洲人成精品久久久久久| 屁屁影院ccyy国产第一页| 国产夫妻在线播放| 欧美色偷偷大香| 五月天开心婷婷| 成人性生交大片免费看中文视频| 亚洲黄页网在线观看| 国产免费看av| 香蕉视频国产精品| 亚州av一区二区| 亚洲精品久久久久久久蜜桃| 久久99精品国产| 国产精品青青草| 国产亚洲依依| 一区二区三区中文字幕| 国产成人无码精品久久久性色| 日韩高清成人| 亚洲精品一区二区三区福利| 久久av无码精品人妻系列试探| 国产精品久久久久9999赢消| 久久久久国产精品免费| 中文精品久久久久人妻不卡| 国产黄色成人av| 快播日韩欧美| 怡红院在线播放| 色偷偷88欧美精品久久久| 久久综合在线观看| 夜夜躁狠狠躁日日躁2021日韩| 色偷偷偷亚洲综合网另类| 日韩手机在线观看| 久久爱www久久做| 精品不卡在线| 黄视频网站在线| 91极品视觉盛宴| 中国特级黄色大片| 欧美大片aaaa| 国产成人精彩在线视频九色| 精品人妻一区二区三区四区不卡 | 亚洲免费一区二区| 亚洲最大激情中文字幕| 国产裸舞福利在线视频合集| 亚洲国产婷婷综合在线精品| 国产一区二区在线免费播放| 欧美三级电影在线| 欧美高跟鞋交xxxxxhd| 一级日韩一级欧美| 久久久久国色av免费看影院| 缅甸午夜性猛交xxxx| 日韩精品中文字幕吗一区二区| 中文字幕精品视频| 一级片免费在线播放| 不卡视频一二三| 黑人巨茎大战欧美白妇| 亚洲伊人精品酒店| 中文字幕亚洲在线| 亚洲国产av一区二区三区| www成人在线观看| 欧美视频免费看欧美视频| 日韩欧美中文在线观看| 久久在线观看视频| 一级日韩一级欧美| 国产精品情趣视频| 亚洲国产高清av| 禁断一区二区三区在线| 51午夜精品视频| 天天操天天干天天干| 亚洲h动漫在线| aaa黄色大片| 亚洲特级毛片| 国产精品中出一区二区三区| 白白色在线观看| 亚洲精品一区二区三区99| 久久精品欧美一区二区| 国产成人啪午夜精品网站男同| 久久免费一级片| 麻豆精品一区| 欧美激情在线观看视频| 免费观看国产视频| 污片在线观看一区二区| 精品国产av色一区二区深夜久久| 亚洲激情网址| 牛人盗摄一区二区三区视频| 日韩免费电影| 综合网中文字幕| 国产精品久久久久久免费免熟| 亚洲欧洲综合另类| 无码国产精品一区二区高潮| 欧美三级免费| 精品国产一区二区三区麻豆小说| segui88久久综合9999| 日韩电影免费观看在线观看| 亚洲精品中文字幕乱码三区91| 国产日韩欧美综合在线| 成人综合久久网| 综合久久精品| 精品无人乱码一区二区三区的优势 | 欧美女人性生活视频| 国产精品一区二区av日韩在线| 国产精品欧美日韩一区二区| 黄色成人影院| 亚洲成人av片在线观看| 黄色片网站在线免费观看| 日本一区二区视频在线| 三级网站免费看| 国产精品久久久久毛片大屁完整版 | 国产sm主人调教女m视频| 无码av中文一区二区三区桃花岛| 日韩在线免费观看av| 麻豆国产一区二区| 福利在线一区二区| 国产成人一区| 亚洲综合大片69999| 日韩脚交footjobhd| 永久免费精品影视网站| 亚洲精品国产av| 日本国产一区二区| 青青草免费av| 国产日韩欧美电影| 日本少妇一级片| 三级久久三级久久久| 8x8x华人在线| 免费久久久久久久久| 99免费在线观看视频| 成人在线爆射| 国内精品视频在线| 日韩毛片久久久| 欧美r级在线观看| 中文字幕乱码在线观看| 天天av天天翘天天综合网色鬼国产 | 国产欧美一区二区三区米奇| 国产精品一区二区久久| 欧美男人天堂| 久久999免费视频| www.视频在线.com| 日韩不卡在线观看| 国产视频手机在线观看| 欧洲激情一区二区| 日本在线播放视频| 亚洲午夜久久久久中文字幕久| 91麻豆制片厂| 久久亚洲综合色一区二区三区| 三上悠亚 电影| 麻豆国产精品视频| 老熟妇仑乱视频一区二区| 日韩午夜高潮| 日本免费成人网| 亚洲国产一成人久久精品| 日韩三级电影免费观看| 亚洲综合图色| 久久免费一区| 精品自拍偷拍| 国产精品免费看一区二区三区| 只有精品亚洲| 91精品视频观看| 国产成人77亚洲精品www| 日本a级片电影一区二区| 白浆视频在线观看| 国模精品一区二区三区色天香| av片在线观看永久免费| 日韩亚洲精品电影| 精品国产99久久久久久| 日韩在线视频国产| 91免费在线| 最新69国产成人精品视频免费| 国产精品毛片一区二区三区四区| 亚洲欧洲第一视频| 蜜桃视频在线观看网站| 亚洲毛片一区二区| 国产一区精品| 中文字幕av一区二区| 91ph在线| 草民午夜欧美限制a级福利片| 日韩在线观看www| 久久高清视频免费| 羞羞视频在线观看不卡| 久久躁日日躁aaaaxxxx| 在线免费观看污| 久久久久久免费精品| 爱啪视频在线观看视频免费| 91精品国产91久久久久久不卡| 日韩脚交footjobhd| 国产极品精品在线观看| 99九九久久| 成人亚洲激情网| 97se亚洲| 久久亚洲一区二区| 欧美色爱综合| 超碰在线免费观看97| 欧美深夜福利| 极品美女扒开粉嫩小泬| 久久一二三四| 57pao国产成永久免费视频| 国产一区二区在线免费观看| 涩视频在线观看| 91蜜桃免费观看视频| 国产又粗又黄又猛| 亚洲日本在线观看| 自拍偷拍欧美亚洲| 在线区一区二视频| 国产女人爽到高潮a毛片| 精品乱码亚洲一区二区不卡| 色在线免费视频| 中文字幕亚洲在线| 俺来俺也去www色在线观看| 欧美中文在线视频| 精品美女一区| 黄色91av| 久久资源中文字幕| 黄色一级片在线看| 免费看欧美美女黄的网站| 麻豆免费在线观看视频| 久久精品一区二区三区四区| 日韩精品123区| 欧美日韩国产在线看| 亚洲中文一区二区三区| 亚洲缚视频在线观看| eeuss影院在线播放| 久久久久久噜噜噜久久久精品| 日本在线中文字幕一区二区三区| 2014国产精品| 不卡中文一二三区| 欧美精品卡一卡二| 精品一区二区久久| 精品黑人一区二区三区观看时间| 中文字幕日本不卡| 国产农村妇女aaaaa视频| 91精品国产91久久久久久最新毛片| 日漫免费在线观看网站| 久久在线观看视频| www.26天天久久天堂| 久久精品成人一区二区三区蜜臀| 国产精品88久久久久久| 亚洲人成无码www久久久| 国产.欧美.日韩| 26uuu成人网| 欧美日韩在线三级| 你懂得在线网址| 久久久久国产精品一区| 国产麻豆一区二区三区| 色涩成人影视在线播放| 国产欧美一级| av不卡中文字幕| 亚洲免费视频成人| 国产精品国产av| 这里只有精品丝袜| 午夜日韩成人影院| 欧美激情论坛| 国产视频一区在线观看一区免费| 无码人妻丰满熟妇区毛片蜜桃精品 | 久久本道综合色狠狠五月| 欧美私人啪啪vps| 中文字幕亚洲影院| 国产精品久久影院| 中文在线字幕免费观| 亚洲午夜精品视频| 欧美成人ⅴideosxxxxx| 欧美精品123| 一本色道88久久加勒比精品| 亚洲成年人av| 午夜精品福利一区二区三区蜜桃| 亚洲乱码在线观看| 欧美巨乳在线观看| 香蕉大人久久国产成人av| 欧美xxxx吸乳| 国产一区二区三区久久悠悠色av| 国产乱子轮xxx农村| 欧美日韩在线不卡| 免费在线观看黄色| 亚洲一区二区三区在线免费观看| 91精品亚洲| 免费观看黄网站| 亚洲国产一区二区视频| 婷婷五月综合激情| 欧美一区二区三区图| 精品久久精品| 日本人视频jizz页码69| 国产精品国产精品国产专区不蜜 | 欧美日韩另类丝袜其他| 噜噜噜91成人网| 男人的天堂官网| 欧美日韩你懂的| 中文国产字幕在线观看| 高清国产一区| 性欧美长视频| 呻吟揉丰满对白91乃国产区| 欧美日本在线观看| 国产精品一区二区三区视频网站| 亚洲一区二区中文| 999亚洲国产精| 国产 欧美 在线| 777午夜精品视频在线播放| 懂色av一区| 欧美日韩一区二区三区在线视频| 蜜臀av一级做a爰片久久| 精品一区在线观看视频| 亚洲国产日韩欧美在线图片 | 91中文在线视频| 亚洲黄色免费| 一级黄色片大全| 91精品国产aⅴ一区二区| 国产伦理精品| 伊人色综合久久天天五月婷| 粉嫩aⅴ一区二区三区四区五区| 9i精品福利一区二区三区| 久久精视频免费在线久久完整在线看| 亚洲国产视频二区| 成人免费观看毛片| 亚洲精品自拍动漫在线| 亚洲三区在线观看无套内射| 国产又爽又黄的激情精品视频| 极品中文字幕一区| 国产探花视频在线播放| 精品美女在线观看| 日韩av一级| 精品无码一区二区三区在线| 国产精品欧美一级免费| 少妇一区二区三区四区| 91久久久久久久| 久久九九99| 亚洲国产精一区二区三区性色|