SAP Commerce with mysql on a mac



我正在mac本地安装SAP Commerce 2105,我使用mysql 8.0.31社区服务器。当运行'ant initialize'命令时,出现以下错误:

bad SQL grammar [ CREATE TABLE cmscomponent ...

我已经确认在创建cmscomponent表时失败,并且我已经确认其他表已经成功创建。我试着运行"ant initialize"命令好几次,每次都在同一个地方失败。

在我得到的错误上做一些谷歌搜索,问题似乎与正在创建的列的数量和大小有关。通过手动执行sql语句来创建cmscomponent表,可以得到更具体的错误:

ERROR 1118 (42000): Row size too large. The maximum row size for the used table type, not counting BLOBs, is 65535. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs.

对于这个问题,我看到的解决方案是将varchar类型的列的数据类型更改为文本。不幸的是,我不知道如何在Commerce中做到这一点,在我看来,这似乎是Commerce配置中的某个设置。有人知道我该怎么做吗?

在得到SAP顾问的提示后,我能够解决我的问题。在我的情况下,我得到了"行大小太大"的错误,因为太多的列,我们已经添加到cmscomponent表,最终被创建了一个类型的varchar(255)。为这个表分配的总大小超过了65535,这就是命令失败的原因。

解决方案是在扩展的*core-items.xml文件中找到作为varchar(255)创建的列,例如:
<attribute qualifier="compBackground"
type="java.lang.String">
<description>Background for the Component</description>
<persistence type="property" />
<modifiers optional="true" />
</attribute>

请注意,我们从未在xml文件中实际指定'varchar(255)',但这是mysql数据库中最终的列类型。我就能确定哪些列有类型

通过检查'ant initialize'命令失败的SQL语句来检查'varchar(255)'。 然后,我向持久性元素添加了一个限定符,现在它看起来像这样:
<attribute qualifier="compBackground"
type="java.lang.String">
<description>Background for the Component</description>
<persistence type="property">
<columntype database="mysql">
<value>TEXT</value>
</columntype>
</persistence>
<modifiers optional="true" />
</attribute>

因此,您可以看到,当使用mysql数据库时,该列将以'TEXT'类型创建。似乎您可以添加这样的限定符,以使列类型成为您所使用的任何数据库类型的任何类型。在我看来,这是SAP想出的一个非常聪明的方法来处理这种情况。

注意,在我们的*core-items.xml文件中,我并没有修改所有的varchar(255)列来使用这个限定符,我只修改了大约30列(这个表总共有100多个varchar(255)类型的列)。我想看看我是否可以在不转换所有列的情况下解决这个问题,结果证明我可以。

用MySQL在mac上安装Commerce对我们来说是一件新鲜事。我们通常使用带有MS SQL Server数据库的Windows工作站,在合并代码之前,我会确保此更改不会对我们的MS SQL Server安装产生不利影响。

我要说的是,我在mac上使用Commerce的最初体验是非常积极的。与Windows相比,它非常快。

最新更新