Mysql 使用函数创建索引

Mysql 使用函数创建索引,mysql,sql,postgresql,indexing,liquibase,Mysql,Sql,Postgresql,Indexing,Liquibase,我在postgresql中有一个数据库,它有以下索引: CREATE INDEX fav_alias_lower_index ON fav_alias USING hash((LOWER(fav_alias))); 当我反向设计这个数据库时,我得到了这个liquibase变更日志: <changeSet author="jmartins (generated)" id="1410448831080-17"> <createIndex indexName="workspa

我在postgresql中有一个数据库,它有以下索引:

CREATE INDEX fav_alias_lower_index ON fav_alias USING hash((LOWER(fav_alias)));
当我反向设计这个数据库时,我得到了这个liquibase变更日志:

<changeSet author="jmartins (generated)" id="1410448831080-17">
   <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false">
      <column name="lower((fava_alias)::text)"/>
   </createIndex>
</changeSet>

当我在PostgreSql数据库上应用更新时,这可以很好地工作,但是,例如,它在MySql上不起作用。因此,我的问题是,我如何使这个索引创建也可用于MySql、MSSQL和Oracle,同时保留fava_别名的小写字母


谢谢

如果该函数在数据库中可用,您可以在liquibase中使用它。有一种方法可以使用dbms属性来区分不同的DBs

<changeSet author="jmartins (generated)" id="1410448831080-17">
   <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false" dbms="postgresql">
      <column name="lower((fava_alias)::text)"/>
   </createIndex>
</changeSet>

<changeSet author="jmartins (generated)" id="1410448831080-17">
   <createIndex indexName="workspace_favorite_alias_lower_case_index" tableName="workspace_favorite_alias" unique="false" dbms="oracle">
      <column name="lower(fava_alias)"/>
   </createIndex>
</changeSet>

“我如何才能使此索引创建可用于MySql,MSSQL”-简单回答:你不能。在MySQL(和SQL Server)中,您将为该列分配一个不区分大小写的排序规则,并在其上创建一个常规索引。对于Oracle,如果您删除(不必要的)
::text
cast,则其工作原理应该相同根据最近的文档,
dbms
字段不存在于
createIndex
标记中,那么我们需要将其移到
changeSet
标记中。