2014-11-06 62 views
2

我得到一個〜1克SQL導入此錯誤轉儲:找到的第n個查詢,在很長的SQL文件

[ERROR in query 620] Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. 

我想看看這個查詢,但也有他們的4537(至少按分號計數),那麼我怎麼快速找到它們的第620個呢?我在xcode中打開了sql文件,但如果這是解決方案,我可以打開grep。

每個史蒂文的要求我推廣這更多。假設我們有形式的SQL文件:

# Dump of table table1 
# ------------------------------------------------------------ 

DROP TABLE IF EXISTS `table1`; 

CREATE TABLE `table1` (
    `a` int(11) NOT NULL AUTO_INCREMENT, 
    `b` varchar(255) NOT NULL DEFAULT '', 
    `c` varchar(255) NOT NULL DEFAULT '', 
    `d` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`a`), 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


# Dump of table table2 
# ------------------------------------------------------------ 

DROP TABLE IF EXISTS `table2`; 

CREATE TABLE `table2` (
    `a` int(11) NOT NULL AUTO_INCREMENT, 
    `b` varchar(255) NOT NULL DEFAULT '', 
    `c` varchar(255) NOT NULL DEFAULT '', 
    `d` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`a`), 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 


... 

# Dump of table table310 
# ------------------------------------------------------------ 

DROP TABLE IF EXISTS `table310`; 

CREATE TABLE `table310` (
    `a` int(11) NOT NULL AUTO_INCREMENT, 
    `b` varchar(255) NOT NULL DEFAULT '', 
    `c` varchar(255) NOT NULL DEFAULT '', 
    `d` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`a`), 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

# Dump of table table311 
# ------------------------------------------------------------ 

DROP TABLE IF EXISTS `table311`; 

CREATE TABLE `table311` (
    `a` int(11) NOT NULL AUTO_INCREMENT, 
    `b` varchar(255) NOT NULL DEFAULT '', 
    `c` varchar(255) NOT NULL DEFAULT '', 
    `d` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`a`), 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

所以在這個例子(...表示中間的表),與CREATE TABLE table310如果一切遵循了這一模式將是第620次查詢開始查詢。說模式和命名約定是不是很規則,我將如何能夠去錯誤中引用的第620個查詢?

+0

可能重複http://stackoverflow.com/questions/15585602/change-limit-for-mysql-行大 - 太大) – 2014-11-06 01:19:34

+0

Pradeep參考答案確實擺脫了錯誤信息,謝謝!但是,如何在錯誤中引用的查詢grep的基本問題仍然沒有答案。 – vaene 2014-11-06 07:01:57

回答

1
#!/usr/bin/awk -f 
BEGIN { 
    RS = ORS = ";" 
} 
NR == 6 

結果

CREATE TABLE `table310` (
    `a` int(11) NOT NULL AUTO_INCREMENT, 
    `b` varchar(255) NOT NULL DEFAULT '', 
    `c` varchar(255) NOT NULL DEFAULT '', 
    `d` tinyint(4) NOT NULL DEFAULT '0', 
    PRIMARY KEY (`a`), 

) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
的[更改限制 「mysql的行大小太大」(
+0

看起來不錯!只要沒有';'沒有與SQL中的查詢關聯我認爲這將起作用。 – vaene 2014-11-06 19:00:02

+0

只是一個警告:如果在.sql文件中有任何INSERT或UPDATE命令,並且它們的VALUES包含轉義的HTML(這並不罕見),那麼您可能會遇到諸如「 」或「<」之類的內容。這些實體中的分號將摒棄這種檢測方法並使其無效。 – beporter 2014-12-12 16:36:06