diff --git a/src/ast/data_type.rs b/src/ast/data_type.rs index 3c49817194..abd7b8dd41 100644 --- a/src/ast/data_type.rs +++ b/src/ast/data_type.rs @@ -112,6 +112,10 @@ pub enum DataType { /// /// [SQL Standard]: https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#national-character-string-type NationalCharVarying(Option), + /// National char type, e.g. NCHAR(10), [SQL Standard]. + /// + /// [SQL Standard]: https://jakewheat.github.io/sql-overview/sql-2016-foundation-grammar.html#national-character-string-type + Nchar(Option), /// Uuid type. Uuid, /// Large character object with optional length, @@ -569,6 +573,7 @@ impl fmt::Display for DataType { DataType::NationalCharVarying(size) => { format_character_string_type(f, "NATIONAL CHAR VARYING", size) } + DataType::Nchar(size) => format_character_string_type(f, "NCHAR", size), DataType::Uuid => write!(f, "UUID"), DataType::CharacterLargeObject(size) => { format_type_with_optional_length(f, "CHARACTER LARGE OBJECT", size, false) diff --git a/src/parser/mod.rs b/src/parser/mod.rs index 26d78d09f1..3bc8e88e20 100644 --- a/src/parser/mod.rs +++ b/src/parser/mod.rs @@ -13877,6 +13877,7 @@ impl<'a> Parser<'a> { )) } } + Keyword::NCHAR => Ok(DataType::Nchar(self.parse_optional_character_length()?)), Keyword::CLOB => Ok(DataType::Clob(self.parse_optional_precision()?)), Keyword::BINARY => Ok(DataType::Binary(self.parse_optional_precision()?)), Keyword::VARBINARY => Ok(DataType::Varbinary(self.parse_optional_binary_length()?)), @@ -23095,6 +23096,8 @@ mod tests { "NATIONAL CHAR VARYING(20)", DataType::NationalCharVarying(length) ); + test_parse_data_type!(dialect, "NCHAR", DataType::Nchar(None)); + test_parse_data_type!(dialect, "NCHAR(20)", DataType::Nchar(length)); } #[test] diff --git a/tests/sqlparser_common.rs b/tests/sqlparser_common.rs index 491d320b49..477f024667 100644 --- a/tests/sqlparser_common.rs +++ b/tests/sqlparser_common.rs @@ -23493,6 +23493,8 @@ fn parse_national_character_string_types() { "NATIONAL CHAR", "NATIONAL CHAR(4)", "NATIONAL CHAR VARYING(4)", + "NCHAR", + "NCHAR(4)", ] { dialects.verified_stmt(&format!("CREATE TABLE t (c {data_type})")); dialects.verified_expr(&format!("CAST('ab' AS {data_type})"));