db.xml中指定的Concrete5数据库索引,但不“接受”我该如何运作?

问题描述

| 环境:Windows7,IIS7,MysqL 5.1.57,Concrete5 5.4.1.1 放置自定义块时,我得到了这个相当奇怪的错误消息:
Fatal error: Uncaught exception \'ADODB_Exception\' with message \'MysqL error: [-1: No primary key found for table btCtL] in BlockRecord::UpdateActiveTable(0,0) \' in C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\3rdparty\\adodb\\adodb-exceptions.inc.PHP:78 Stack trace: #0 
C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\3rdparty\\adodb\\adodb-active-record.inc.PHP(494): adodb_throw(\'MysqL\',\'BlockRecord::Up...\',-1,\'No primary key ...\',Object(ADODB_MysqL)) #1 
C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\3rdparty\\adodb\\adodb-active-record.inc.PHP(402): ADODB_Active_Record->Error(\'No primary key ...\',\'UpdateActiveTab...\') #2 
C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\3rdparty\\adodb\\adodb-active-record.inc.PHP(136): ADODB_Active_Record->UpdateActiveTable(false) #3 
C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\block_view.PHP(30): ADODB_Active_Record->__construct(\'btCtL\') #4 
C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\block_controller.PHP(222): BlockRecord->__construct(\'btCtL\') #5 
C:\\inetpub\\wwwroot\\Concrete in C:\\inetpub\\wwwroot\\Concrete5\\concrete\\libraries\\3rdparty\\adodb\\adodb-exceptions.inc.PHP on line 78 
在这种情况下,db.xml读取
<?xml version=\"1.0\"?>
<schema version=\"0.3\">
<table name=\"btCtL\">
    <field name=\"bID\" type=\"I\">
    <unsigned />
    <key />      
    </field>
    <field name=\"Number_1\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_2\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_3\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_4\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_5\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_6\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_7\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_8\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_9\" type=\"C\" size=\"12\"></field>
    <field name=\"Number_10\" type=\"C\" size=\"12\"></field>
</table>
</schema>
错误与\“表btCtL找不到主键”有关,这显然是错误的。如果我进入PHPAdmin并强制执行该问题,那么它将起作用,但是我不能为每个客户端站点都这样做,也不能期望客户端自己做。 这是一个错误吗?有解决方法吗?还是我很胖?     

解决方法

块的bID字段需要声明为无符号密钥,但不是主密钥,也不是自动增量密钥:
<field name=\"bID\" type=\"I\"><KEY /><UNSIGNED /></field>
不确定为什么它不是主要的,但绝对不能是自动增量的,因为bID是由Concrete5系统分配的,并且每次更新块时它都会更改(由于版本控制系统)。 顺便说一句,更改db.xml文件后,您需要通过以下方式更新架构:转到“仪表板”->“添加功能”,单击所讨论的块旁边的“编辑”,然后单击“刷新”按钮。     ,问题似乎是Concrete5的。我刚刚使用MySQLInstanceConfig.exe从“对多语言的最佳支持”(我一开始想要的)更改为“标准字符集”。这会将字符集从utf8转换为Latin1。进行此更改后,刷新将在bID上创建一个PRIMARY密钥。 另外,这是MySQL 5.1的问题,可能已在5.5中修复。尚未尝试。     

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...