| 61 | } |
| 62 | |
| 63 | void registerDataTypeString(DataTypeFactory & factory) |
| 64 | { |
| 65 | factory.registerDataType("String", create, DataTypeFactory::Case::Sensitive, |
| 66 | Documentation{ |
| 67 | .description = R"DOCS_MD( |
| 68 | Strings of an arbitrary length. The length is not limited. The value can contain an arbitrary set of bytes, including null bytes. |
| 69 | The String type replaces the types VARCHAR, BLOB, CLOB, and others from other DBMSs. |
| 70 | |
| 71 | When creating tables, numeric parameters for string fields can be set (e.g. `VARCHAR(255)`), but ClickHouse ignores them. |
| 72 | |
| 73 | Aliases: |
| 74 | |
| 75 | - `String` — `LONGTEXT`, `MEDIUMTEXT`, `TINYTEXT`, `TEXT`, `LONGBLOB`, `MEDIUMBLOB`, `TINYBLOB`, `BLOB`, `VARCHAR`, `CHAR`, `CHAR LARGE OBJECT`, `CHAR VARYING`, `CHARACTER LARGE OBJECT`, `CHARACTER VARYING`, `NCHAR LARGE OBJECT`, `NCHAR VARYING`, `NATIONAL CHARACTER LARGE OBJECT`, `NATIONAL CHARACTER VARYING`, `NATIONAL CHAR VARYING`, `NATIONAL CHARACTER`, `NATIONAL CHAR`, `BINARY LARGE OBJECT`, `BINARY VARYING`, |
| 76 | |
| 77 | ## Encodings {#encodings} |
| 78 | |
| 79 | ClickHouse does not have the concept of encodings. Strings can contain an arbitrary set of bytes, which are stored and output as-is. |
| 80 | If you need to store texts, we recommend using UTF-8 encoding. At the very least, if your terminal uses UTF-8 (as recommended), you can read and write your values without making conversions. |
| 81 | Similarly, certain functions for working with strings have separate variations that work under the assumption that the string contains a set of bytes representing a UTF-8 encoded text. |
| 82 | For example, the [length](/sql-reference/functions/array-functions#length) function calculates the string length in bytes, while the [lengthUTF8](../functions/string-functions.md#lengthUTF8) function calculates the string length in Unicode code points, assuming that the value is UTF-8 encoded. |
| 83 | )DOCS_MD", |
| 84 | .syntax = "String", |
| 85 | .related = {"FixedString"}, |
| 86 | }); |
| 87 | |
| 88 | /// These synonims are added for compatibility. |
| 89 | |
| 90 | factory.registerAlias("CHAR", "String", DataTypeFactory::Case::Insensitive); |
| 91 | factory.registerAlias("NCHAR", "String", DataTypeFactory::Case::Insensitive); |
| 92 | factory.registerAlias("CHARACTER", "String", DataTypeFactory::Case::Insensitive); |
| 93 | factory.registerAlias("VARCHAR", "String", DataTypeFactory::Case::Insensitive); |
| 94 | factory.registerAlias("NVARCHAR", "String", DataTypeFactory::Case::Insensitive); |
| 95 | factory.registerAlias("VARCHAR2", "String", DataTypeFactory::Case::Insensitive); /// Oracle |
| 96 | factory.registerAlias("TEXT", "String", DataTypeFactory::Case::Insensitive); |
| 97 | factory.registerAlias("TINYTEXT", "String", DataTypeFactory::Case::Insensitive); |
| 98 | factory.registerAlias("MEDIUMTEXT", "String", DataTypeFactory::Case::Insensitive); |
| 99 | factory.registerAlias("LONGTEXT", "String", DataTypeFactory::Case::Insensitive); |
| 100 | factory.registerAlias("BLOB", "String", DataTypeFactory::Case::Insensitive); |
| 101 | factory.registerAlias("CLOB", "String", DataTypeFactory::Case::Insensitive); |
| 102 | factory.registerAlias("TINYBLOB", "String", DataTypeFactory::Case::Insensitive); |
| 103 | factory.registerAlias("MEDIUMBLOB", "String", DataTypeFactory::Case::Insensitive); |
| 104 | factory.registerAlias("LONGBLOB", "String", DataTypeFactory::Case::Insensitive); |
| 105 | factory.registerAlias("BYTEA", "String", DataTypeFactory::Case::Insensitive); /// PostgreSQL |
| 106 | |
| 107 | factory.registerAlias("CHARACTER LARGE OBJECT", "String", DataTypeFactory::Case::Insensitive); |
| 108 | factory.registerAlias("CHARACTER VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 109 | factory.registerAlias("CHAR LARGE OBJECT", "String", DataTypeFactory::Case::Insensitive); |
| 110 | factory.registerAlias("CHAR VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 111 | factory.registerAlias("NATIONAL CHAR", "String", DataTypeFactory::Case::Insensitive); |
| 112 | factory.registerAlias("NATIONAL CHARACTER", "String", DataTypeFactory::Case::Insensitive); |
| 113 | factory.registerAlias("NATIONAL CHARACTER LARGE OBJECT", "String", DataTypeFactory::Case::Insensitive); |
| 114 | factory.registerAlias("NATIONAL CHARACTER VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 115 | factory.registerAlias("NATIONAL CHAR VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 116 | factory.registerAlias("NCHAR VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 117 | factory.registerAlias("NCHAR LARGE OBJECT", "String", DataTypeFactory::Case::Insensitive); |
| 118 | factory.registerAlias("BINARY LARGE OBJECT", "String", DataTypeFactory::Case::Insensitive); |
| 119 | factory.registerAlias("BINARY VARYING", "String", DataTypeFactory::Case::Insensitive); |
| 120 | factory.registerAlias("VARBINARY", "String", DataTypeFactory::Case::Insensitive); |
no test coverage detected