MySQL常见错误分析与解决方法总结(2)

8、Unknown column ‘column_name’ in ‘field list’
翻译:未知的字段名 column_name
分析:在执行sql语句是出现了指定表中没有的字段名称,就会出现这个错误。具体导致的原因可分为以下两种
 安装插件或者hack时修改了程序文件,而忘记了对数据库作相应的升级。
 程序文件和数据库不配套,比如d2.5的数据库配置给d4.1的程序来用肯定会出现这个错误。
 解决: 导致的原因和问题八的1和 3是相同的,所以解决方法也一样。

9、You have an error in your SQL syntax
翻译:有一个语法错误在你的sql中
 分析:论坛标准的程序是没有sql语法错误的。所以造成这个错误的原因一般就两类
 安装插件或擅自修改程序。
 不同的数据库版本数据库导出导入,比如MySQL4.1的数据在导出的语句包含了MySQL4.0没有的功能,像字符集的设定,这时如果将这些sql导入到MySQL4.0的时候就会产生sql语法错误。
 解决:
 仔细检查看到底是哪里的错误,将其修正,实在不行就用标准程序把出错的程序替换。
 在数据库备份的时候要留意,如果不打算倒入到其他版本的mysql中则不用特殊考虑,反之要特殊的设定。使用DZ4.1的后台数据备份,可以按照提示去设定想要的格式。独立主机的也可以在到处的时候将其导出为mysql4.0的格式。
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt databse > test.sql

10、Duplicate entry ‘xxx’ for key 1
翻译:插入 xxx 使索引1重复
 分析:索引如果是primary unique这两两种,那么数据表的数据对应的这个字段就必须保证其每条记录的唯一性。否则就会产生这个错误。
 一般发生在对数据库写操作的时候,例如Discuz!4.1论坛程序要求所有会员的用户名username必须唯一,即username的索引是 unique,这时如果强行往cdb_members表里插入一个已有的username的记录就会发上这个错误,或者将一条记录的username更新 为已有的一个username。
 改变表结构的时候也有可能导致这个错误。例如 Discuz!4.0论坛的数据库中cdb_members.username 的索引类型是index这个时候是允许有相同username的记录存在的,在升级到4.1的时候,因为要将username的索引由原来的index变 为unique。如果这时cdb_members里存在有相同的username的记录,那么就会引发这个错误。
 导出数据据时有时会因为一些原因(作者目前还不清楚)导致同一条记录被重复导出,那么这个备份数据在导入的时候出现这个错误是在所难免的了。
 修改了auto_increment的值,致使“下一个 Autoindex”为一条已经存在的记录
 解决: 两种思路,一是破坏掉唯一性的索引。二是把重复的数据记录干掉,只保留一条。很显然第一种思路是不可取的。那么按照二的思路我们得出以下几种解决方法,对应上面的i ii iii

 按照错误提示里的信息到数据库中将重复的记录删除,仅保留一条即可。之后继续执行升级操作。
 这种情况发生的概率很小,可以用文本编辑器打开备份文档,查找重复的信息。将其多余的拿掉,仅保留一条即可。
 查询出表中auto_increment最大的一条记录,设置auto_incerment比其大一即可。
PS:repaire table “表名“,可以暂时解决问题。

11、 Duplicate key name ‘xxx’
翻译:索引名重复
 分析:要创建的索引已经存在了,就会引发这个错误,这个错误多发生在升级的时候。可能是已经升级过的,重复升级引起的错误。也有可能是之前用户擅自加的索引,刚好与升级文件中的所以相同了。
 解决: 看看已经存在的索引和要添加的索引是否一样,一样的话可以跳过这条sql语句,如果不一样那么现删除已存在的所以,之后再执行。

12、 Duplicate column name ‘xxx’
翻译:字段名xxx重复
 分析:添加的字段xxx已经存在,多发生在升级过程中,与问题十二的产生是一样的。
 解决: 看一下已经存在的字段是否和将要添加的字段属性完全相同,如果相同则可以跳过不执行这句sql,如果不一样则删除掉这个字段。之后继续执行升级程序。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/284dd49432c7bfd0e3cec1d2ec0fda2e.html