gpt4 book ai didi

mysql - Play Framework 2 : h2 in memory database mysql compatibility mode: escaping characters

转载 作者:行者123 更新时间:2023-11-29 01:23:02 28 4
gpt4 key购买 nike

我在开发模式下使用内存数据库中的 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的限制?

最佳答案

您提供的链接,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 ,另一种解决方案是始终对字符串文字使用绑定(bind)变量(JDBC 中的 PreparedStatement)。

关于mysql - Play Framework 2 : h2 in memory database mysql compatibility mode: escaping characters,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12344978/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com