play framework 2:h2在内存数据库mysql兼容模式下:转义字符

ope*_*sas 2 mysql h2 playframework playframework-2.0

我正在开发模式下使用内存数据库中的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"
Run Code Online (Sandbox Code Playgroud)

测试它我只是运行"播放"并从播放控制台发出"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;
Run Code Online (Sandbox Code Playgroud)

但是在h2控制台中我得到一个错误,我可以逃脱的唯一字符就是单引号,只需在它前面添加另一个单引号.(也尝试输入'SET MODE MySQL;')

有没有办法让h2在play的框架h2-browser中表现得像mysql?还是只是h2的限制?

Tho*_*ler 6

您提供的链接http://www.h2database.com/html/features.html#compatibility记录了H2支持的确切兼容性功能.未支持未记录的内容.在这种情况下,似乎问题是在字符串文字中转义的'反斜杠':

'slash: \\, simple quotes \', double quotes \" -'
Run Code Online (Sandbox Code Playgroud)

反斜杠不是ANSI SQL的转义字符; 要逃避单引号,您需要使用两个单引号.问题是这可能不适用于MySQL,因为单个反斜杠仍然是转义字符:

'slash: \, simple quotes '', double quotes " -'
Run Code Online (Sandbox Code Playgroud)

对于这个问题,解决方案是使用ANSI模式进行MySQL,另一种解决方案是始终对String文字使用绑定变量(JDBC中的PreparedStatement).