我的MySQL数据库存在问题。我想在重复的语句上运行一个巨大的插入/接收1118错误。
关于这个问题的神秘之处在于它取决于"完整的"声明。如果我删除一行中的一个字符(它确实是哪一行),该语句将起作用。如果我添加一个字符(它不管哪一行),我会收到1118错误。
我试图在my.ini上增加很多值,例如innodb_log_file_size,innodb_buffer_pool_size和innodb_log_buffer_size。没有什么对我有用。
限制在哪里?
我可以运行以下命令,但是Varchar(1)的3个变量正在被削减。如果我将Varchar更改为文本,则会收到错误。
由于Stackoverflow char限制,我在此处上传了我的声明:http://pastie.org/private/yriegkyurqavnqezzbsqta
在''之间你可以填写大约12569个随机字符,无论你填写它们在哪里,12570后我收到错误。
This is the create table code:
CREATE TABLE `produktliste_icecat` (
`EAN` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Fehler` VARCHAR(200) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Bild_high` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Bild_low` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Bild_thumb` VARCHAR(250) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Name` VARCHAR(200) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Titel` VARCHAR(200) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Quality` VARCHAR(50) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Anleitung` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Datenblatt` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_URL` VARCHAR(500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Garantie` VARCHAR(2500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Beschreibung_kurz` VARCHAR(700) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Beschreibung_lang` TEXT NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Zusammenfassung_kurz` VARCHAR(700) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Zusammenfassung_lang` VARCHAR(1500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Titel` VARCHAR(1500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Name` VARCHAR(1) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Wert` VARCHAR(1) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Kategorie_Zuordner` VARCHAR(1) NOT NULL COLLATE 'utf8_general_ci',
`Icecat_Eigenschaft_Titel_ID` VARCHAR(700) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_alternative_EAN` VARCHAR(2500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Wert_presentation` TEXT NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Wert_local` TEXT NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Kategorie` VARCHAR(100) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Kategorie_Eigenschaft_suchbar` VARCHAR(2500) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Titel_Prio` VARCHAR(3300) NOT NULL COLLATE 'utf8_unicode_ci',
`Icecat_Eigenschaft_Wert_Prio` VARCHAR(700) NOT NULL COLLATE 'utf8_unicode_ci',
UNIQUE INDEX `EAN` (`EAN`)
)
COLLATE='utf8_unicode_ci'
ENGINE=InnoDB;
这是我的my.ini:
[mysqld]
port= 3306
socket = "C:/xampp/mysql/mysql.sock"
basedir = "C:/xampp/mysql"
tmpdir = "C:/xampp/tmp"
datadir = "Z:/xampp_sql/data"
pid_file = "mysql.pid"
key_buffer = 1G
max_allowed_packet = 500M
sort_buffer_size = 4M
net_buffer_length = 4M
read_buffer_size = 50M
read_rnd_buffer_size = 1024K
myisam_sort_buffer_size = 8M
log_error = "mysql_error.log"
innodb_buffer_pool_size = 1G
query_cache_type = 1
innodb_log_file_size = 20000M
innodb_log_buffer_size=1250M
innodb_flush_log_at_trx_commit=2
innodb_thread_concurrency=0
innodb_file_per_table
bind-address="0.0.0.0"
plugin_dir = "C:/xampp/mysql/lib/plugin/"
skip-federated
server-id = 1
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
innodb_additional_mem_pool_size = 2M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
有谁知道如何在一个声明中运行超过12570个字符的语句?
提前谢谢!
答案 0 :(得分:0)
使用您的create table,以及来自pastie url的insert语句(删除了db名称引用)
这就是我得到的
错误1406:列的数据太长 Icecat_Eigenschaft_Wert_presentation
这是varchar(1000)
。
修复此问题并继续下一条错误消息(大概)。修复它。冲洗并重复。
我正在收到如上所示的不同错误消息。
运行mysql 5.6.24。
参见手册页Limits on InnoDB Tables:
尽管InnoDB支持的行大小超过65,535字节 在内部,MySQL本身对行的行大小限制为65,535 所有列的总大小:
mysql> CREATE TABLE t (a VARCHAR(8000), b VARCHAR(10000),
-> c VARCHAR(10000), d VARCHAR(10000), e VARCHAR(10000),
-> f VARCHAR(10000), g VARCHAR(10000)) ENGINE=InnoDB;
ERROR 1118 (42000): Row size too large. The maximum row size for the
used table type, not counting BLOBs, is 65535. You have to change some
columns to TEXT or BLOBs
虽然看着你的创作,但这似乎不是一个问题。但要记住一些事情。怎么解决?也许在下面,也是从那个手册页:
最大行长度,可变长度列除外(VARBINARY, VARCHAR,BLOB和TEXT)略小于数据库的一半 页。也就是说,最大行长度约为8000字节。 LONGBLOB 和LONGTEXT列必须小于4GB,总行长度, 包括BLOB和TEXT列,必须小于4GB。
如果一行长度不到半页,则所有行都存储在本地 在页面内。如果它超过半页,可变长度列 被选择用于外部页外存储,直到该行适合 半页,如第14.12.2节“文件空间管理”中所述。
为外部页外选择的BLOB列的行大小 存储不应超过组合重做日志文件大小的10%。如果 行大小超过组合重做日志文件大小InnoDB的10% 可能会覆盖最近可能导致丢失的检查点 崩溃恢复期间的数据。 (错误#69477)。
因此,当您达到某个阈值时,请开始转换为TEXT
数据类型等。