How to Handle Reserved Keywords in H2 Database

How to Handle Reserved Keywords in H2 Database
Photo by Thibault Mokuenko / Unsplash


When working with H2 databases, you may encounter situations where your SQL statements fail due to the use of reserved keywords as identifiers. One common example is using "VALUE" as a column name. In this post, we'll discuss how to resolve this issue and provide a solution for the fix.

The Problem:

Consider the following SQL statement for creating a table:

CREATE TABLE bby_param (
    amended_on DATE,
    created_on DATE,
    syscode VARCHAR(255),
    value VARCHAR(255), -- Error: "value" is a reserved keyword

The issue arises because "value" is a reserved keyword in SQL, causing the SQL statement to fail with an error message indicating "expected identifier".

The Solution:

To resolve this issue, we need to configure H2 to treat "value" as a regular identifier rather than a reserved keyword. This can be achieved by adding "value" to the list of non-keywords in the H2 database URL.

Steps to Fix:

Update your H2 database URL to include the non-keyword list: spring.datasource.url=jdbc:h2:mem:testdb;NON_KEYWORDS=VALUE

Adding NON_KEYWORDS=VALUE instructs H2 to treat "VALUE" as a regular identifier.Restart your application to apply the changes.


When working with H2 databases, it's essential to be aware of reserved keywords that may cause issues in your SQL statements. By configuring H2 to treat such keywords as regular identifiers, you can avoid errors and ensure smooth database operations.


Handling reserved keywords in H2 databases is a common challenge, but with the right configuration, it's easily manageable. By following the steps outlined in this post, you can resolve issues related to reserved keywords and continue developing your applications smoothly.

Subscribe to Post, Code and Quiet Time.

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.