我在开发模式下使用内存数据库中的H2,但我希望它的行为尽可能像mysql数据库(参见http://www.h2database.com/html/features.html#compatibility)。
这是我在application.conf文件中的配置:
db.default.driver=org.h2.Driver
db.default.url="jdbc:h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1"要测试它,我只需运行"play“,然后在play的控制台上发出"h2-browser”命令,然后在url jdbc字段中输入"jdbc:h2:mem:play;MODE=MYSQL;DB_CLOSE_DELAY=-1“
以下语句在mysql中运行正常:
CREATE TABLE `tmp` (
`name` varchar(50) NOT NULL
);
insert into tmp (name) values ('slash: \\, simple quotes \', double quotes \" -');
select * from tmp;但在h2控制台中,我得到了一个错误,我唯一可以转义的字符是单引号,只需在它前面加上另一个单引号。(还尝试输入'SET MODE MySQL;')
有什么方法可以让h2在play的框架h2-browser中表现得像mysql吗?或者这只是h2的一个限制?
发布于 2012-09-10 13:00:05
您提供的链接http://www.h2database.com/html/features.html#compatibility记录了H2支持的确切兼容性功能。未记录的内容不受支持。在这种情况下,问题似乎是字符串文字中的“反斜杠”转义:
'slash: \\, simple quotes \', double quotes \" -'对于ANSI SQL,反斜杠不是转义字符;要转义单引号,需要使用两个单引号。问题是这可能不适用于MySQL,因为单个反斜杠仍然是转义字符:
'slash: \, simple quotes '', double quotes " -'对于这个问题,一个解决方案是使用ANSI mode for MySQL,另一个解决方案是始终对字符串文字使用绑定变量(JDBC中的PreparedStatement)。
https://stackoverflow.com/questions/12344978
复制相似问题