28. Error codes
Every error that MIRAJ returns carries three pieces of information: a numeric code, a 5-character SQLSTATE and a message in the server language. This page lists the numeric codes that the engine produces, with their SQLSTATE and the exact French wording of the message, together with an explanation of the typical cause and, where useful, a suggested fix.
1. How to read a MIRAJ error#
An error returned by the engine or by the network server looks like this:
ERROR 1146 (42S02): La table 'ventes.clients' n'existe pas(This is how the miraj-cli console presents it in French; other clients write ERROR 1146 (42S02): ….)
- 1146 is the numeric code, specific to MIRAJ (taken from a well-established historical numbering in the SQL ecosystem, so as to remain familiar to existing tools);
- 42S02 is the SQLSTATE, an engine-independent standard (see §3);
- the text is the message, produced from a template in which the
%splaceholders have been replaced by the values of the error (table name, column name, etc.).
A warning (level Warning or Note) also carries a code from this page; the statement succeeds and SHOW WARNINGS lists it:
SELECT CAST('abc' AS SIGNED);
SHOW WARNINGS;+-----------------------+
| CAST('abc' AS SIGNED) |
+-----------------------+
| 0 |
+-----------------------+
+---------+------+------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------+
| Warning | 1292 | Truncated incorrect INTEGER value: 'abc' |
+---------+------+------------------------------------------+2. Error code reference table#
The French message is given word for word (%s = value substituted at runtime: table name, column name, etc.).
2.1 Syntax and parsing errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1064 | 42000 | Erreur de syntaxe SQL ; vérifiez le manuel de votre version de Miraj pour la syntaxe correcte près de '%s' à la ligne %s | Invalid SQL construct, misplaced keyword, unsupported syntax, or query nesting depth exceeded (beyond 1,000 levels) | Re-read the statement around the text quoted after "near"; check parentheses and commas |
| 1065 | 42000 | La requête est vide | Empty statement sent to the server | Check that the client is not sending an empty string |
| 7620 | 54001 | Instruction trop complexe : plus de %s éléments de syntaxe dans un même script (découpez-le en plusieurs instructions) | Text sent in one block of more than 2 million syntax elements or 8 million tokens: INSERT … VALUES or IN list with several million values, large script sent all at once (chapter 16, §16.4.5) | Split into several statements, or send the script statement by statement (miraj-cli connected to a server, miraj-dump restore) |
| 1139 | 42000 | Erreur « %s » dans l'expression régulière | Invalid pattern passed to REGEXP, REGEXP_REPLACE, etc. | Fix the pattern; the details of the regular expression engine's error are included in %s |
| 1210 | HY000 | Arguments incorrects pour %s | Argument(s) of a function or statement incompatible with its signature | Check the number and type of the arguments |
| 1221 | HY000 | Utilisation incorrecte de %s et %s | Combination of two incompatible constructs in the same statement | Separate the two constructs or consult the documentation of the statement concerned |
| 1235 | 42000 | Cette version de Miraj ne prend pas encore en charge '%s' | Syntactically valid construct but not implemented in this version | Use an equivalent supported construct |
| 1305 | 42000 | %s %s n'existe pas | Call to an unknown function (FUNCTION f n'existe pas); ROLLUP and CUBE are not functions: they can only be written in a GROUP BY | Fix the name; check the list in chapters 10 and 7 |
| 1582 | 42000 | Nombre de paramètres incorrect dans l'appel de la fonction native '%s' | Number of arguments outside the function's arity (GROUPING() with no argument, COLUMN_GET with two arguments...) | Check the signature in chapter 10 |
| 4009 | HY000 | La spécification de fenêtre nommée '%s' n'est pas définie | OVER w or OVER (w ...) with no window w in the WINDOW clause of the same block, or defined after the one that refers to it | Define the window in the WINDOW clause of the block, before referring to it (chapter 9, §9.18) |
| 4010 | HY000 | Plusieurs spécifications de fenêtre portent le même nom '%s' | Two windows with the same name in a WINDOW clause (case is ignored) | Give each window a distinct name |
| 4011 | HY000 | Une spécification de fenêtre qui en reprend une autre ('%s') ne peut pas contenir de liste de partition | OVER (w PARTITION BY ...) | Write the PARTITION BY in the named window |
| 4012 | HY000 | La spécification de fenêtre reprise '%s' contient déjà une liste de tri | OVER (w ORDER BY ...) while w already has an ORDER BY | Remove one of the two ORDER BY |
| 4013 | HY000 | La spécification de fenêtre reprise '%s' ne peut pas contenir de cadre | OVER (w ...) while w has a ROWS or RANGE frame | Write OVER w, or put the frame in the window that refers to w |
| 4019 | HY000 | Un cadre de type RANGE demande une clause ORDER BY à une seule clé de tri | RANGE frame with an offset (n PRECEDING, INTERVAL n unit FOLLOWING...) in a window with no ORDER BY or with several sort keys | Sort the window on a single key, or use ROWS |
| 4021 | HY000 | Un cadre de type RANGE demande un type numérique | Numeric offset of a RANGE frame on a sort key that is not numeric | On a date, write INTERVAL n unit PRECEDING; otherwise sort on a numeric key |
| 4099 | HY000 | Le constructeur de table utilisé a un nombre de valeurs différent d'une ligne à l'autre | VALUES (1, 2), (3) used as a query: the rows do not all have the same number of values | Give every row the same number of values |
| 4100 | HY000 | La référence de colonne '%s' ne peut pas être utilisée dans un constructeur de table | Column cited in a row of a VALUES (...) used as a query, even a column of an enclosing query | Write a subquery in the row, or a SELECT instead of the VALUES |
| 4180 | HY000 | FETCH ... WITH TIES exige la présence d'une clause ORDER BY | FETCH FIRST n ROWS WITH TIES in a block with no ORDER BY: ties are only defined by a sort order | Add the ORDER BY, or write ONLY |
| 1111 | HY000 | Utilisation invalide d'une fonction d'agrégation | Aggregate, or GROUPING(), in a WHERE or without GROUP BY | Move the condition to HAVING; GROUPING() is only used with GROUP BY (§9.17) |
| 1222 | 21000 | Les SELECT utilisés n'ont pas le même nombre de colonnes | Members of a UNION, INTERSECT or EXCEPT that do not have the same number of columns (SELECT 1 UNION SELECT 1, 2) | Give every member the same column list |
| 1241 | 21000 | L'opérande doit contenir %s colonne(s) | Row constructor compared with a value or a subquery of a different width ((1,2) = 1, (id, nom) = (SELECT id …)) | Compare lists of the same width |
| 1176 | 42000 | La clé '%s' n'existe pas dans la table '%s' | USE INDEX, FORCE INDEX or IGNORE INDEX naming an index unknown to the table | Check the name with SHOW INDEX FROM table |
| 1191 | HY000 | Aucun index FULLTEXT ne correspond à la liste de colonnes | MATCH (…) AGAINST (…) on columns that no FULLTEXT index covers | Create the FULLTEXT index on exactly those columns |
| 1243 | HY000 | Identifiant de requête préparée inconnu (%s) donné à %s | EXECUTE or DEALLOCATE PREPARE of a name that was not prepared in the session | PREPARE name FROM '…' first |
| 3636 | HY000 | Requête récursive interrompue après %s itérations. Augmentez @@cte_max_recursion_depth | Recursive table expression (WITH RECURSIVE) with no stop condition, or deeper than cte_max_recursion_depth (1000 by default) | Add the stop condition, or raise cte_max_recursion_depth |
| 3580 | HY000 | L'argument n°%s de la fonction GROUPING ne figure pas dans GROUP BY | GROUPING(p) where p is not an expression of the GROUP BY | Pass to GROUPING the GROUP BY expressions as written |
| 4177 | HY000 | Toute fonction table doit avoir un alias. | FROM JSON_TABLE(...) without an alias | Add [AS] alias |
| 3668 | HY000 | Les références latérales de '%s' exigent une jointure INNER ou LEFT | JSON_TABLE whose document cites a table placed earlier, joined by RIGHT JOIN | Use the comma, JOIN or LEFT JOIN |
| 1115 | 42000 | Jeu de caractères inconnu : '%s' | Unknown character set in SET NAMES, SET CHARACTER SET or SET character_set_client / _results / _connection / _server / _database (SET NAMES klingon) | utf8mb4 (or a recognized set, or DEFAULT) |
| 1253 | 42000 | La collation '%s' n'est pas valide pour le jeu de caractères '%s' | Collation of another character set (CHARACTER SET latin1 COLLATE utf8mb4_unicode_ci, 'a' COLLATE utf8_bin on a utf8mb4 text: La collation 'utf8mb3_bin' n'est pas valide pour le jeu de caractères 'utf8mb4') | Use a utf8mb4_… collation (see the Collations chapter) |
| 1267, 1270, 1271 | HY000 | Mélange illégal de collations | Never raised by Miraj: a mix with no winner is compared under the widest collation (chapter Collations, § 13.3) | — |
| 1273 | HY000 | Collation inconnue : '%s' | Unsupported collation name (utf8mb4_0900_ai_ci, *_as_cs, linguistic) in a column definition, a table definition or an expression; in SET NAMES … COLLATE and SET collation_connection, collation_server or collation_database, only a name that belongs to no recognized set (klingon_ci) is refused, the others being accepted under the general collation (warning 1273 for SET collation_connection) | utf8mb4_general_ci, utf8mb4_unicode_ci or utf8mb4_bin |
| 1302 | HY000 | Déclarations contradictoires : '%s' et '%s' | Column declared BINARY with a non-binary COLLATE | Keep one of the two |
| 1407 | 42000 | SQLSTATE incorrect : '%s' | SIGNAL/RESIGNAL SQLSTATE '...' in a routine with a value that is not a valid 5-character code | Use a compliant SQLSTATE (5 characters, class other than 00, 01, XA) |
2.2 Schema errors (databases, tables, columns, indexes)#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 29 | HY000 | Fichier '%s' introuvable (code : %s) | File expected by the engine missing from disk (table, journal...) | Check the path and access rights on the data folder |
| 1004 | HY000 | Impossible de créer le fichier '%s' (errno : %s) | Disk write impossible (permissions, disk full, invalid path) | Check disk space and permissions on the data folder |
| 1007 | HY000 | Impossible de créer la base '%s' ; elle existe déjà | CREATE DATABASE without IF NOT EXISTS on an existing database | Add IF NOT EXISTS or choose another name |
| 1008 | HY000 | Impossible de supprimer la base '%s' ; elle n'existe pas | DROP DATABASE without IF EXISTS on a missing database | Add IF EXISTS or check the name |
| 1044 | 42000 | Accès refusé pour l'utilisateur '%s'@'%s' à la base de données '%s' | Account without privilege on the database (checked at each USE and at the handshake) | Grant a database privilege with GRANT |
| 1045 | 28000 | Accès refusé pour l'utilisateur '%s'@'%s' (mot de passe utilisé : %s) | Invalid credentials at connection | Check the account and password |
| 1046 | 3D000 | Aucune base de données sélectionnée | Statement requiring a current database executed without USE | Run USE <database> before the statement, or qualify the objects |
| 1049 | 42000 | Base de données '%s' inconnue | USE or reference to a database that does not exist | Check the spelling or create the database |
| 1050 | 42S01 | La table '%s' existe déjà | CREATE TABLE without IF NOT EXISTS on a name already taken (table or view) | Add IF NOT EXISTS, or DROP / CREATE OR REPLACE |
| 1051 | 42S02 | Table '%s' inconnue | DROP TABLE of a missing table, without IF EXISTS (Table 'ventes.nope' inconnue) | Check the name and the current database |
| 1052 | 23000 | La colonne '%s' dans %s est ambiguë | Column present in several tables of the query without qualification | Qualify the column (table.column) |
| 1054 | 42S22 | Colonne '%s' inconnue dans '%s' | Misspelled column name or column that does not exist in the given context | Check DESCRIBE <table> or information_schema.COLUMNS |
| 1060 | 42S21 | Nom de colonne '%s' en double | Two columns with the same name in one table definition or a CREATE TABLE … SELECT | Rename one of the columns or give it an alias |
| 1061 | 42000 | Nom de clé '%s' en double | Two indexes/keys with the same name on the table | Choose another index name |
| 1066 | 42000 | Table ou alias non unique : '%s' | Same table name or alias used twice in a query | Give each occurrence a distinct alias |
| 1102 | 42000 | Nom de base de données incorrect : '%s' | Name outside the rules (length, allowed characters) | Use ASCII characters, digits, _, $ and space (never in last position), 64 bytes at most |
| 1103 | 42000 | Nom de table incorrect : '%s' | Same rule as 1102, applied to the table name | Same |
| 1109 | 42S02 | Table '%s' inconnue dans %s | Referenced table missing in the specified context (%s: clause, join...) | Check the table name in that clause |
| 1146 | 42S02 | La table '%s.%s' n'existe pas | Table missing from the indicated database | Check the name and the database, or create it |
| 1166 | 42000 | Nom de colonne incorrect : '%s' | Column name outside the identifier rules | Rename according to the rules |
| 1170 | 42000 | La colonne BLOB/TEXT '%s' est utilisée dans une clé sans longueur de clé | Whole BLOB column or geometry column (POINT…) in a primary key, geometry column in an ordinary index | Use a bounded-length column, a UNIQUE key (which accepts a whole BLOB), or a SPATIAL index for a geometry |
| 1280 | 42000 | Nom d'index incorrect : '%s' | Invalid or too long index name | Shorten or fix the name |
| 1031 | HY000 | Le moteur de stockage %s de la table %s n'a pas cette option | Feature not supported by a disk table (ENGINE = Aria, MyISAM, DISK): vector index, partitioning, replication on a secondary | Keep the table in memory (ENGINE = InnoDB or no ENGINE clause) |
| 1214 | HY000 | Le type de table utilisé ne prend pas en charge les index FULLTEXT | FULLTEXT or trigram index on a disk table (including a dump using ENGINE=MyISAM with a FULLTEXT index) | Remove the ENGINE clause or replace it with ENGINE = InnoDB |
| 1266 | HY000 | Moteur de stockage %s utilisé pour la table '%s' | Warning: ENGINE = Aria / MyISAM / DISK on a temporary table, which stays in memory | No action: the temporary table is created in memory |
| 1286 | 42000 | Moteur de stockage '%s' inconnu | SET default_storage_engine with an unknown engine name | Use MIRAJ, InnoDB, MEMORY, Aria, MyISAM or DISK |
| 3162 | HY000 | Le compte %s n'existe pas. | Warning from DROP USER IF EXISTS, ALTER USER IF EXISTS or DROP ROLE IF EXISTS on a missing account or role (the warning text is Authorization ID 'zz'@'%' does not exist.) | None: the account is skipped, the others are processed |
| 3163 | HY000 | Le compte %s existe déjà. | Warning from CREATE USER IF NOT EXISTS or CREATE ROLE IF NOT EXISTS on an existing account or role | None; without IF NOT EXISTS, the error is 1396 (§2.4) |
| 1063 | 42000 | Spécification de colonne incorrecte pour la colonne '%s' | Attribute incompatible with the column type, for example PERIOD FOR columns that are not dates (chapter 12) | Fix the type or the attribute |
| 1067 | 42000 | Valeur par défaut invalide pour '%s' | DEFAULT that cannot be converted to the column type (a INT DEFAULT 'abc') | Give a default value of the right type |
| 1072 | 42000 | La colonne de clé '%s' n'existe pas dans la table | Index or key that names a column missing from the table (KEY (b)) | Fix the column name |
| 1075 | 42000 | Définition de table incorrecte ; il ne peut y avoir qu'une seule colonne auto-incrémentée et elle doit être une clé | Two AUTO_INCREMENT columns, or an AUTO_INCREMENT column that is not the first column of any index | Keep a single AUTO_INCREMENT column and index it (PRIMARY KEY) |
| 1091 | 42000 | Impossible de supprimer %s %s ; vérifiez qu'il existe | ALTER TABLE … DROP COLUMN, DROP INDEX, DROP CONSTRAINT or DROP INDEX … ON t of a missing element | Check the name; with IF EXISTS, a simple note 1091 |
| 1110 | 42000 | Colonne '%s' indiquée deux fois | Same column used for the start and the end of a PERIOD FOR | Give two distinct columns |
| 1505 | HY000 | Gestion de partitions impossible sur une table non partitionnée | ALTER TABLE … DROP / TRUNCATE / … PARTITION on a table that is not partitioned | Check the target table |
| 1526 | HY000 | Aucune partition de la table ne reçoit la valeur %s | Row of a PARTITION BY RANGE or LIST table that no partition covers | Add a partition (VALUES LESS THAN MAXVALUE, DEFAULT) |
| 1826 | HY000 | Nom de contrainte %s en double '%s' | Two constraints with the same name in a table (CONSTRAINT k CHECK … twice) | Rename one of the constraints |
| 1829 | HY000 | Impossible de supprimer la colonne '%s' : elle est nécessaire à la contrainte de clé étrangère '%s' de la table '%s' | ALTER TABLE parent DROP COLUMN of a column referenced by a foreign key of another table | Drop the foreign key of the child table first |
| 3730 | HY000 | Impossible de supprimer la table '%s' référencée par la contrainte de clé étrangère '%s' de la table '%s'. | DROP TABLE of a parent table that is still referenced | Drop the child table or its foreign key first (or SET foreign_key_checks = 0) |
| 3821 | HY000 | La contrainte de vérification '%s' est introuvable dans la table. | ALTER TABLE … DROP CHECK of a missing constraint | Check the name in SHOW CREATE TABLE |
| 4092 | 42S02 | VIEW inconnue : '%s' | DROP VIEW of a missing view, without IF EXISTS | DROP VIEW IF EXISTS |
2.3 Constraint and data errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1048 | 23000 | La colonne '%s' ne peut pas être NULL | INSERT/UPDATE supplying NULL to a NOT NULL column with no implicit value available | Provide a value, or reconsider the NOT NULL constraint |
| 1062 | 23000 | Doublon '%s' pour la clé '%s' | Violation of a primary key or UNIQUE constraint | Use INSERT IGNORE, REPLACE or ON DUPLICATE KEY UPDATE if the duplicate is expected |
| 1068 | 42000 | Plusieurs clés primaires définies | Two PRIMARY KEY clauses in the same table definition | Keep only one |
| 1093 | HY000 | La table '%s' est indiquée deux fois, comme cible de '%s' et comme source séparée de données | Subquery of the RETURNING clause of an INSERT, REPLACE or DELETE that reads the table being written (§8.9) | Read the table with a separate statement, after the write |
| 1136 | 21S01 | Le nombre de colonnes ne correspond pas au nombre de valeurs à la ligne %s | INSERT ... VALUES (...) with a number of values different from the number of columns | Make the two lists match |
| 1138 | 22004 | Utilisation incorrecte de la valeur NULL | NULL used where it is not allowed (e.g. value of a constraint) | Remove the NULL or reconsider the expression |
| 1172 | 42000 | Le résultat compte plus d'une ligne | Scalar subquery or SELECT ... INTO receiving several rows | Add a condition that reduces the result to one row, or use LIMIT 1 knowingly |
| 1215 | HY000 | Impossible d'ajouter la contrainte de clé étrangère | Invalid foreign key definition (incompatible types, missing index on the parent side...) | Check the column types and the existence of an index on the referenced column |
| 1242 | 21000 | La sous-requête renvoie plus d'une ligne | Subquery used in a scalar context (=, SELECT ... INTO) that returns several rows | Restrict the subquery or use IN / EXISTS |
| 1264 | 22003 | Valeur hors limites pour la colonne '%s' à la ligne %s | Numeric value outside the range of the declared type | Use a wider type or fix the value |
| 1292 | 22007 | Valeur %s incorrecte tronquée : '%s' | Failed conversion with truncation (e.g. non-numeric string converted to a number); also Incorrect vector value: bytes or text that do not form a vector of the VECTOR(n) column (chapter 6) | Fix the source value or its format |
| 4078 | HY000 | Cannot cast '%s' as 'vector' in assignment of %s | Number or date assigned to a VECTOR(n) column (INSERT … VALUES (1, 12), UPDATE … SET v = 12), refused at preparation, even if no row is written; warning outside strict mode | Write the vector as text '[…]', with VEC_FromText, or as bytes |
| 1365 | 22012 | Division par zéro | Division or modulo by 0 in a write (INSERT, UPDATE) when sql_mode contains ERROR_FOR_DIVISION_BY_ZERO and a strict mode; with ERROR_FOR_DIVISION_BY_ZERO alone, or in a SELECT, warning and NULL result; without this mode, NULL with no warning | Guard the expression (CASE WHEN ... != 0) or accept the NULL result depending on the SQL mode |
| 1366 | 22007 | Valeur %s incorrecte : '%s' pour la colonne %s à la ligne %s | Value incompatible with the column type on write, in strict mode ('z' in an INT column) | Fix the value or the column type |
| 1406 | 22001 | Données trop longues pour la colonne '%s' à la ligne %s | String longer than the declared column length | Enlarge the column or truncate the value upstream |
| 1451 | 23000 | Impossible de supprimer ou de modifier une ligne parente : une contrainte de clé étrangère échoue (%s) | Deletion/modification of a row still referenced by a child table | Delete/modify the child rows first, or reconsider the ON DELETE/ON UPDATE action |
| 1452 | 23000 | Impossible d'ajouter ou de modifier une ligne enfant : une contrainte de clé étrangère échoue (%s) | Insertion/modification referencing a nonexistent parent row | Insert the parent row first, or check the foreign key value |
| 4082 | HY000 | La variable de ligne '%s' n'a pas de champ '%s' | row.column field missing from the row of a FOR row IN … loop | Fix the name, or give the column an alias in the loop query |
| 4084 | HY000 | La séquence '%s.%s' est épuisée | NEXTVAL beyond MAXVALUE (or MINVALUE) of a sequence without CYCLE | ALTER SEQUENCE … RESTART, widen the bounds or add CYCLE |
| 4085 | HY000 | La séquence '%s.%s' a une valeur hors limites pour ses options | MINVALUE ≥ MAXVALUE, START outside the bounds, negative CACHE... | Fix the options |
| 4089 | 42S02 | '%s.%s' n'est pas une SEQUENCE | SHOW CREATE SEQUENCE, ALTER SEQUENCE, NEXTVAL / LASTVAL / SETVAL or DEFAULT NEXTVAL(…) on a table or a view, checked when the statement is opened even if they are never evaluated | Target a sequence |
| 4090 | 42S02 | '%s.%s' n'est pas une SEQUENCE | DROP SEQUENCE of a table (note with IF EXISTS) | DROP TABLE |
| 1965 | 42S02 | '%s.%s' est une vue | DROP SEQUENCE of a view (note with IF EXISTS) | DROP VIEW |
| 4091 | 42S02 | SEQUENCE inconnue : '%s' | DROP SEQUENCE or ALTER SEQUENCE of a missing sequence (note with IF EXISTS); call of an unknown sequence that comes before any table of the statement (SELECT NEXTVAL(s)) — after a table, or in a function or a trigger: 1146 | DROP SEQUENCE IF EXISTS, check the name |
| 4093 | HY000 | INSERT incorrect dans une SEQUENCE. Seul un INSERT sur une seule table est possible dans un objet séquence (…). Pour modifier la SEQUENCE, utilisez ALTER SEQUENCE. | INSERT, UPDATE or DELETE targeting a sequence | ALTER SEQUENCE or SETVAL |
| 1256 | HY000 | Taille des données décompressées trop grande ; la taille maximale est %s (la longueur des données décompressées est probablement corrompue) | Warning from UNCOMPRESS (NULL result): the length announced by the header exceeds max_allowed_packet | Check that the value really comes from COMPRESS and was not truncated or converted to text |
| 1258 | HY000 | ZLIB : pas assez de place dans le tampon de sortie (la longueur des données décompressées est probablement corrompue) | Warning from UNCOMPRESS (NULL result): the stream returns more bytes than the announced length | Same |
| 1259 | HY000 | ZLIB : données d'entrée corrompues | Warning from UNCOMPRESS or UNCOMPRESSED_LENGTH (NULL result): value of four bytes or fewer, corrupted or truncated zlib stream | Same; store compressed values in a VARBINARY or BLOB column |
| 1300 | HY000 | Chaîne de caractères %s invalide : '%s' | Warning from CHR(code) (NULL result): the bytes of code do not form a character of the set | Give the character code in its encoding (CHR(50089) for é), or use CHAR(code) |
| 1298 | HY000 | Fuseau horaire inconnu ou incorrect : '%s' | SET time_zone or SET GLOBAL time_zone with a name absent from the IANA database, or an offset outside -13:59 to +14:00; CONVERT_TZ returns NULL in this case, without an error | Write SYSTEM, a ±HH:MM offset or an IANA name (Europe/Paris) |
| 4176 | HY000 | Impossible de donner une valeur à la colonne '%s' de JSON_TABLE '%s'. | JSON_TABLE column declared ERROR ON EMPTY whose path designates nothing | Write NULL ON EMPTY or DEFAULT '...' ON EMPTY |
| 4178 | HY000 | Impossible de placer un tableau ou un objet dans la colonne scalaire '%s' de JSON_TABLE '%s'. | Scalar JSON_TABLE ... ERROR ON ERROR column whose path designates an array or an object | Target a scalar value, or declare the column JSON |
| 4179 | HY000 | Impossible de placer plusieurs valeurs désignées par le chemin dans la colonne '%s' de JSON_TABLE '%s'. | JSON_TABLE ... ERROR ON ERROR column whose path (wildcard, range) designates several values | Designate a single value, or use NESTED PATH |
| 4146 | HY000 | %s doit être de type %s pour la table versionnée %s | Period column of a WITH SYSTEM VERSIONING table that is neither TIMESTAMP nor DATETIME (chapter 12) | Fix the type |
| 4119 | HY000 | Interdit sur la table versionnée %s.%s. Changez @@system_versioning_alter_history pour poursuivre l'ALTER. | ALTER TABLE that changes the columns of a versioned table | SET system_versioning_alter_history = KEEP |
| 4124 | HY000 | La table %s n'est pas versionnée par le système | FOR SYSTEM_TIME, DELETE HISTORY, PARTITION BY SYSTEM_TIME or DROP SYSTEM VERSIONING on an ordinary table | ALTER TABLE ... ADD SYSTEM VERSIONING |
| 4127 | HY000 | Paramètres invalides pour la table partitionnée %s : valeur incorrecte pour '%s' | INTERVAL / LIMIT of zero, STARTS that is not a point in time | Fix the PARTITION BY SYSTEM_TIME clause |
| 4128 | HY000 | Partitions incorrectes pour %s : au moins une partition HISTORY et exactement une dernière partition CURRENT sont requises | No HISTORY partition, CURRENT missing, duplicated or not last; removal of CURRENT or of the last HISTORY | Keep at least one HISTORY and one CURRENT last |
| 4131 | HY000 | Impossible de faire DROP SYSTEM VERSIONING sur la table %s partitionnée BY SYSTEM_TIME | DROP SYSTEM VERSIONING | ALTER TABLE ... REMOVE PARTITIONING first |
| 4135 | HY000 | La table %s est déjà versionnée par le système | ADD SYSTEM VERSIONING on a table that is already versioned | Nothing to do |
| 4152 à 4158 | HY000 | Application periods | temporary table, different types, two periods, generated or system column, unknown period, period column in SET, DROP CONSTRAINT of the period | See chapter 12, §12.6 and §12.7 |
| 4170, 4171 | HY000 | WITHOUT OVERLAPS key | period column named in the key, non-unique index | See chapter 12, §12.8 |
| 4037 / 4038 | HY000 | Fin inattendue du texte JSON dans l'argument %s de la fonction '%s' / Erreur de syntaxe dans le texte JSON de l'argument %s de la fonction '%s' à la position %s | Document passed to a JSON function that is not valid JSON: warning and NULL result (error for JSON_TABLE) | Fix the document; JSON_VALID makes it possible to skip invalid rows |
| 4041 / 4042 | HY000 | Fin inattendue du chemin JSON dans l'argument %s de la fonction '%s' / Erreur de syntaxe dans le chemin JSON de l'argument %s de la fonction '%s' à la position %s | Badly written JSON path ('$.', 'a', '$[1'...): warning and NULL result (error for JSON_TABLE) | Start with $ and follow the path syntax (chapter 9.10) |
| 4036 | HY000 | Caractère interdit en JSON dans l'argument %s de la fonction '%s' à la position %s | Unescaped control character (tab, line feed...) in a string of a document: warning and NULL result (error for JSON_TABLE) | Escape the character (\t, \n) |
| 4044 | HY000 | Jokers et plages interdits dans le chemin JSON de l'argument %s de la fonction '%s' | Wildcard or range in the path of a modification function, JSON_KEYS, JSON_LENGTH or JSON_CONTAINS: warning and NULL result | Designate a single value |
| 4051 | HY000 | Le chemin '$' est interdit dans l'argument %s de la fonction '%s'. | JSON_REMOVE(doc, '$'): warning and NULL result | Designate a member or an element |
| 4193 | HY000 | Valeur invalide pour le mot-clé %s | JSON_SCHEMA_VALID whose schema gives type an unknown value (integer included) | Write number, string, object, array, boolean or null |
| 4046 | HY000 | L'argument %s de la fonction '%s' doit valoir "one" ou "all". | Mode of JSON_CONTAINS_PATH / JSON_SEARCH badly written: warning and NULL result | Write 'one' or 'all' |
| 3156 | 22018 | Valeur JSON invalide pour une conversion en %s depuis la colonne %s à la ligne %s | JSON_VALUE ... ERROR ON ERROR on a value that cannot be converted or is not scalar | Review the RETURNING type, or choose NULL / DEFAULT ON ERROR |
| 3157 | 22032 | Le document JSON dépasse la profondeur maximale. | More than 100 nesting levels | Flatten the document |
| 3158 | 22032 | Un document JSON ne peut pas avoir de membre dont le nom est NULL. | NULL key in JSON_OBJECT or JSON_OBJECTAGG | Skip the rows whose key is NULL |
| 3165 | 42000 | Le chemin ne désigne pas une case de tableau. | Path of JSON_ARRAY_INSERT that does not end with [n] | End the path with an array element |
| 3966 | 22035 | Aucune valeur trouvée par '%s' au chemin indiqué. | JSON_VALUE ... ERROR ON EMPTY on a path that designates nothing | Choose NULL / DEFAULT ON EMPTY, or check the path |
| 4025 | 23000 | La CONTRAINTE %s a échoué pour %s.%s | Row rejected by a CHECK constraint | Fix the value to satisfy the constraint, or reconsider the constraint |
| 1364 | HY000 | Le champ '%s' n'a pas de valeur par défaut | INSERT that gives no value to a NOT NULL column without DEFAULT, in strict mode | Provide the value, or give the column a DEFAULT |
| 1369 | 44000 | Échec de CHECK OPTION %s.%s | INSERT or UPDATE through a WITH CHECK OPTION view of a row that the view would not show | Write a row that satisfies the WHERE of the view |
| 1690 | 22003 | La valeur %s est hors limites dans '%s' | Integer computation that exceeds its type (9223372036854775807 + 1: La valeur BIGINT est hors limites dans '9223372036854775807 + 1') | Convert to DECIMAL before the computation, or reduce the values |
| 1701 | 42000 | Impossible de vider une table référencée par une contrainte de clé étrangère (%s) | TRUNCATE TABLE of a parent table | DELETE FROM, or drop the foreign key first |
| 1265 | 01000 | Données tronquées pour la colonne '%s' à la ligne %s | Warning outside strict mode: string that is too long shortened, value adjusted to the column (in strict mode: 1406 or 1366) | Check the data; SHOW WARNINGS gives the column and the row |
| 1441 | 22008 | Fonction de date : dépassement du champ %s | Warning from a date computation outside the allowed range (DATE_ADD('9999-12-31', INTERVAL 1 DAY)): NULL result | Check the bounds of the computation |
2.4 Privilege errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1044 | 42000 | Accès refusé pour l'utilisateur '%s'@'%s' à la base de données '%s' | Account without privilege on the database (checked at each USE and at the handshake) | Grant a database privilege with GRANT |
| 1142 | 42000 | Commande %s refusée à l'utilisateur '%s'@'%s' pour la table %s.%s | Table-level check, even before name resolution | Grant the required table privilege (SELECT, INSERT...) |
| 1143 | 42000 | Commande %s refusée à l'utilisateur '%s'@'%s' pour la colonne '%s' de la table '%s' | The account has the privilege only on some columns of the table, not on the one the statement reads or writes (chapter 15, column privileges) | Grant the privilege on the column (GRANT SELECT (col) ON database.table) or on the table |
| 1144 | 42000 | Commande GRANT/REVOKE invalide ; consultez le manuel pour savoir quels privilèges s'appliquent à ce niveau | GRANT/REVOKE of a privilege at a level where it makes no sense (e.g. table privilege at the global level) | Use the level appropriate to the privilege |
| 1141 | 42000 | Aucun droit de ce type n'est défini pour l'utilisateur '%s' sur l'hôte '%s' | Global-level REVOKE of a privilege the account does not have | Check SHOW GRANTS FOR account |
| 1396 | HY000 | L'opération %s a échoué pour %s | CREATE USER or CREATE ROLE of an account that already exists, DROP USER, DROP ROLE or ALTER USER of a missing account; no account of the list is processed | IF NOT EXISTS / IF EXISTS (warnings 3163 / 3162) |
| 1410 | 42000 | Vous n'êtes pas autorisé à créer un compte avec GRANT | GRANT … TO an account that does not exist | CREATE USER first |
| 3118 | HY000 | Accès refusé pour l'utilisateur '%s'@'%s'. Le compte est verrouillé. | Connection to an ACCOUNT LOCK account | ALTER USER … ACCOUNT UNLOCK |
| 1040 | 08004 | Trop de connexions | max_connections connections already open: error packet sent in place of the handshake | Close unneeded connections or raise --max-connections / SET GLOBAL max_connections |
| 1129 | HY000 | L'hôte '%s' est bloqué après de trop nombreux échecs de connexion ; débloquez-le par 'FLUSH HOSTS' | max_connect_errors consecutive authentication failures from this address (15-minute block) | Fix the password of the faulty client, then FLUSH HOSTS from an open connection |
| 1043 | 08S01 | le client exige TLS ; le serveur n'a pas de certificat, voir --tls-cert | Client set to require encryption (driver in mandatory SSL mode) facing a server started without a certificate; the connection is then closed and the server journal carries the same message | Provide a certificate to the server (--tls-cert, --tls-key, chapter 16), or connect without requiring TLS |
| 3159 | 08004 | Les connexions non chiffrées sont refusées : le serveur exige TLS (--require-tls). | Unencrypted client facing a server with a certificate (TLS required as soon as a certificate is provided, except with --allow-plain-with-tls) | Enable TLS in the client |
| 1135 | HY000 | Impossible de créer un nouveau fil pour la connexion (%s) | The system refuses one more thread (memory, process limit) | Reduce max_connections or the load on the machine |
| 1227 | 42000 | Accès refusé ; il faut le privilège %s pour cette opération | Global-level check (SUPER, RELOAD, SHUTDOWN...) | Grant the global privilege named in the message |
| 1370 | 42000 | Commande %s refusée à l'utilisateur '%s'@'%s' pour la routine '%s' | Call of a procedure or a function without EXECUTE on it, on its database or at global level; GRANT on a routine without the GRANT option on it | GRANT EXECUTE ON PROCEDURE database.name TO … (or ON database.*) |
| 1403 | 42000 | Aucun droit de ce type n'est défini pour l'utilisateur '%s' sur l'hôte '%s' pour la routine '%s' | REVOKE … ON PROCEDURE | FUNCTION database.name of a privilege the account does not have on this routine | Check SHOW GRANTS FOR account; REVOKE IF EXISTS |
| 1524 | HY000 | Le greffon '%s' n'est pas chargé | IDENTIFIED WITH (or VIA) a plugin other than the native plugin (caching_sha2_password, auth_socket…) | Use IDENTIFIED BY 'password' or IDENTIFIED WITH miraj_password BY ... |
| 3523 | HY000 | Compte ou rôle inconnu %s@%s | SET ROLE or GRANT/REVOKE on a role that does not exist | Create the role with CREATE ROLE or fix the name |
| 3530 | HY000 | %s@%s n'est pas accordé à %s@%s | SET ROLE on a role not granted to the current account | Grant the role with GRANT <role> TO <account> |
| 3619 | HY000 | Niveau de privilège invalide pour %s | Dynamic privilege requested outside the global level | Grant at the global level (ON *.*) |
2.5 Transaction and concurrency errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1205 | HY000 | Délai d'attente du verrou dépassé ; réessayez la transaction | LOCK TABLES, SELECT ... FOR UPDATE NOWAIT/WAIT n, global read lock of another session (FLUSH TABLES WITH READ LOCK), or waiting for a table lock beyond lock_wait_timeout | Retry the transaction; consider shortening the duration of concurrent transactions |
| 1213 | 40001 | Interblocage détecté lors de la prise du verrou ; réessayez la transaction | Concurrency between transactions on the same rows (Miraj never waits: this code covers both a real deadlock and a simple MV-OCC version conflict after 3 internal attempts). Also returned by a COMMIT whose deferred update can no longer be applied (row deleted, WHERE condition that has become false, row held by another transaction, row read then modified by another transaction) | Retry the transaction on the client side; since Miraj has no blocking wait, this code appears more often than on a classic lock-based engine. A COMMIT may also return the code of a computation error discovered while recomputing a deferred update (1264, 1048, 4025…): the transaction is then rolled back entirely (chapter 14, §14.2) |
| 1397 | XAE04 | XAER_NOTA : XID inconnu | XA END / XA PREPARE with an XID other than that of the session's branch; XA COMMIT / XA ROLLBACK of an unknown XID or one held by another, still open session | Check the XID; a branch is taken over by another session only once prepared and its session closed |
| 1398 | XAE05 | XAER_INVAL : arguments invalides (ou commande non prise en charge) | XA START '', XA START … JOIN, XA END … SUSPEND, XA COMMIT … ONE PHASE of a prepared branch | Use a non-empty gtrid; commit a prepared branch without ONE PHASE |
| 1399 | XAE07 | XAER_RMFAIL : la commande ne peut pas être exécutée quand la transaction globale est dans l'état %s | Statement forbidden in the branch's state (chapter 14, §14.5): COMMIT or DDL in ACTIVE, reading a table in IDLE or PREPARED, XA PREPARE outside IDLE | Follow the sequence XA START → XA END → XA PREPARE → XA COMMIT |
| 1400 | XAE09 | XAER_OUTSIDE : du travail est fait hors de la transaction globale | XA START with an ordinary transaction open (or autocommit = 0 after a statement) or under LOCK TABLES; XA COMMIT / XA ROLLBACK of another branch in these conditions | Commit or roll back the open transaction, UNLOCK TABLES, or SET autocommit = 1 |
| 1402 | XA100 | XA_RBROLLBACK : la branche de transaction a été annulée | Takeover of a prepared branch that had written nothing: it was closed with its session | No action: the branch had no effect |
| 1440 | XAE08 | XAER_DUPID : le XID existe déjà | XA START of an XID held by another branch (still open, or prepared and detached) | Choose another XID, or resolve the existing branch (XA RECOVER) |
| 1614 | XA102 | XA_RBDEADLOCK : la branche de transaction a été annulée : un interblocage a été détecté | XA PREPARE whose read proof fails; branch whose transaction was rolled back by a conflict (XA END, XA COMMIT, statement on a table) | XA ROLLBACK if the branch still exists, then replay the transaction |
| 1791 | HY000 | Nom de format de XA RECOVER inconnu : '%s' | XA RECOVER FORMAT = '…' other than RAW or SQL | Use RAW (default) or SQL |
| 1792 | 25006 | Impossible d'exécuter l'instruction dans une transaction en lecture seule (READ ONLY). | Write attempted in a transaction opened as READ ONLY, or on a cluster secondary (see §2.6) | Open a read-write transaction, or write to the primary node |
| 1568 | 25001 | %s ne peut pas être fixé pendant une transaction en cours | SET TRANSACTION ISOLATION LEVEL …, SET TRANSACTION READ ONLY or SET @@transaction_read_only (without scope) in an open transaction | Put it before START TRANSACTION, or write SET SESSION … |
| 1927 | 70100 | La connexion a été arrêtée | Connection terminated by KILL or by the server | Reconnect |
| 1969 | 70100 | Requête interrompue : limite de durée de %s s dépassée | max_statement_time or the MAX_EXECUTION_TIME hint exceeded | Optimize the query or raise the limit if it is legitimate |
| 1095 | HY000 | Vous n'êtes pas propriétaire de la connexion %s | KILL of a connection that does not belong to the current account, without the required privilege | Use an account with the appropriate privilege, or target your own connection |
| 1094 | HY000 | Identifiant de connexion inconnu : %s | KILL with a connection identifier that no longer exists | Check the identifier with SHOW PROCESSLIST |
| 1099 | HY000 | La table '%s' est verrouillée en lecture (READ) et ne peut pas être modifiée | Write attempted on a table read-locked by LOCK TABLES | Lock for writing (WRITE) or wait for the lock to end |
| 1192 | HY000 | Impossible d'exécuter cette commande : la session tient des tables verrouillées ou une transaction active | FLUSH TABLES WITH READ LOCK (or FLUSH TABLES t … WITH READ LOCK | FOR EXPORT) under LOCK TABLES | UNLOCK TABLES first |
| 1223 | HY000 | Impossible d'exécuter la requête : la session tient un verrou de lecture incompatible | Write (DML, DDL, accounts, LOCK TABLES … WRITE, RESTORE) by the session holding the global read lock (FLUSH TABLES WITH READ LOCK) | UNLOCK TABLES, then write |
| 1100 | HY000 | La table '%s' n'a pas été verrouillée par LOCK TABLES | Table used in a session under LOCK TABLES without itself having been locked | Add the table to the LOCK TABLES list |
2.6 Cluster and replication errors (Cluster edition)#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1290 | HY000 | Le serveur fonctionne avec l'option %s et ne peut pas exécuter cette instruction | Attempted write on a read-only secondary node, or server option incompatible with the statement | Write to the cluster's primary node; consult SHOW CLUSTER STATUS |
| 9002 | HY000 | %s demande l'édition Miraj Cluster | Effective partitioning feature (segments, EXCHANGE PARTITION on HASH/KEY...) used outside the Cluster edition | Switch to the Cluster edition, or limit yourself to the partitioning features available in the Enterprise edition (definition accepted, non-partitioned storage) |
| 9003 | HY000 | Promotion refusée : %s | SET GLOBAL cluster_role = 'primary' refused after probing the other nodes: primary still reachable, another promotion in progress, peer that still sees the primary, more advanced peer that no longer keeps the missing part of the journal, different databases, writes confirmed to clients (semi-synchronous replication) held by no reachable node, lag greater than max_promotion_lag_mb, database awaiting re-seeding after a table rewritten outside the journal by the primary (waiting to be copied again), node FENCED or being seeded; in raft mode (automatic election), refusal by a voter (node n2 refused: not up to date on database shop (epoch 4 < 5), candidate lacks database …, already voted for …), no reachable majority (cluster has no quorum: 1 of 3 members reachable) or election already in progress (the precise reason follows the colon, in English) | Depending on the reason: first demote the former primary ('secondary'), promote another secondary, or force while accepting the loss (SET GLOBAL cluster_role = 'force_primary'); see chapter 17, §17.4 |
| 9004 | HY000 | Réplication synchrone : %s | Semi-synchronous replication (@@cluster_sync_commit set to RECEIVED, APPLIED or MAJORITY): acknowledgments from the secondaries not received within @@cluster_sync_timeout or too few secondaries connected (warning with the FALLBACK behavior, error with ERROR), wait canceled by KILL QUERY (warning), node demoted or removed during the wait (error; quorum lost when an elected leader gives up its role for lack of a majority, raft mode). The write is always committed on the primary (reason in English after the colon) | Do not replay the write without re-reading (risk of duplicate); check the secondaries (SHOW CLUSTER STATUS, SYNC column); see chapter 17, §17.8 |
| 9005 | HY000 | Limite de données de Miraj Express atteinte (%s) : supprimez des données ou utilisez l'édition Entreprise | Express edition: the total of the tables reaches 20 GB and the statement would grow the data (INSERT, REPLACE, LOAD DATA, UPDATE, CREATE TABLE, ALTER TABLE) | Delete data (DELETE, TRUNCATE, DROP, always allowed) or switch to the Enterprise or Cluster edition |
| 1194 | HY000 | La table '%s' est marquée comme endommagée et doit être réparée (%s) | Special case: reading a table partitioned into segments by the Cluster edition from an edition that cannot read it | Open the table from a server running the Cluster edition |
2.6 bis Binary log and binary-log replication errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1186 | HY000 | Journal binaire fermé, RESET MASTER impossible | RESET MASTER without --log-bin | Start the server with --log-bin |
| 1198 | HY000 | Cette opération est impossible tant que la réplication tourne ; exécuter d'abord STOP SLAVE | CHANGE MASTER, RESET SLAVE, SET GLOBAL gtid_slave_pos or sql_slave_skip_counter while the replica threads are running | STOP SLAVE, then start again |
| 1200 | HY000 | Le serveur n'est pas configuré comme réplica ; corriger la configuration ou utiliser CHANGE MASTER TO | START SLAVE, STOP SLAVE or RESET SLAVE without a prior CHANGE MASTER TO (or embedded engine) | CHANGE MASTER TO … |
| 1220 | HY000 | Erreur à l'exécution de la commande %s : %s | SHOW BINLOG EVENTS on an unknown file or at a position that is not the start of an event | Read the positions with SHOW BINLOG EVENTS without FROM |
| 1236 | HY000 | Erreur fatale %s de la source à la lecture du journal binaire : '%s' | Source side: journal disabled, unknown file, GTID position missing (purged files) or beyond the journal; replica side: Last_IO_Error | Re-seed the replica from a copy, then SET GLOBAL gtid_slave_pos |
| 1373 | HY000 | Fichier cible absent de l'index du journal binaire | PURGE BINARY LOGS TO an unknown file | Choose a name from SHOW BINARY LOGS |
| 1381 | HY000 | Le journal binaire n'est pas activé | SHOW BINARY LOGS, PURGE BINARY LOGS without --log-bin | Start with --log-bin |
| 1950 | HY000 | Tentative de journaliser le GTID %s, dont le numéro de séquence ne suit pas celui du GTID existant %s, alors que gtid_strict_mode est activé | gtid_strict_mode = ON and an imposed sequence (gtid_seq_no) that does not follow that of the domain; the transaction is rolled back | Fix gtid_seq_no or turn off gtid_strict_mode |
2.7 MIRAJ-specific errors (editions, change events and vectors)#
These codes exist in no other SQL engine; they are specific to MIRAJ.
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 9001 | HY000 | %s n'est pas disponible dans l'édition Miraj Express | Feature reserved for the Enterprise or Cluster edition used in the Express edition (e.g. intra-query parallelism) | Switch to the Enterprise or Cluster edition if the feature is needed |
| 9002 | HY000 | %s demande l'édition Miraj Cluster | Effective partitioning feature (segments, EXCHANGE PARTITION on HASH/KEY...) used outside the Cluster edition | Switch to the Cluster edition, or limit yourself to the partitioning features available in the Enterprise edition (definition accepted, non-partitioned storage) |
| 9003 | HY000 | Promotion refusée : %s | SET GLOBAL cluster_role = 'primary' refused after probing the other nodes: primary still reachable, another promotion in progress, peer that still sees the primary, more advanced peer that no longer keeps the missing part of the journal, different databases, writes confirmed to clients (semi-synchronous replication) held by no reachable node, lag greater than max_promotion_lag_mb, database awaiting re-seeding after a table rewritten outside the journal by the primary (waiting to be copied again), node FENCED or being seeded; in raft mode (automatic election), refusal by a voter (node n2 refused: not up to date on database shop (epoch 4 < 5), candidate lacks database …, already voted for …), no reachable majority (cluster has no quorum: 1 of 3 members reachable) or election already in progress (the precise reason follows the colon, in English) | Depending on the reason: first demote the former primary ('secondary'), promote another secondary, or force while accepting the loss (SET GLOBAL cluster_role = 'force_primary'); see chapter 17, §17.4 |
| 9004 | HY000 | Réplication synchrone : %s | Semi-synchronous replication (@@cluster_sync_commit set to RECEIVED, APPLIED or MAJORITY): acknowledgments from the secondaries not received within @@cluster_sync_timeout or too few secondaries connected (warning with the FALLBACK behavior, error with ERROR), wait canceled by KILL QUERY (warning), node demoted or removed during the wait (error; quorum lost when an elected leader gives up its role for lack of a majority, raft mode). The write is always committed on the primary (reason in English after the colon) | Do not replay the write without re-reading (risk of duplicate); check the secondaries (SHOW CLUSTER STATUS, SYNC column); see chapter 17, §17.8 |
| 9005 | HY000 | Limite de données de Miraj Express atteinte (%s) : supprimez des données ou utilisez l'édition Entreprise | See §2.6 | See §2.6 |
| 9006 | 25000 | WAIT FOR CHANGES n'est pas permis dans une transaction | WAIT FOR CHANGES in an explicit transaction, or in an implicit transaction (autocommit = 0) that has written | Commit or roll back the transaction before waiting; wait on a dedicated connection (chapter 21) |
| 9007 | HY000 | Cette session n'a aucun abonnement LISTEN actif | WAIT FOR CHANGES without a prior LISTEN on the session, or after UNLISTEN * | Subscribe (LISTEN TABLE …, LISTEN channel) before waiting |
| 9008 | HY000 | Trop d'abonnements LISTEN (%s permis) | More than change_events_max_listeners subscriptions on a single session | Remove subscriptions (UNLISTEN) or raise change_events_max_listeners |
| 9009 | HY000 | La table '%s' n'a pas de clé primaire : seuls les événements de table sont transmis | Warning from LISTEN TABLE on a table with no primary key: its writes only give BULK events | Add a primary key to receive one event per row |
| 9010 | 22001 | La charge de NOTIFY dépasse %s octets | Payload of NOTIFY or MIRAJ_NOTIFY() longer than change_events_max_payload | Send a shorter payload (an identifier rather than the data) or raise change_events_max_payload |
| 9011 | HY000 | Plafond de données de Miraj Developer atteint (%s) ; supprimez des données ou utilisez l'édition Cluster | Developer edition: the total of the tables reaches 20 GB and the statement would make the data grow (INSERT, REPLACE, LOAD DATA, UPDATE, CREATE TABLE, ALTER TABLE) | Delete data (DELETE, TRUNCATE, DROP, always allowed) or move to the Cluster edition |
| 9033 | HY000 | Le compte '%s'@'%s' peut se connecter depuis d'autres machines et n'a pas de mot de passe : donnez-lui-en un (IDENTIFIED BY) ou réglez require_password = OFF | CREATE USER of an account reachable remotely without a password, or ALTER USER / SET PASSWORD that removes its password, under require_password = ON | Give the account a password, or SET GLOBAL require_password = OFF |
| 9012 | HY000 | L'édition Miraj Developer est limitée à 24 heures d'utilisation continue ; redémarrez le serveur pour continuer | Developer edition: 24 hours have elapsed since the process started; every statement is refused, the data remain intact | Restart miraj-server (or the application that embeds the engine); the count restarts from zero |
| 9034 | HY000 | %s n'est pas permis au niveau d'accès MCP %s | Session opened with an MCP token: statement above the token's level (INSERT with a READ token, DDL with a WRITE token…), including in the body of a routine or a trigger; token management from an MCP session, whatever the level | Use a token of a sufficient level, or manage tokens through the main port (chapter 20, §20.5) |
| 9035 | HY000 | Le jeton '%s' existe déjà | CREATE MCP TOKEN or CREATE API TOKEN with a name already taken on the server, by any account and for either token family (case-insensitive comparison) | Choose another name, or drop the old token (DROP MCP TOKEN, DROP API TOKEN) |
| 9036 | HY000 | Jeton inconnu '%s' | DROP MCP TOKEN, DROP API TOKEN or ALTER API TOKEN of a token that does not exist in this family (warning with IF EXISTS) | Check the name with SHOW MCP TOKENS or SHOW API TOKENS |
| 9037 | HY000 | La partition %s ne peut pas être placée sur le nœud '%s', qui n'est pas membre d'un cluster actif | PARTITION … NODE 'id' outside an active cluster, node outside members or invalid identifier | Check cluster.toml and the node identifier (§17.10) |
| 9038 | HY000 | La partition %s de %s est tenue par le nœud %s, injoignable : %s | Read or write of a partition dedicated to a node that is stopped, unreachable or does not answer within fragment_timeout_ms | Restart the node; prune the query to the available partitions |
| 9039 | HY000 | %s écrirait dans des partitions tenues par plusieurs nœuds (%s) ; une instruction ou une transaction ne peut écrire que les partitions d'un seul nœud | Statement that touches the partitions of several nodes; transaction that writes here and on another node, or on two other nodes (the statement alone fails) | Split the statement by node; one transaction per node written |
| 9040 | HY000 | La transaction qui écrit les partitions tenues par le nœud %s a été annulée par ce nœud : %s | Transaction that writes on another node left idle for more than fragment_timeout_ms (§17.10.5): rolled back here too | Replay the transaction; increase fragment_timeout_ms |
| 9041 | HY000 | %s n'est pas pris en charge sur %s tant que la partition %s est tenue par le nœud %s | Operation not supported on a table with a dedicated partition (§17.10.9) | See §17.10.10 |
| 9042 | HY000 | Le nœud %s a refusé la demande sur le fragment : %s | Different definition between nodes, partition not held | Wait for the DDL replication to finish, check the placement |
| 9043 | HY000 | Aucun nœud disponible pour les connexions %s | Sent by miraj-proxy in place of the handshake: no primary (election in progress, unreachable nodes) for the write port (RW), no healthy node for the read port (RO) | Reconnect after a few seconds; check miraj-proxy status and the proxy journal (chapter 23) |
| 9044 | HY000 | Le chemin %s %s est déjà utilisé par l'endpoint %s | CREATE ENDPOINT whose method and path shape (equal fixed segments, parameters in the same places) are already taken by another endpoint, across all databases | Choose another path, or replace the existing endpoint (chapter 24, §24.4.2) |
| 9045 | HY000 | Chemin d'endpoint invalide '%s' : %s | Path without a leading /, empty segment or segment with a forbidden character, badly written or repeated {name} parameter, path under /api or /mcp, more than 255 characters | Fix the path (chapter 24, §24.4.2) |
| 9046 | HY000 | Paramètre d'endpoint '%s' : %s | Call of an endpoint without a value for a parameter that has no DEFAULT (missing value), or with a parameter it does not declare (unknown parameter); returned as HTTP status 400 | Provide the value (path, query or JSON body), or declare the parameter in PARAMS |
| 9047 | HY000 | L'accès REST %s n'est pas permis pour %s | REST request of a family (endpoints, tables, SQL) or of an endpoint that the token (CREATE API TOKEN … ACCESS) or the password connections (rest_basic_access) do not allow; returned as HTTP status 403 | Widen the token's access (ALTER API TOKEN … ACCESS) or rest_basic_access (chapter 24, §24.3) |
| 9048 | HY000 | L'hôte '%s' ne peut pas se connecter tant que la base système est indisponible : seules les connexions locales sont acceptées | Connection from a non-loopback address (main port, REST, MCP) to a server that started without being able to open its miraj system database; returned as HTTP status 403 by REST and MCP | Connect from the server machine; read the BASE SYSTÈME INDISPONIBLE line in the server log, fix the cause (locked file, disk, permissions) and restart (chapter 16, §16.4.4) |
| 9051 | HY000 | Option '%s' invalide pour l'index de texte : %s | FULLTEXT index whose column weight (designation WEIGHT n) is zero, negative or non-numeric (a weight must be a positive number); the cited option is the column and its weight as written | Write a strictly positive real number, or remove WEIGHT (weight 1) (chapter 7) |
| 9052 | HY000 | La distance floue %s est hors limites (0 à 2) | Fuzzy search in boolean mode whose suffix attached to the word exceeds 2 (MATCH … AGAINST ('sirop~3' IN BOOLEAN MODE)) | Write word~1 or word~2 (~0: exact word); see chapter 9, §9.22 |
| 9054 | HY000 | Le nœud %s utilise le langage SQL %s mais le cluster utilise %s : tous les nœuds d'un cluster doivent avoir le même langage (sql_mode) | Joining of a cluster node whose POSTGRESQL element of sql_mode differs from that of the primary; refusal logged by both nodes (server.log) | Give all nodes the same sql_mode (language); see chapter 17 and 27.12 |
| 9055 | 01000 | %s | Warning (note): RAISE NOTICE of a routine written in PL/pgSQL; a PostgreSQL client receives it as a NOTICE message (SQLSTATE 00000) | —; see 30.13 |
| 9056 | 01000 | %s | Warning: RAISE WARNING of a routine written in PL/pgSQL (WARNING message) | —; see 30.13 |
| 9057 | 01000 | %s | Warning (note): RAISE INFO of a routine written in PL/pgSQL (INFO message) | —; see 30.13 |
| 9058 | 2BP01 | impossible de supprimer la fonction %s car d'autres objets en dépendent : déclencheur %s (utiliser DROP ... CASCADE) | DROP FUNCTION in the PostgreSQL language of a function that triggers call | DROP FUNCTION … CASCADE (also drops the triggers), or drop the triggers first; see 30.13 |
| 9059 | HY000 | %s demande une licence Miraj valide (état de la licence : %s) ; voir SHOW LICENSE | Enterprise edition feature (change events, MCP, binary log, journal archiving) requested from a server without a valid license | SHOW LICENSE, then install or renew the license; see chapter 31 |
| 9060 | HY000 | %s demande une licence Miraj Cluster valide (état de la licence : %s) ; voir SHOW LICENSE | PARTITION … NODE, SET GLOBAL cluster_role or cluster_sync_* with a license that does not cover the Cluster edition | Install a Cluster license; see 31.7 |
| 9061 | HY000 | Plafond de données de %s atteint : ce serveur n'a pas de licence Miraj valide ; installez le fichier de licence (miraj.lic) ou supprimez des données | Enterprise or Cluster server without a license whose data reach 20 GB; an expired license does not cap | Install the license (--install-license), or delete data; see 31.4 |
| 9062 | HY000 | Licence refusée : %s | FLUSH LICENSE on a file that is unreadable, modified or tied to another machine; the license in place keeps serving | Reinstall the file received; see 31.2 |
| 9063 | HY000 | Nœud %s refusé : la licence %s permet %s nœud(s) dans le cluster | Cluster that has more nodes than its license allows; refusal logged by the primary | A license for more nodes, or remove a node from members; see 31.7 |
| 9064 | HY000 | Nœud %s refusé : sa licence (%s) n'est pas celle du cluster (%s) | Different miraj.lic file on this node; refusal logged by the primary | Install the cluster license on this node; see 31.7 |
| 9065 | HY000 | %s n'est pas disponible dans l'édition Miraj Developer | Encryption at rest requested in the Developer edition (data_encryption, ENCRYPTION='Y', encrypted folder) | Use the Enterprise or Cluster edition (chapter 25) |
| 9066 | HY000 | %s exige le chiffrement des données, qui n'a pas été activé à l'initialisation de ce serveur | ENCRYPTION='Y' or ALTER INSTANCE ROTATE MASTER KEY on a data folder that is not encrypted | Encryption is enabled when a new folder is initialized (chapter 25, §25.2) |
| 9067 | HY001 | Mémoire du serveur insuffisante : les instructions en cours sur le serveur dépasseraient max_server_memory (%s) ; réessayez plus tard | Sorts, groupings, DISTINCT, windows and joins of all running statements together would exceed max_server_memory (half of the physical memory by default); transient condition, depends on the other sessions (53200 in the PostgreSQL language) | Retry later; raise max_server_memory (SET GLOBAL); see 16.4.5 |
| 9085 | HY000 | Document XML mal formé à la ligne %s : %s | Malformed LOAD XML file (unclosed or crossed tag, unknown entity, unquoted attribute…); nothing is loaded | Fix the document at the indicated line; see 8.8 |
| 6138 | HY000 | Données impossibles à convertir en vecteur valide : '%s' | Value not convertible to VECTOR(n) | Fix the value format (text form […] or binary) |
| 7600 | 22000 | dimensions de vecteurs différentes %s et %s | Operation between two vectors of different dimensions | Use vectors of the same dimension |
| 7601 | 22000 | %s dimensions attendues, et non %s | Vector written to a VECTOR(n) column with a dimension different from n | Adjust the number of components |
| 7602 | 22P02 | syntaxe incorrecte pour le type vector : "%s" | Invalid text form of a vector | Use the form [v1, v2, ...] |
| 7603 | 22000 | NaN interdit dans un vecteur | NaN component in a vector | Remove NaN values upstream |
| 7604 | 22000 | valeur infinie interdite dans un vecteur | Infinite component in a vector | Remove infinite values upstream |
| 4206 | HY000 | Impossible de déterminer le type de distance de VEC_DISTANCE : aucun index trouvé | VEC_DISTANCE called without a vector index on one of its columns | Create a VECTOR INDEX on the column (chapter 11) or spell out the metric: VEC_DISTANCE_EUCLIDEAN, VEC_DISTANCE_COSINE |
2.8 Internal and miscellaneous errors#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1024 | HY000 | Erreur de lecture du fichier '%s' (errno : %s) | Disk error when reading an engine file | Check the disk, restore from a backup if the file is damaged |
| 1021 | HY000 | Disque plein (%s) : l'écriture a été refusée, libérez de l'espace puis réessayez | Free space of the data volume below min_free_disk_space (512 MiB by default), or volume actually full; the refused write has no effect (53100 in the PostgreSQL language) | Free up space (DELETE, TRUNCATE, DROP remain allowed); see 16.4.5 |
| 1026 | HY000 | Erreur d'écriture du fichier '%s' (errno : %s) | Disk error on write (permissions...); in particular, failed flush of the journal to disk: the database journal is stopped, no more writes are accepted in it (58030 in the PostgreSQL language) | Check the disk and the permissions; for a stopped journal, fix the cause then restart the server (11.4.2) |
| 1038 | HY001 | Mémoire de tri insuffisante : l'instruction dépasse max_statement_memory (%s) | Sort of a statement beyond max_statement_memory (2 GiB by default); the session remains usable (53200 in the PostgreSQL language) | Restrict the query (WHERE, LIMIT), or raise max_statement_memory for the session; see 16.4.5 |
| 1114 | HY000 | La table '%s' est pleine | Grouping, DISTINCT, window, set operation, hash join or intermediate result beyond max_statement_memory (the table cited is then #sql_tmp (…)); or disk full while writing a table (53100 in the PostgreSQL language in both cases) | As 1038, or as 1021 for a full disk |
| 1028 | HY000 | Tri interrompu : %s | ORDER BY interrupted (e.g. by KILL or a limit on examined rows) | See the message for the precise cause; rerun if the interruption was not intended |
| 1105 | HY000 | Erreur inconnue : %s | Unexpected internal error (engine bug, corrupted routine/trigger definitions file...) | Report the error with the full context; check the integrity of the files of the database concerned |
| 1148 | 42000 | Cette commande n'est pas autorisée avec cette version du serveur | Command refused by the network protocol (e.g. LOCAL INFILE refused by a client that does not accept it) | Check the client configuration |
| 1193 | HY000 | Variable système inconnue : '%s' | SET/SELECT @@variable on a variable name that does not exist | Check the exact name in SHOW VARIABLES |
| 1231 | 42000 | La variable '%s' ne peut pas recevoir la valeur '%s' | Value outside the expected domain for a system variable; for a Boolean variable (autocommit, read_only, local_infile, and also those accepted without effect such as unique_checks, sql_notes, sql_safe_updates, big_tables), any value other than ON, OFF, 1, 0, TRUE, FALSE or DEFAULT (SET autocommit = 2, = 'yes', = NULL); the variable keeps its value | See the variable's documentation for the allowed values |
| 1235 | 42000 | Cette version de Miraj ne prend pas encore en charge '%s' | Syntactically valid construct but not implemented in this version | Use an equivalent supported construct |
2.9 Stored program errors (procedures, functions, triggers, events)#
| Code | SQLSTATE | Message | Typical cause | Suggested fix |
|---|---|---|---|---|
| 1304 | 42000 | %s %s existe déjà | CREATE PROCEDURE or CREATE FUNCTION of a name already taken in the database (PROCEDURE pr existe déjà) | CREATE OR REPLACE, IF NOT EXISTS, or another name |
| 1305 | 42000 | %s %s n'existe pas | CALL of a missing procedure (PROCEDURE shop.nopr n'existe pas), GRANT on a missing routine, ROLLBACK TO SAVEPOINT of an unknown point (SAVEPOINT nom n'existe pas) | Check the name and the database |
| 1318 | 42000 | Nombre d'arguments incorrect pour %s %s : %s attendus, %s reçus | CALL or function call with too many or too few arguments | Check the parameter list (SHOW CREATE PROCEDURE) |
| 1320 | 42000 | Aucun RETURN dans la FUNCTION %s | CREATE FUNCTION whose body contains no RETURN | Add the RETURN |
| 1321 | 2F005 | La FUNCTION %s s'est terminée sans RETURN | Execution of a function that reaches the end of its body without going through a RETURN | Add a RETURN on every path |
| 1326 | 24000 | Le curseur n'est pas ouvert | FETCH or CLOSE of a cursor before its OPEN | OPEN first |
| 1329 | 02000 | Aucune donnée : aucune ligne lue, sélectionnée ou traitée | FETCH after the last row of a cursor without a NOT FOUND handler | DECLARE CONTINUE HANDLER FOR NOT FOUND SET fini = 1 |
| 1339 | 20000 | Aucun cas ne correspond dans l'instruction CASE | CASE statement of a routine without ELSE where no branch applies | Add an ELSE branch |
| 1359 | HY000 | Le déclencheur '%s' existe déjà | CREATE TRIGGER of a name already taken | CREATE OR REPLACE TRIGGER, or another name |
| 1360 | HY000 | Le déclencheur n'existe pas | DROP TRIGGER of a missing trigger | DROP TRIGGER IF EXISTS |
| 1422 | HY000 | Validation explicite ou implicite interdite dans une fonction stockée ou un déclencheur | COMMIT, ROLLBACK, DDL or account management in the body of a function or a trigger | Move the statement into a procedure called outside the trigger |
| 1442 | HY000 | Impossible de modifier la table '%s' dans une fonction stockée ou un déclencheur : elle est déjà utilisée par l'instruction qui l'a appelé | Trigger (or function) that writes into the table of the statement that fired it | Write into another table, or do the computation with SET NEW.col in a BEFORE trigger |
| 1537 | HY000 | L'événement '%s' existe déjà | CREATE EVENT of a name already taken | CREATE EVENT IF NOT EXISTS or ALTER EVENT |
| 1539 | HY000 | Événement inconnu '%s' | DROP EVENT or ALTER EVENT of a missing event | DROP EVENT IF EXISTS |
| 1644 | 45000 (celui du SIGNAL) | texte de MESSAGE_TEXT | SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Stock insuffisant' in a routine: ERROR 1644 (45000): Stock insuffisant | Intended application error; handle it with a handler (DECLARE … HANDLER FOR SQLSTATE '45000') or on the client side |
3. The SQLSTATE#
The SQLSTATE is a code of exactly 5 characters (digits and uppercase letters), standardized independently of MIRAJ and shared by most SQL engines. An application can rely on it for generic handling, without knowing the wording or even the MIRAJ-specific numeric code — useful when porting code written against another SQL engine.
A few classes worth knowing:
| SQLSTATE | Meaning | Examples of MIRAJ codes |
|---|---|---|
42000 (and the 42Sxx) | Syntax error or access rule violation | 1064, 1049, 1050, 1051, 1054 |
23000 | Integrity constraint violation | 1048, 1062, 1451, 1452, 4025 |
3D000 | No database selected | 1046 |
28000 | Invalid authorization (authentication) | 1045 |
40001 | Serialization failure, transaction rolled back (deadlock or concurrency conflict) | 1213 |
22000 and derivatives (22001, 22003, 22007, 22012...) | Data exception: truncation, overflow, division by zero | 1264, 1292, 1365, 1366, 1406 |
25006 | Statement forbidden in a read-only transaction | 1792 |
70100 | Interrupted statement (SQLSTATE from a widespread convention in the SQL ecosystem, adopted by MIRAJ) | 1317, 1927, 1969 |
HY000 | General error, with no more specific SQLSTATE class | the majority of engine-specific errors (1004, 1105, 1193, 9001, 9002, 9003, 9004, 9005...) |
Recommended usage on the application side: a driver (ODBC, JDBC, ADO.NET...) generally exposes the SQLSTATE alongside the native code. For portable handling across engines (retrying a transaction on 40001, distinguishing a 23000 constraint error from a 42000 syntax error), rely on the SQLSTATE. For precise MIRAJ-specific diagnosis (displaying a suitable message, distinguishing two causes that share the same SQLSTATE), rely on the numeric code from this page.
When no more specific SQLSTATE is defined for a code, MIRAJ returns HY000 by default (including for a code entirely unknown to the catalog).
An error raised by a stored routine with SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = '...' carries the SQLSTATE chosen by the routine rather than the one associated with the generic numeric code of SIGNAL — this is the normal mechanism for raising an application error with a custom SQLSTATE (class 45 reserved for this use).
3.1 PostgreSQL-language instance#
On an instance in the PostgreSQL language (§ 16.10, chapter 30), the client receives only the SQLSTATE and the message: the codes that PostgreSQL drivers recognize replace the generic SQLSTATE of the MIRAJ code.
| SQLSTATE | Meaning | MIRAJ codes or cases |
|---|---|---|
42601 | syntax error | 1064; also MIRAJ-specific syntax that is refused (backticks, LIMIT a, b, &&…), whose message names the construct ("… is MIRAJ syntax, not accepted in the PostgreSQL language"); ? or :name parameter in a prepared query |
0A000 | feature not supported | 1235; PL/pgSQL construct outside the supported subset (the message names it), CREATE EVENT, array-type column, recursive view… |
22P02 | unreadable written value | 'peut-être'::boolean, '\xZZ'::bytea, badly written interval |
42P01, 42703, 23505, 23502, 23503, 23514 | missing table, unknown column, duplicate, NULL not allowed, foreign key, CHECK | 1146, 1054, 1062, 1048, 1451/1452, 4025 |
42P06, 3F000 | database (schema) already existing; unknown, absent on drop, or not selected | 1007; 1049, 1008, 1046 |
3D000 | unknown database named at connection (notice, the session opens with no current database) | database parameter |
22023 | inconsistent sequence options | 4085 |
54000 | limit exceeded: depth of a recursive expression, number of rows of generate_series | 3636 |
54001 | statement too complex | 7620 |
53100 | disk full, table full | 1021, 1114 (also when max_statement_memory causes it) |
53200 | out of memory | 1038, 9067 |
58030 | I/O error: journal stopped by a failed flush to disk | 1026 |
42P07 | table already exists | 1050 |
42501 | insufficient privilege | 1044, 1142, 1143, 1227 |
55P03 | lock wait timeout exceeded | 1205 |
57014 | query cancelled | 1317, 3024 (Ctrl-C, KILL QUERY, timeout) |
25P01 | DECLARE … CURSOR outside a transaction block | WITHOUT HOLD cursor |
25P02 | failed transaction block | statement other than the end of the block after an error |
34000 | unknown portal or cursor | FETCH, CLOSE, Execute |
26000, 42P05, 42P03 | unknown prepared statement, name already taken, cursor already open | extended protocol, DECLARE |
42P11 | invalid cursor definition | DECLARE c CURSOR FOR INSERT … (statement without rows), SCROLL and NO SCROLL together |
55000 | object in the wrong state | lastval() before any number served to the session, currval before nextval, moving backwards in a NO SCROLL cursor |
428C9 | column that cannot be assigned | value written into a GENERATED ALWAYS AS IDENTITY column (without OVERRIDING SYSTEM VALUE) or into a generated column |
42P10 | inconsistent column list | ON CONFLICT without an arbiter unique constraint, too many column aliases (AS x (a, b)), DISTINCT ON that does not start the ORDER BY |
42883 | function or operator does not exist | unknown function, wrong number or type of arguments (lower(1)) |
42804 | incompatible type | bit string written into a column of another type, result of a set function with another structure |
22012 | division by zero | 1 / 0, mod(x, 0) |
55P02 | parameter cannot be changed in the session | SET shared_buffers, max_connections… |
57P01, 57P05, 25P03 | connection closed by the server (FATAL) | KILL, pg_terminate_backend, server shutdown; idle timeout; idle-in-transaction timeout |
42602, 58P02 | relative path, existing file | COPY … TO 'file' |
22021 | text that is not UTF-8 | client_encoding other than UTF-8 |
28000, 28P01 | connection refused, wrong password | 1045, TLS required |
08P01 | protocol violation | malformed message, packet too long (1153) |
XX000 | internal error or no equivalent | codes with SQLSTATE HY000 |
4. Message language#
MIRAJ error messages exist in several languages: French, English, and eight additional languages (Chinese, Hindi, Spanish, Arabic, Portuguese, Russian, German, Japanese). This page documents the French wording, the reference language of this manual.
To obtain the messages in English (or in another available language):
- the
--langoption ofmiraj-server(en,fr,zh,hi,es,ar,pt,ru,de,ja), or ofmiraj-cliopened on a data folder, selects the language of error messages and warnings (SHOW WARNINGS, MIRAJ language:Données tronquées pour la colonne 'v' à la ligne 1for 1265 in French); in the MIRAJ language, the warnings and notes listed bySHOW WARNINGSare written in the same language as the errors (for example, under--lang fr,Warning | 1265 | Données tronquées pour la colonne 'v' à la ligne 1), their code remaining the same; - each error can also be reworded in a given language without changing the session language, if the API or tool used exposes this feature (on-demand retranslation from the error's code and arguments);
<language>.jsonfiles placed next to the server executable allow you to complete or replace the embedded translations, including to add a language not listed above.
The numeric code and the SQLSTATE of an error never change with the language: only the message text is translated. An application that tests the code or the SQLSTATE (rather than the message text) therefore works identically regardless of the language configured on the server.