asda?‰PNG  IHDR ? f ??C1 sRGB ??é gAMA ±? üa pHYs ? ??o¨d GIDATx^íüL”÷e÷Y?a?("Bh?_ò???¢§?q5k?*:t0A-o??¥]VkJ¢M??f?±8\k2íll£1]q?ù???T PKe[dservice_kill_statement.hnu[/* Copyright (c) 2013, 2018, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SERVICE_KILL_STATEMENT_INCLUDED #define MYSQL_SERVICE_KILL_STATEMENT_INCLUDED /** @file This service provides functions that allow plugins to support the KILL statement. In MySQL support for the KILL statement is cooperative. The KILL statement only sets a "killed" flag. This function returns the value of that flag. A thread should check it often, especially inside time-consuming loops, and gracefully abort the operation if it is non-zero. thd_killed(thd) @return 0 - no KILL statement was issued, continue normally @return 1 - there was a KILL statement, abort the execution. thd_kill_level(thd) @return thd_kill_levels_enum values */ #ifdef __cplusplus extern "C" { #endif enum thd_kill_levels { THD_IS_NOT_KILLED=0, THD_ABORT_SOFTLY=50, /**< abort when possible, don't leave tables corrupted */ THD_ABORT_ASAP=100, /**< abort asap */ }; extern struct kill_statement_service_st { enum thd_kill_levels (*thd_kill_level_func)(const MYSQL_THD); } *thd_kill_statement_service; /* backward compatibility helper */ #define thd_killed(THD) (thd_kill_level(THD) == THD_ABORT_ASAP) #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_kill_level(THD) \ thd_kill_statement_service->thd_kill_level_func(THD) #else enum thd_kill_levels thd_kill_level(const MYSQL_THD); #endif #ifdef __cplusplus } #endif #endif PKe[ service_sha2.hnu[#ifndef MYSQL_SERVICE_SHA2_INCLUDED /* Copyright (c) 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file my sha2 service Functions to calculate SHA2 hash from a memory buffer */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #endif extern struct my_sha2_service_st { void (*my_sha224_type)(unsigned char*, const char*, size_t); void (*my_sha224_multi_type)(unsigned char*, ...); size_t (*my_sha224_context_size_type)(); void (*my_sha224_init_type)(void *); void (*my_sha224_input_type)(void *, const unsigned char *, size_t); void (*my_sha224_result_type)(void *, unsigned char *); void (*my_sha256_type)(unsigned char*, const char*, size_t); void (*my_sha256_multi_type)(unsigned char*, ...); size_t (*my_sha256_context_size_type)(); void (*my_sha256_init_type)(void *); void (*my_sha256_input_type)(void *, const unsigned char *, size_t); void (*my_sha256_result_type)(void *, unsigned char *); void (*my_sha384_type)(unsigned char*, const char*, size_t); void (*my_sha384_multi_type)(unsigned char*, ...); size_t (*my_sha384_context_size_type)(); void (*my_sha384_init_type)(void *); void (*my_sha384_input_type)(void *, const unsigned char *, size_t); void (*my_sha384_result_type)(void *, unsigned char *); void (*my_sha512_type)(unsigned char*, const char*, size_t); void (*my_sha512_multi_type)(unsigned char*, ...); size_t (*my_sha512_context_size_type)(); void (*my_sha512_init_type)(void *); void (*my_sha512_input_type)(void *, const unsigned char *, size_t); void (*my_sha512_result_type)(void *, unsigned char *); } *my_sha2_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_sha224(A,B,C) my_sha2_service->my_sha224_type(A,B,C) #define my_sha224_multi my_sha2_service->my_sha224_multi_type #define my_sha224_context_size() my_sha2_service->my_sha224_context_size_type() #define my_sha224_init(A) my_sha2_service->my_sha224_init_type(A) #define my_sha224_input(A,B,C) my_sha2_service->my_sha224_input_type(A,B,C) #define my_sha224_result(A,B) my_sha2_service->my_sha224_result_type(A,B) #define my_sha256(A,B,C) my_sha2_service->my_sha256_type(A,B,C) #define my_sha256_multi my_sha2_service->my_sha256_multi_type #define my_sha256_context_size() my_sha2_service->my_sha256_context_size_type() #define my_sha256_init(A) my_sha2_service->my_sha256_init_type(A) #define my_sha256_input(A,B,C) my_sha2_service->my_sha256_input_type(A,B,C) #define my_sha256_result(A,B) my_sha2_service->my_sha256_result_type(A,B) #define my_sha384(A,B,C) my_sha2_service->my_sha384_type(A,B,C) #define my_sha384_multi my_sha2_service->my_sha384_multi_type #define my_sha384_context_size() my_sha2_service->my_sha384_context_size_type() #define my_sha384_init(A) my_sha2_service->my_sha384_init_type(A) #define my_sha384_input(A,B,C) my_sha2_service->my_sha384_input_type(A,B,C) #define my_sha384_result(A,B) my_sha2_service->my_sha384_result_type(A,B) #define my_sha512(A,B,C) my_sha2_service->my_sha512_type(A,B,C) #define my_sha512_multi my_sha2_service->my_sha512_multi_type #define my_sha512_context_size() my_sha2_service->my_sha512_context_size_type() #define my_sha512_init(A) my_sha2_service->my_sha512_init_type(A) #define my_sha512_input(A,B,C) my_sha2_service->my_sha512_input_type(A,B,C) #define my_sha512_result(A,B) my_sha2_service->my_sha512_result_type(A,B) #else void my_sha224(unsigned char*, const char*, size_t); void my_sha224_multi(unsigned char*, ...); size_t my_sha224_context_size(); void my_sha224_init(void *context); void my_sha224_input(void *context, const unsigned char *buf, size_t len); void my_sha224_result(void *context, unsigned char *digest); void my_sha256(unsigned char*, const char*, size_t); void my_sha256_multi(unsigned char*, ...); size_t my_sha256_context_size(); void my_sha256_init(void *context); void my_sha256_input(void *context, const unsigned char *buf, size_t len); void my_sha256_result(void *context, unsigned char *digest); void my_sha384(unsigned char*, const char*, size_t); void my_sha384_multi(unsigned char*, ...); size_t my_sha384_context_size(); void my_sha384_init(void *context); void my_sha384_input(void *context, const unsigned char *buf, size_t len); void my_sha384_result(void *context, unsigned char *digest); void my_sha512(unsigned char*, const char*, size_t); void my_sha512_multi(unsigned char*, ...); size_t my_sha512_context_size(); void my_sha512_init(void *context); void my_sha512_input(void *context, const unsigned char *buf, size_t len); void my_sha512_result(void *context, unsigned char *digest); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_SHA2_INCLUDED #endif PKe[jCplugin_password_validation.hnu[#ifndef MYSQL_PLUGIN_PASSWORD_VALIDATION_INCLUDED /* Copyright (C) 2014 Sergei Golubchik and MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file Password Validation Plugin API. This file defines the API for server password validation plugins. */ #define MYSQL_PLUGIN_PASSWORD_VALIDATION_INCLUDED #include #ifdef __cplusplus extern "C" { #endif #define MariaDB_PASSWORD_VALIDATION_INTERFACE_VERSION 0x0100 /** Password validation plugin descriptor */ struct st_mariadb_password_validation { int interface_version; /**< version plugin uses */ /** Function provided by the plugin which should perform password validation and return 0 if the password has passed the validation. */ int (*validate_password)(const MYSQL_CONST_LEX_STRING *username, const MYSQL_CONST_LEX_STRING *password); }; #ifdef __cplusplus } #endif #endif PKe[plugin_data_type.hnu[#ifndef MARIADB_PLUGIN_DATA_TYPE_INCLUDED #define MARIADB_PLUGIN_DATA_TYPE_INCLUDED /* Copyright (C) 2019, Alexander Barkov and MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file Data Type Plugin API. This file defines the API for server plugins that manage data types. */ #ifdef __cplusplus #include /* API for data type plugins. (MariaDB_DATA_TYPE_PLUGIN) */ #define MariaDB_DATA_TYPE_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) struct st_mariadb_data_type { int interface_version; class Type_handler *type_handler; }; /** Data type plugin descriptor */ #endif /* __cplusplus */ #endif /* MARIADB_PLUGIN_DATA_TYPE_INCLUDED */ PKe[Q8` ` service_thd_error_context.hnu[#ifndef MYSQL_SERVICE_THD_STMT_DA_INCLUDED /* Copyright (C) 2013 MariaDB Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service provides access to the statement diagnostics area: - error message - error number - row for warning (e.g. for multi-row INSERT statements) */ #ifdef __cplusplus extern "C" { #endif extern struct thd_error_context_service_st { const char *(*thd_get_error_message_func)(const MYSQL_THD thd); unsigned int (*thd_get_error_number_func)(const MYSQL_THD thd); unsigned long (*thd_get_error_row_func)(const MYSQL_THD thd); void (*thd_inc_error_row_func)(MYSQL_THD thd); char *(*thd_get_error_context_description_func)(MYSQL_THD thd, char *buffer, unsigned int length, unsigned int max_query_length); } *thd_error_context_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_get_error_message(thd) \ (thd_error_context_service->thd_get_error_message_func((thd))) #define thd_get_error_number(thd) \ (thd_error_context_service->thd_get_error_number_func((thd))) #define thd_get_error_row(thd) \ (thd_error_context_service->thd_get_error_row_func((thd))) #define thd_inc_error_row(thd) \ (thd_error_context_service->thd_inc_error_row_func((thd))) #define thd_get_error_context_description(thd, buffer, length, max_query_len) \ (thd_error_context_service->thd_get_error_context_description_func((thd), \ (buffer), \ (length), \ (max_query_len))) #else /** Return error message @param thd user thread connection handle @return error text */ const char *thd_get_error_message(const MYSQL_THD thd); /** Return error number @param thd user thread connection handle @return error number */ unsigned int thd_get_error_number(const MYSQL_THD thd); /** Return the current row number (i.e. in a multiple INSERT statement) @param thd user thread connection handle @return row number */ unsigned long thd_get_error_row(const MYSQL_THD thd); /** Increment the current row number @param thd user thread connection handle */ void thd_inc_error_row(MYSQL_THD thd); /** Return a text description of a thread, its security context (user,host) and the current query. */ char *thd_get_error_context_description(MYSQL_THD thd, char *buffer, unsigned int length, unsigned int max_query_length); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_STMT_DA_INCLUDED #endif PKe[W%ћooservice_thd_wait.hnu[/* Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SERVICE_THD_WAIT_INCLUDED #define MYSQL_SERVICE_THD_WAIT_INCLUDED /** @file include/mysql/service_thd_wait.h This service provides functions for plugins and storage engines to report when they are going to sleep/stall. SYNOPSIS thd_wait_begin() - call just before a wait begins thd Thread object Use NULL if the thd is NOT known. wait_type Type of wait 1 -- short wait (e.g. for mutex) 2 -- medium wait (e.g. for disk io) 3 -- large wait (e.g. for locked row/table) NOTES This is used by the threadpool to have better knowledge of which threads that currently are actively running on CPUs. When a thread reports that it's going to sleep/stall, the threadpool scheduler is free to start another thread in the pool most likely. The expected wait time is simply an indication of how long the wait is expected to become, the real wait time could be very different. thd_wait_end() called immediately after the wait is complete thd_wait_end() MUST be called if thd_wait_begin() was called. Using thd_wait_...() service is optional but recommended. Using it will improve performance as the thread pool will be more active at managing the thread workload. */ #ifdef __cplusplus extern "C" { #endif /* One should only report wait events that could potentially block for a long time. A mutex wait is too short of an event to report. The reason is that an event which is reported leads to a new thread starts executing a query and this has a negative impact of usage of CPU caches and thus the expected gain of starting a new thread must be higher than the expected cost of lost performance due to starting a new thread. Good examples of events that should be reported are waiting for row locks that could easily be for many milliseconds or even seconds and the same holds true for global read locks, table locks and other meta data locks. Another event of interest is going to sleep for an extended time. */ typedef enum _thd_wait_type_e { THD_WAIT_SLEEP= 1, THD_WAIT_DISKIO= 2, THD_WAIT_ROW_LOCK= 3, THD_WAIT_GLOBAL_LOCK= 4, THD_WAIT_META_DATA_LOCK= 5, THD_WAIT_TABLE_LOCK= 6, THD_WAIT_USER_LOCK= 7, THD_WAIT_BINLOG= 8, THD_WAIT_GROUP_COMMIT= 9, THD_WAIT_SYNC= 10, THD_WAIT_NET= 11, THD_WAIT_LAST= 12 } thd_wait_type; extern struct thd_wait_service_st { void (*thd_wait_begin_func)(MYSQL_THD, int); void (*thd_wait_end_func)(MYSQL_THD); } *thd_wait_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_wait_begin(_THD, _WAIT_TYPE) \ thd_wait_service->thd_wait_begin_func(_THD, _WAIT_TYPE) #define thd_wait_end(_THD) thd_wait_service->thd_wait_end_func(_THD) #else void thd_wait_begin(MYSQL_THD thd, int wait_type); void thd_wait_end(MYSQL_THD thd); #endif #ifdef __cplusplus } #endif #endif PKe[4 5 5service_debug_sync.hnu[#ifndef MYSQL_SERVICE_DEBUG_SYNC_INCLUDED /* Copyright (c) 2009, 2010, Oracle and/or its affiliates. Copyright (c) 2012, Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file == Debug Sync Facility == The Debug Sync Facility allows placement of synchronization points in the server code by using the DEBUG_SYNC macro: open_tables(...) DEBUG_SYNC(thd, "after_open_tables"); lock_tables(...) When activated, a sync point can - Emit a signal and/or - Wait for a signal Nomenclature: - signal: A value of a global variable that persists until overwritten by a new signal. The global variable can also be seen as a "signal post" or "flag mast". Then the signal is what is attached to the "signal post" or "flag mast". - emit a signal: Assign the value (the signal) to the global variable ("set a flag") and broadcast a global condition to wake those waiting for a signal. - wait for a signal: Loop over waiting for the global condition until the global value matches the wait-for signal. By default, all sync points are inactive. They do nothing (except to burn a couple of CPU cycles for checking if they are active). A sync point becomes active when an action is requested for it. To do so, put a line like this in the test case file: SET DEBUG_SYNC= 'after_open_tables SIGNAL opened WAIT_FOR flushed'; This activates the sync point 'after_open_tables'. It requests it to emit the signal 'opened' and wait for another thread to emit the signal 'flushed' when the thread's execution runs through the sync point. For every sync point there can be one action per thread only. Every thread can request multiple actions, but only one per sync point. In other words, a thread can activate multiple sync points. Here is an example how to activate and use the sync points: --connection conn1 SET DEBUG_SYNC= 'after_open_tables SIGNAL opened WAIT_FOR flushed'; send INSERT INTO t1 VALUES(1); --connection conn2 SET DEBUG_SYNC= 'now WAIT_FOR opened'; SET DEBUG_SYNC= 'after_abort_locks SIGNAL flushed'; FLUSH TABLE t1; When conn1 runs through the INSERT statement, it hits the sync point 'after_open_tables'. It notices that it is active and executes its action. It emits the signal 'opened' and waits for another thread to emit the signal 'flushed'. conn2 waits immediately at the special sync point 'now' for another thread to emit the 'opened' signal. A signal remains in effect until it is overwritten. If conn1 signals 'opened' before conn2 reaches 'now', conn2 will still find the 'opened' signal. It does not wait in this case. When conn2 reaches 'after_abort_locks', it signals 'flushed', which lets conn1 awake. Normally the activation of a sync point is cleared when it has been executed. Sometimes it is necessary to keep the sync point active for another execution. You can add an execute count to the action: SET DEBUG_SYNC= 'name SIGNAL sig EXECUTE 3'; This sets the signal point's activation counter to 3. Each execution decrements the counter. After the third execution the sync point becomes inactive. One of the primary goals of this facility is to eliminate sleeps from the test suite. In most cases it should be possible to rewrite test cases so that they do not need to sleep. (But this facility cannot synchronize multiple processes.) However, to support test development, and as a last resort, sync point waiting times out. There is a default timeout, but it can be overridden: SET DEBUG_SYNC= 'name WAIT_FOR sig TIMEOUT 10 EXECUTE 2'; TIMEOUT 0 is special: If the signal is not present, the wait times out immediately. When a wait timed out (even on TIMEOUT 0), a warning is generated so that it shows up in the test result. You can throw an error message and kill the query when a synchronization point is hit a certain number of times: SET DEBUG_SYNC= 'name HIT_LIMIT 3'; Or combine it with signal and/or wait: SET DEBUG_SYNC= 'name SIGNAL sig EXECUTE 2 HIT_LIMIT 3'; Here the first two hits emit the signal, the third hit returns the error message and kills the query. For cases where you are not sure that an action is taken and thus cleared in any case, you can force to clear (deactivate) a sync point: SET DEBUG_SYNC= 'name CLEAR'; If you want to clear all actions and clear the global signal, use: SET DEBUG_SYNC= 'RESET'; This is the only way to reset the global signal to an empty string. For testing of the facility itself you can execute a sync point just as if it had been hit: SET DEBUG_SYNC= 'name TEST'; === Formal Syntax === The string to "assign" to the DEBUG_SYNC variable can contain: {RESET | TEST | CLEAR | {{SIGNAL | WAIT_FOR [TIMEOUT ]} [EXECUTE ] &| HIT_LIMIT } Here '&|' means 'and/or'. This means that one of the sections separated by '&|' must be present or both of them. === Activation/Deactivation === The facility is an optional part of the MySQL server. It is enabled in a debug server by default. ./configure --enable-debug-sync The Debug Sync Facility, when compiled in, is disabled by default. It can be enabled by a mysqld command line option: --debug-sync-timeout[=default_wait_timeout_value_in_seconds] 'default_wait_timeout_value_in_seconds' is the default timeout for the WAIT_FOR action. If set to zero, the facility stays disabled. The facility is enabled by default in the test suite, but can be disabled with: mysql-test-run.pl ... --debug-sync-timeout=0 ... Likewise the default wait timeout can be set: mysql-test-run.pl ... --debug-sync-timeout=10 ... The command line option influences the readable value of the system variable 'debug_sync'. * If the facility is not compiled in, the system variable does not exist. * If --debug-sync-timeout=0 the value of the variable reads as "OFF". * Otherwise the value reads as "ON - current signal: " followed by the current signal string, which can be empty. The readable variable value is the same, regardless if read as global or session value. Setting the 'debug-sync' system variable requires 'SUPER' privilege. You can never read back the string that you assigned to the variable, unless you assign the value that the variable does already have. But that would give a parse error. A syntactically correct string is parsed into a debug sync action and stored apart from the variable value. === Implementation === Pseudo code for a sync point: #define DEBUG_SYNC(thd, sync_point_name) if (unlikely(opt_debug_sync_timeout)) debug_sync(thd, STRING_WITH_LEN(sync_point_name)) The sync point performs a binary search in a sorted array of actions for this thread. The SET DEBUG_SYNC statement adds a requested action to the array or overwrites an existing action for the same sync point. When it adds a new action, the array is sorted again. === A typical synchronization pattern === There are quite a few places in MySQL, where we use a synchronization pattern like this: mysql_mutex_lock(&mutex); thd->enter_cond(&condition_variable, &mutex, new_message); #if defined(ENABLE_DEBUG_SYNC) if (!thd->killed && !end_of_wait_condition) DEBUG_SYNC(thd, "sync_point_name"); #endif while (!thd->killed && !end_of_wait_condition) mysql_cond_wait(&condition_variable, &mutex); thd->exit_cond(old_message); Here some explanations: thd->enter_cond() is used to register the condition variable and the mutex in thd->mysys_var. This is done to allow the thread to be interrupted (killed) from its sleep. Another thread can find the condition variable to signal and mutex to use for synchronization in this thread's THD::mysys_var. thd->enter_cond() requires the mutex to be acquired in advance. thd->exit_cond() unregisters the condition variable and mutex and releases the mutex. If you want to have a Debug Sync point with the wait, please place it behind enter_cond(). Only then you can safely decide, if the wait will be taken. Also you will have THD::proc_info correct when the sync point emits a signal. DEBUG_SYNC sets its own proc_info, but restores the previous one before releasing its internal mutex. As soon as another thread sees the signal, it does also see the proc_info from before entering the sync point. In this case it will be "new_message", which is associated with the wait that is to be synchronized. In the example above, the wait condition is repeated before the sync point. This is done to skip the sync point, if no wait takes place. The sync point is before the loop (not inside the loop) to have it hit once only. It is possible that the condition variable is signaled multiple times without the wait condition to be true. A bit off-topic: At some places, the loop is taken around the whole synchronization pattern: while (!thd->killed && !end_of_wait_condition) { mysql_mutex_lock(&mutex); thd->enter_cond(&condition_variable, &mutex, new_message); if (!thd->killed [&& !end_of_wait_condition]) { [DEBUG_SYNC(thd, "sync_point_name");] mysql_cond_wait(&condition_variable, &mutex); } thd->exit_cond(old_message); } Note that it is important to repeat the test for thd->killed after enter_cond(). Otherwise the killing thread may kill this thread after it tested thd->killed in the loop condition and before it registered the condition variable and mutex in enter_cond(). In this case, the killing thread does not know that this thread is going to wait on a condition variable. It would just set THD::killed. But if we would not test it again, we would go asleep though we are killed. If the killing thread would kill us when we are after the second test, but still before sleeping, we hold the mutex, which is registered in mysys_var. The killing thread would try to acquire the mutex before signaling the condition variable. Since the mutex is only released implicitly in mysql_cond_wait(), the signaling happens at the right place. We have a safe synchronization. === Co-work with the DBUG facility === When running the MySQL test suite with the --debug-dbug command line option, the Debug Sync Facility writes trace messages to the DBUG trace. The following shell commands proved very useful in extracting relevant information: egrep 'query:|debug_sync_exec:' mysql-test/var/log/mysqld.1.trace It shows all executed SQL statements and all actions executed by synchronization points. Sometimes it is also useful to see, which synchronization points have been run through (hit) with or without executing actions. Then add "|debug_sync_point:" to the egrep pattern. === Further reading === For a discussion of other methods to synchronize threads see http://forge.mysql.com/wiki/MySQL_Internals_Test_Synchronization For complete syntax tests, functional tests, and examples see the test case debug_sync.test. See also http://forge.mysql.com/worklog/task.php?id=4259 */ #ifndef MYSQL_ABI_CHECK #include #endif #ifdef __cplusplus extern "C" { #endif #ifdef MYSQL_DYNAMIC_PLUGIN extern void (*debug_sync_service)(MYSQL_THD, const char *, size_t); #else #define debug_sync_service debug_sync_C_callback_ptr extern void (*debug_sync_C_callback_ptr)(MYSQL_THD, const char *, size_t); #endif #ifdef ENABLED_DEBUG_SYNC #define DEBUG_SYNC(thd, name) \ do { \ if (debug_sync_service) \ debug_sync_service(thd, STRING_WITH_LEN(name)); \ } while(0) #define DEBUG_SYNC_C_IF_THD(thd, name) \ do { \ if (debug_sync_service && thd) \ debug_sync_service((MYSQL_THD) thd, STRING_WITH_LEN(name)); \ } while(0) #else #define DEBUG_SYNC(thd,name) do { } while(0) #define DEBUG_SYNC_C_IF_THD(thd, _sync_point_name_) do { } while(0) #endif /* defined(ENABLED_DEBUG_SYNC) */ /* compatibility macro */ #ifdef __cplusplus #define DEBUG_SYNC_C(name) DEBUG_SYNC(nullptr, name) #else #define DEBUG_SYNC_C(name) DEBUG_SYNC(NULL, name) #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_DEBUG_SYNC_INCLUDED #endif PKe[8kGGservice_my_crypt.hnu[#ifndef MYSQL_SERVICE_MY_CRYPT_INCLUDED #define MYSQL_SERVICE_MY_CRYPT_INCLUDED /* Copyright (c) 2014 Google Inc. Copyright (c) 2014, 2015 MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file my crypt service AES encryption functions, and a function to generate random bytes. Include my_config.h before this file to use CTR and GCM modes (they only work if server was compiled with openssl). */ #ifdef __cplusplus extern "C" { #endif /* return values from my_aes_encrypt/my_aes_decrypt functions */ #define MY_AES_OK 0 #define MY_AES_BAD_DATA -100 #define MY_AES_OPENSSL_ERROR -101 #define MY_AES_BAD_KEYSIZE -102 /* The block size for all supported algorithms */ #define MY_AES_BLOCK_SIZE 16 /* The max key length of all supported algorithms */ #define MY_AES_MAX_KEY_LENGTH 32 #define MY_AES_CTX_SIZE 1040 enum my_aes_mode { MY_AES_ECB, MY_AES_CBC #ifdef HAVE_EncryptAes128Ctr , MY_AES_CTR #endif #ifdef HAVE_EncryptAes128Gcm , MY_AES_GCM #endif }; extern struct my_crypt_service_st { int (*my_aes_crypt_init)(void *ctx, enum my_aes_mode mode, int flags, const unsigned char* key, unsigned int klen, const unsigned char* iv, unsigned int ivlen); int (*my_aes_crypt_update)(void *ctx, const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen); int (*my_aes_crypt_finish)(void *ctx, unsigned char *dst, unsigned int *dlen); int (*my_aes_crypt)(enum my_aes_mode mode, int flags, const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); unsigned int (*my_aes_get_size)(enum my_aes_mode mode, unsigned int source_length); unsigned int (*my_aes_ctx_size)(enum my_aes_mode mode); int (*my_random_bytes)(unsigned char* buf, int num); } *my_crypt_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_aes_crypt_init(A,B,C,D,E,F,G) \ my_crypt_service->my_aes_crypt_init(A,B,C,D,E,F,G) #define my_aes_crypt_update(A,B,C,D,E) \ my_crypt_service->my_aes_crypt_update(A,B,C,D,E) #define my_aes_crypt_finish(A,B,C) \ my_crypt_service->my_aes_crypt_finish(A,B,C) #define my_aes_crypt(A,B,C,D,E,F,G,H,I,J) \ my_crypt_service->my_aes_crypt(A,B,C,D,E,F,G,H,I,J) #define my_aes_get_size(A,B)\ my_crypt_service->my_aes_get_size(A,B) #define my_aes_ctx_size(A)\ my_crypt_service->my_aes_ctx_size(A) #define my_random_bytes(A,B)\ my_crypt_service->my_random_bytes(A,B) #else int my_aes_crypt_init(void *ctx, enum my_aes_mode mode, int flags, const unsigned char* key, unsigned int klen, const unsigned char* iv, unsigned int ivlen); int my_aes_crypt_update(void *ctx, const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen); int my_aes_crypt_finish(void *ctx, unsigned char *dst, unsigned int *dlen); int my_aes_crypt(enum my_aes_mode mode, int flags, const unsigned char *src, unsigned int slen, unsigned char *dst, unsigned int *dlen, const unsigned char *key, unsigned int klen, const unsigned char *iv, unsigned int ivlen); int my_random_bytes(unsigned char* buf, int num); unsigned int my_aes_get_size(enum my_aes_mode mode, unsigned int source_length); unsigned int my_aes_ctx_size(enum my_aes_mode mode); #endif #ifdef __cplusplus } #endif #endif /* MYSQL_SERVICE_MY_CRYPT_INCLUDED */ PKe[Tplugin_function.hnu[#ifndef MARIADB_PLUGIN_FUNCTION_INCLUDED #define MARIADB_PLUGIN_FUNCTION_INCLUDED /* Copyright (C) 2019, Alexander Barkov and MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file Function Plugin API. This file defines the API for server plugins that manage functions. */ #ifdef __cplusplus #include /* API for function plugins. (MariaDB_FUNCTION_PLUGIN) */ #define MariaDB_FUNCTION_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) class Plugin_function { int m_interface_version; Create_func *m_builder; public: Plugin_function(Create_func *builder) :m_interface_version(MariaDB_FUNCTION_INTERFACE_VERSION), m_builder(builder) { } Create_func *create_func() { return m_builder; } }; #endif /* __cplusplus */ #endif /* MARIADB_PLUGIN_FUNCTION_INCLUDED */ PKe[ߦ##client_plugin.hnu[/* Copyright (C) 2010 - 2012 Sergei Golubchik and Monty Program Ab 2014, 2022 MariaDB Corporation AB This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not see or write to the Free Software Foundation, Inc., 51 Franklin St., Fifth Floor, Boston, MA 02110, USA */ /** @file MySQL Client Plugin API This file defines the API for plugins that work on the client side */ #ifndef MYSQL_CLIENT_PLUGIN_INCLUDED #define MYSQL_CLIENT_PLUGIN_INCLUDED #ifndef MYSQL_ABI_CHECK #include #include #endif #ifndef PLUGINDIR #define PLUGINDIR "lib/plugin" #endif #define plugin_declarations_sym "_mysql_client_plugin_declaration_" /* known plugin types */ #define MYSQL_CLIENT_PLUGIN_RESERVED 0 #define MYSQL_CLIENT_PLUGIN_RESERVED2 1 #define MYSQL_CLIENT_AUTHENTICATION_PLUGIN 2 /* authentication */ #define MYSQL_CLIENT_AUTHENTICATION_PLUGIN_INTERFACE_VERSION 0x0100 #define MYSQL_CLIENT_MAX_PLUGINS 3 /* Connector/C specific plugin types */ #define MARIADB_CLIENT_REMOTEIO_PLUGIN 100 /* communication IO */ #define MARIADB_CLIENT_PVIO_PLUGIN 101 #define MARIADB_CLIENT_TRACE_PLUGIN 102 #define MARIADB_CLIENT_CONNECTION_PLUGIN 103 #define MARIADB_CLIENT_COMPRESSION_PLUGIN 104 #define MARIADB_CLIENT_REMOTEIO_PLUGIN_INTERFACE_VERSION 0x0100 #define MARIADB_CLIENT_PVIO_PLUGIN_INTERFACE_VERSION 0x0100 #define MARIADB_CLIENT_TRACE_PLUGIN_INTERFACE_VERSION 0x0100 #define MARIADB_CLIENT_CONNECTION_PLUGIN_INTERFACE_VERSION 0x0100 #define MARIADB_CLIENT_COMPRESSION_PLUGIN_INTERFACE_VERSION 0x0100 #define MARIADB_CLIENT_MAX_PLUGINS 5 #define mysql_declare_client_plugin(X) \ struct st_mysql_client_plugin_ ## X \ _mysql_client_plugin_declaration_ = { \ MYSQL_CLIENT_ ## X ## _PLUGIN, \ MYSQL_CLIENT_ ## X ## _PLUGIN_INTERFACE_VERSION, #define mysql_end_client_plugin } /* generic plugin header structure */ #ifndef MYSQL_CLIENT_PLUGIN_HEADER #define MYSQL_CLIENT_PLUGIN_HEADER \ int type; \ unsigned int interface_version; \ const char *name; \ const char *author; \ const char *desc; \ unsigned int version[3]; \ const char *license; \ void *mysql_api; \ int (*init)(char *, size_t, int, va_list); \ int (*deinit)(void); \ int (*options)(const char *option, const void *); struct st_mysql_client_plugin { MYSQL_CLIENT_PLUGIN_HEADER }; #endif struct st_mysql; /********* connection handler plugin specific declarations **********/ typedef struct st_ma_connection_plugin { MYSQL_CLIENT_PLUGIN_HEADER /* functions */ MYSQL *(*connect)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); void (*close)(MYSQL *mysql); int (*set_optionsv)(MYSQL *mysql, unsigned int option, ...); int (*set_connection)(MYSQL *mysql,enum enum_server_command command, const char *arg, size_t length, my_bool skipp_check, void *opt_arg); my_bool (*reconnect)(MYSQL *mysql); int (*reset)(MYSQL *mysql); } MARIADB_CONNECTION_PLUGIN; #define MARIADB_DB_DRIVER(a) ((a)->ext_db) /******************* Communication IO plugin *****************/ #include typedef struct st_mariadb_client_plugin_PVIO { MYSQL_CLIENT_PLUGIN_HEADER struct st_ma_pvio_methods *methods; } MARIADB_PVIO_PLUGIN; /******** authentication plugin specific declarations *********/ #include struct st_mysql_client_plugin_AUTHENTICATION { MYSQL_CLIENT_PLUGIN_HEADER int (*authenticate_user)(MYSQL_PLUGIN_VIO *vio, struct st_mysql *mysql); }; /******** trace plugin *******/ struct st_mysql_client_plugin_TRACE { MYSQL_CLIENT_PLUGIN_HEADER }; #include typedef struct st_mariadb_client_plugin_COMPRESS { MYSQL_CLIENT_PLUGIN_HEADER ma_compress_ctx *(*init_ctx)(int compression_level); void (*free_ctx)(ma_compress_ctx *ctx); my_bool (*compress)(ma_compress_ctx *ctx, void *dst, size_t *dst_len, void *source, size_t source_len); my_bool (*decompress)(ma_compress_ctx *ctx, void *dst, size_t *dst_len, void *source, size_t *source_len); } MARIADB_COMPRESSION_PLUGIN; /** type of the mysql_authentication_dialog_ask function @param mysql mysql @param type type of the input 1 - ordinary string input 2 - password string @param prompt prompt @param buf a buffer to store the use input @param buf_len the length of the buffer @retval a pointer to the user input string. It may be equal to 'buf' or to 'mysql->password'. In all other cases it is assumed to be an allocated string, and the "dialog" plugin will free() it. */ typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, int type, const char *prompt, char *buf, int buf_len); /********************** remote IO plugin **********************/ #ifdef HAVE_REMOTEIO #include /* Remote IO plugin */ typedef struct st_mysql_client_plugin_REMOTEIO { MYSQL_CLIENT_PLUGIN_HEADER struct st_rio_methods *methods; } MARIADB_REMOTEIO_PLUGIN; #endif /******** using plugins ************/ /** loads a plugin and initializes it @param mysql MYSQL structure. only MYSQL_PLUGIN_DIR option value is used, and last_errno/last_error, for error reporting @param name a name of the plugin to load @param type type of plugin that should be loaded, -1 to disable type check @param argc number of arguments to pass to the plugin initialization function @param ... arguments for the plugin initialization function @retval a pointer to the loaded plugin, or NULL in case of a failure */ struct st_mysql_client_plugin * mysql_load_plugin(struct st_mysql *mysql, const char *name, int type, int argc, ...); /** loads a plugin and initializes it, taking va_list as an argument This is the same as mysql_load_plugin, but take va_list instead of a list of arguments. @param mysql MYSQL structure. only MYSQL_PLUGIN_DIR option value is used, and last_errno/last_error, for error reporting @param name a name of the plugin to load @param type type of plugin that should be loaded, -1 to disable type check @param argc number of arguments to pass to the plugin initialization function @param args arguments for the plugin initialization function @retval a pointer to the loaded plugin, or NULL in case of a failure */ struct st_mysql_client_plugin * STDCALL mysql_load_plugin_v(struct st_mysql *mysql, const char *name, int type, int argc, va_list args); /** finds an already loaded plugin by name, or loads it, if necessary @param mysql MYSQL structure. only MYSQL_PLUGIN_DIR option value is used, and last_errno/last_error, for error reporting @param name a name of the plugin to load @param type type of plugin that should be loaded @retval a pointer to the plugin, or NULL in case of a failure */ struct st_mysql_client_plugin * STDCALL mysql_client_find_plugin(struct st_mysql *mysql, const char *name, int type); /** adds a plugin structure to the list of loaded plugins This is useful if an application has the necessary functionality (for example, a special load data handler) statically linked into the application binary. It can use this function to register the plugin directly, avoiding the need to factor it out into a shared object. @param mysql MYSQL structure. It is only used for error reporting @param plugin an st_mysql_client_plugin structure to register @retval a pointer to the plugin, or NULL in case of a failure */ struct st_mysql_client_plugin * STDCALL mysql_client_register_plugin(struct st_mysql *mysql, struct st_mysql_client_plugin *plugin); extern struct st_mysql_client_plugin *mysql_client_builtins[]; #endif PKe[' plugin_auth.hnu[#ifndef MYSQL_PLUGIN_AUTH_COMMON_INCLUDED /* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, USA */ /** @file This file defines constants and data structures that are the same for both client- and server-side authentication plugins. */ #define MYSQL_PLUGIN_AUTH_COMMON_INCLUDED /** the max allowed length for a user name */ #define MYSQL_USERNAME_LENGTH 512 /** return values of the plugin authenticate_user() method. */ /** Authentication failed. Additionally, all other CR_xxx values (libmariadb error code) can be used too. The client plugin may set the error code and the error message directly in the MYSQL structure and return CR_ERROR. If a CR_xxx specific error code was returned, an error message in the MYSQL structure will be overwritten. If CR_ERROR is returned without setting the error in MYSQL, CR_UNKNOWN_ERROR will be user. */ #define CR_ERROR 0 /** Authentication (client part) was successful. It does not mean that the authentication as a whole was successful, usually it only means that the client was able to send the user name and the password to the server. If CR_OK is returned, the libmariadb reads the next packet expecting it to be one of OK, ERROR, or CHANGE_PLUGIN packets. */ #define CR_OK -1 /** Authentication was successful. It means that the client has done its part successfully and also that a plugin has read the last packet (one of OK, ERROR, CHANGE_PLUGIN). In this case, libmariadb will not read a packet from the server, but it will use the data at mysql->net.read_pos. A plugin may return this value if the number of roundtrips in the authentication protocol is not known in advance, and the client plugin needs to read one packet more to determine if the authentication is finished or not. */ #define CR_OK_HANDSHAKE_COMPLETE -2 typedef struct st_plugin_vio_info { enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; int socket; /**< it's set, if the protocol is SOCKET or TCP */ #ifdef _WIN32 HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */ #endif } MYSQL_PLUGIN_VIO_INFO; /** Provides plugin access to communication channel */ typedef struct st_plugin_vio { /** Plugin provides a pointer reference and this function sets it to the contents of any incoming packet. Returns the packet length, or -1 if the plugin should terminate. */ int (*read_packet)(struct st_plugin_vio *vio, unsigned char **buf); /** Plugin provides a buffer with data and the length and this function sends it as a packet. Returns 0 on success, 1 on failure. */ int (*write_packet)(struct st_plugin_vio *vio, const unsigned char *packet, int packet_len); /** Fills in a st_plugin_vio_info structure, providing the information about the connection. */ void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); } MYSQL_PLUGIN_VIO; #endif PKe[[ttplugin.hnu[/* Copyright (c) 2005, 2013, Oracle and/or its affiliates Copyright (C) 2009, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_PLUGIN_INCLUDED #define MYSQL_PLUGIN_INCLUDED /* On Windows, exports from DLL need to be declared Also, plugin needs to be declared as extern "C" because MSVC unlike other compilers, uses C++ mangling for variables not only for functions. */ #ifdef MYSQL_DYNAMIC_PLUGIN #ifdef _MSC_VER #define MYSQL_DLLEXPORT _declspec(dllexport) #else #define MYSQL_DLLEXPORT #endif #else #define MYSQL_DLLEXPORT #endif #ifdef __cplusplus #define MYSQL_PLUGIN_EXPORT extern "C" MYSQL_DLLEXPORT #else #define MYSQL_PLUGIN_EXPORT MYSQL_DLLEXPORT #endif #ifdef __cplusplus class THD; class Item; #define MYSQL_THD THD* #else struct THD; typedef struct THD* MYSQL_THD; #endif typedef char my_bool; typedef void * MYSQL_PLUGIN; #include #define MYSQL_XIDDATASIZE 128 /** struct st_mysql_xid is binary compatible with the XID structure as in the X/Open CAE Specification, Distributed Transaction Processing: The XA Specification, X/Open Company Ltd., 1991. http://www.opengroup.org/bookstore/catalog/c193.htm @see XID in sql/handler.h */ struct st_mysql_xid { long formatID; long gtrid_length; long bqual_length; char data[MYSQL_XIDDATASIZE]; /* Not \0-terminated */ }; typedef struct st_mysql_xid MYSQL_XID; /************************************************************************* Plugin API. Common for all plugin types. */ /* MySQL plugin interface version */ #define MYSQL_PLUGIN_INTERFACE_VERSION 0x0104 /* MariaDB plugin interface version */ #define MARIA_PLUGIN_INTERFACE_VERSION 0x010e /* The allowable types of plugins */ #define MYSQL_UDF_PLUGIN 0 /* not implemented */ #define MYSQL_STORAGE_ENGINE_PLUGIN 1 #define MYSQL_FTPARSER_PLUGIN 2 /* Full-text parser plugin */ #define MYSQL_DAEMON_PLUGIN 3 #define MYSQL_INFORMATION_SCHEMA_PLUGIN 4 #define MYSQL_AUDIT_PLUGIN 5 #define MYSQL_REPLICATION_PLUGIN 6 #define MYSQL_AUTHENTICATION_PLUGIN 7 #define MYSQL_MAX_PLUGIN_TYPE_NUM 12 /* The number of plugin types */ /* MariaDB plugin types */ #define MariaDB_PASSWORD_VALIDATION_PLUGIN 8 #define MariaDB_ENCRYPTION_PLUGIN 9 #define MariaDB_DATA_TYPE_PLUGIN 10 #define MariaDB_FUNCTION_PLUGIN 11 /* We use the following strings to define licenses for plugins */ #define PLUGIN_LICENSE_PROPRIETARY 0 #define PLUGIN_LICENSE_GPL 1 #define PLUGIN_LICENSE_BSD 2 #define PLUGIN_LICENSE_PROPRIETARY_STRING "PROPRIETARY" #define PLUGIN_LICENSE_GPL_STRING "GPL" #define PLUGIN_LICENSE_BSD_STRING "BSD" /* definitions of code maturity for plugins */ #define MariaDB_PLUGIN_MATURITY_UNKNOWN 0 #define MariaDB_PLUGIN_MATURITY_EXPERIMENTAL 1 #define MariaDB_PLUGIN_MATURITY_ALPHA 2 #define MariaDB_PLUGIN_MATURITY_BETA 3 #define MariaDB_PLUGIN_MATURITY_GAMMA 4 #define MariaDB_PLUGIN_MATURITY_STABLE 5 /* Macros for beginning and ending plugin declarations. Between mysql_declare_plugin and mysql_declare_plugin_end there should be a st_mysql_plugin struct for each plugin to be declared. */ #ifndef MYSQL_DYNAMIC_PLUGIN #define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ int VERSION= MYSQL_PLUGIN_INTERFACE_VERSION; \ int PSIZE= sizeof(struct st_mysql_plugin); \ struct st_mysql_plugin DECLS[]= { #define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \ MYSQL_PLUGIN_EXPORT int VERSION; \ int VERSION= MARIA_PLUGIN_INTERFACE_VERSION; \ MYSQL_PLUGIN_EXPORT int PSIZE; \ int PSIZE= sizeof(struct st_maria_plugin); \ MYSQL_PLUGIN_EXPORT struct st_maria_plugin DECLS[]; \ struct st_maria_plugin DECLS[]= { #else #define __MYSQL_DECLARE_PLUGIN(NAME, VERSION, PSIZE, DECLS) \ MYSQL_PLUGIN_EXPORT int _mysql_plugin_interface_version_; \ int _mysql_plugin_interface_version_= MYSQL_PLUGIN_INTERFACE_VERSION; \ MYSQL_PLUGIN_EXPORT int _mysql_sizeof_struct_st_plugin_; \ int _mysql_sizeof_struct_st_plugin_= sizeof(struct st_mysql_plugin); \ MYSQL_PLUGIN_EXPORT struct st_mysql_plugin _mysql_plugin_declarations_[]; \ struct st_mysql_plugin _mysql_plugin_declarations_[]= { #define MARIA_DECLARE_PLUGIN__(NAME, VERSION, PSIZE, DECLS) \ MYSQL_PLUGIN_EXPORT int _maria_plugin_interface_version_; \ int _maria_plugin_interface_version_= MARIA_PLUGIN_INTERFACE_VERSION; \ MYSQL_PLUGIN_EXPORT int _maria_sizeof_struct_st_plugin_; \ int _maria_sizeof_struct_st_plugin_= sizeof(struct st_maria_plugin); \ MYSQL_PLUGIN_EXPORT struct st_maria_plugin _maria_plugin_declarations_[]; \ struct st_maria_plugin _maria_plugin_declarations_[]= { #endif #define mysql_declare_plugin(NAME) \ __MYSQL_DECLARE_PLUGIN(NAME, \ builtin_ ## NAME ## _plugin_interface_version, \ builtin_ ## NAME ## _sizeof_struct_st_plugin, \ builtin_ ## NAME ## _plugin) #define maria_declare_plugin(NAME) \ MARIA_DECLARE_PLUGIN__(NAME, \ builtin_maria_ ## NAME ## _plugin_interface_version, \ builtin_maria_ ## NAME ## _sizeof_struct_st_plugin, \ builtin_maria_ ## NAME ## _plugin) #define mysql_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}} #define maria_declare_plugin_end ,{0,0,0,0,0,0,0,0,0,0,0,0,0}} /* declarations for SHOW STATUS support in plugins */ enum enum_mysql_show_type { SHOW_UNDEF, SHOW_BOOL, SHOW_UINT, SHOW_ULONG, SHOW_ULONGLONG, SHOW_CHAR, SHOW_CHAR_PTR, SHOW_ARRAY, SHOW_FUNC, SHOW_DOUBLE, SHOW_SINT, SHOW_SLONG, SHOW_SLONGLONG, SHOW_SIMPLE_FUNC, SHOW_SIZE_T, SHOW_always_last }; /* backward compatibility mapping. */ #define SHOW_INT SHOW_UINT #define SHOW_LONG SHOW_ULONG #define SHOW_LONGLONG SHOW_ULONGLONG enum enum_var_type { SHOW_OPT_DEFAULT= 0, SHOW_OPT_SESSION, SHOW_OPT_GLOBAL }; struct st_mysql_show_var { const char *name; void *value; enum enum_mysql_show_type type; }; struct system_status_var; #define SHOW_VAR_FUNC_BUFF_SIZE (256 * sizeof(void*)) typedef int (*mysql_show_var_func)(MYSQL_THD, struct st_mysql_show_var*, void *, struct system_status_var *status_var, enum enum_var_type); static inline struct st_mysql_show_var SHOW_FUNC_ENTRY(const char *name, mysql_show_var_func func_arg) { struct st_mysql_show_var tmp; tmp.name= name; tmp.value= (void*) func_arg; tmp.type= SHOW_FUNC; return tmp; }; /* Constants for plugin flags. */ #define PLUGIN_OPT_NO_INSTALL 1UL /* Not dynamically loadable */ #define PLUGIN_OPT_NO_UNINSTALL 2UL /* Not dynamically unloadable */ /* declarations for server variables and command line options */ #define PLUGIN_VAR_BOOL 0x0001 #define PLUGIN_VAR_INT 0x0002 #define PLUGIN_VAR_LONG 0x0003 #define PLUGIN_VAR_LONGLONG 0x0004 #define PLUGIN_VAR_STR 0x0005 #define PLUGIN_VAR_ENUM 0x0006 #define PLUGIN_VAR_SET 0x0007 #define PLUGIN_VAR_DOUBLE 0x0008 #define PLUGIN_VAR_UNSIGNED 0x0080 #define PLUGIN_VAR_THDLOCAL 0x0100 /* Variable is per-connection */ #define PLUGIN_VAR_READONLY 0x0200 /* Server variable is read only */ #define PLUGIN_VAR_NOSYSVAR 0x0400 /* Not a server variable */ #define PLUGIN_VAR_NOCMDOPT 0x0800 /* Not a command line option */ #define PLUGIN_VAR_NOCMDARG 0x1000 /* No argument for cmd line */ #define PLUGIN_VAR_RQCMDARG 0x0000 /* Argument required for cmd line */ #define PLUGIN_VAR_OPCMDARG 0x2000 /* Argument optional for cmd line */ #define PLUGIN_VAR_DEPRECATED 0x4000 /* Server variable is deprecated */ #define PLUGIN_VAR_MEMALLOC 0x8000 /* String needs memory allocated */ struct st_mysql_sys_var; struct st_mysql_value; /* SYNOPSIS (*mysql_var_check_func)() thd thread handle var dynamic variable being altered save pointer to temporary storage value user provided value RETURN 0 user provided value is OK and the update func may be called. any other value indicates error. This function should parse the user provided value and store in the provided temporary storage any data as required by the update func. There is sufficient space in the temporary storage to store a double. Note that the update func may not be called if any other error occurs so any memory allocated should be thread-local so that it may be freed automatically at the end of the statement. */ typedef int (*mysql_var_check_func)(MYSQL_THD thd, struct st_mysql_sys_var *var, void *save, struct st_mysql_value *value); /* SYNOPSIS (*mysql_var_update_func)() thd thread handle var dynamic variable being altered var_ptr pointer to dynamic variable save pointer to temporary storage RETURN NONE This function should use the validated value stored in the temporary store and persist it in the provided pointer to the dynamic variable. For example, strings may require memory to be allocated. */ typedef void (*mysql_var_update_func)(MYSQL_THD thd, struct st_mysql_sys_var *var, void *var_ptr, const void *save); /* the following declarations are for internal use only */ #define PLUGIN_VAR_MASK \ (PLUGIN_VAR_READONLY | PLUGIN_VAR_NOSYSVAR | \ PLUGIN_VAR_NOCMDOPT | PLUGIN_VAR_NOCMDARG | \ PLUGIN_VAR_OPCMDARG | PLUGIN_VAR_RQCMDARG | \ PLUGIN_VAR_DEPRECATED | PLUGIN_VAR_MEMALLOC) #define MYSQL_PLUGIN_VAR_HEADER \ int flags; \ const char *name; \ const char *comment; \ mysql_var_check_func check; \ mysql_var_update_func update #define MYSQL_SYSVAR_NAME(name) mysql_sysvar_ ## name #define MYSQL_SYSVAR(name) \ ((struct st_mysql_sys_var *)&(MYSQL_SYSVAR_NAME(name))) /* for global variables, the value pointer is the first element after the header, the default value is the second. for thread variables, the value offset is the first element after the header, the default value is the second. */ #define DECLARE_MYSQL_SYSVAR_BASIC(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ type *value; \ const type def_val; \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_MYSQL_SYSVAR_CONST_BASIC(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ const type *value; \ const type def_val; \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_MYSQL_SYSVAR_SIMPLE(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ type *value; type def_val; \ type min_val; type max_val; \ type blk_sz; \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_MYSQL_SYSVAR_TYPELIB(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ type *value; type def_val; \ TYPELIB *typelib; \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_THDVAR_FUNC(type) \ type *(*resolve)(MYSQL_THD thd, int offset) #define DECLARE_MYSQL_THDVAR_BASIC(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ int offset; \ const type def_val; \ DECLARE_THDVAR_FUNC(type); \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_MYSQL_THDVAR_SIMPLE(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ int offset; \ type def_val; type min_val; \ type max_val; type blk_sz; \ DECLARE_THDVAR_FUNC(type); \ } MYSQL_SYSVAR_NAME(name) #define DECLARE_MYSQL_THDVAR_TYPELIB(name, type) struct { \ MYSQL_PLUGIN_VAR_HEADER; \ int offset; \ const type def_val; \ DECLARE_THDVAR_FUNC(type); \ TYPELIB *typelib; \ } MYSQL_SYSVAR_NAME(name) /* the following declarations are for use by plugin implementors */ #define MYSQL_SYSVAR_BOOL(name, varname, opt, comment, check, update, def) \ DECLARE_MYSQL_SYSVAR_BASIC(name, char) = { \ PLUGIN_VAR_BOOL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def} #define MYSQL_SYSVAR_STR(name, varname, opt, comment, check, update, def) \ DECLARE_MYSQL_SYSVAR_BASIC(name, char *) = { \ PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def} #define MYSQL_SYSVAR_CONST_STR(name, varname, opt, comment, check, update, def) \ DECLARE_MYSQL_SYSVAR_CONST_BASIC(name, char *) = { \ PLUGIN_VAR_STR | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def} #define MYSQL_SYSVAR_INT(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, int) = { \ PLUGIN_VAR_INT | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_UINT(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned int) = { \ PLUGIN_VAR_INT | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_LONG(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, long) = { \ PLUGIN_VAR_LONG | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_ULONG(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long) = { \ PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_LONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, long long) = { \ PLUGIN_VAR_LONGLONG | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_ULONGLONG(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_SYSVAR_UINT64_T(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, uint64_t) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #ifdef _WIN64 #define MYSQL_SYSVAR_SIZE_T(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, size_t) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #else #define MYSQL_SYSVAR_SIZE_T(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, size_t) = { \ PLUGIN_VAR_LONG | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #endif #define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \ DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \ PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, typelib } #define MYSQL_SYSVAR_SET(name, varname, opt, comment, check, update, def, typelib) \ DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long long) = { \ PLUGIN_VAR_SET | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, typelib } #define MYSQL_SYSVAR_DOUBLE(name, varname, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_SYSVAR_SIMPLE(name, double) = { \ PLUGIN_VAR_DOUBLE | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, &varname, def, min, max, blk } #define MYSQL_THDVAR_BOOL(name, opt, comment, check, update, def) \ DECLARE_MYSQL_THDVAR_BASIC(name, char) = { \ PLUGIN_VAR_BOOL | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, NULL} #define MYSQL_THDVAR_STR(name, opt, comment, check, update, def) \ DECLARE_MYSQL_THDVAR_BASIC(name, char *) = { \ PLUGIN_VAR_STR | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, NULL} #define MYSQL_THDVAR_INT(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, int) = { \ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_UINT(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned int) = { \ PLUGIN_VAR_INT | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_LONG(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, long) = { \ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_ULONG(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long) = { \ PLUGIN_VAR_LONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_LONGLONG(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, long long) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_ULONGLONG(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, unsigned long long) = { \ PLUGIN_VAR_LONGLONG | PLUGIN_VAR_THDLOCAL | PLUGIN_VAR_UNSIGNED | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } #define MYSQL_THDVAR_ENUM(name, opt, comment, check, update, def, typelib) \ DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long) = { \ PLUGIN_VAR_ENUM | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, NULL, typelib } #define MYSQL_THDVAR_SET(name, opt, comment, check, update, def, typelib) \ DECLARE_MYSQL_THDVAR_TYPELIB(name, unsigned long long) = { \ PLUGIN_VAR_SET | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, NULL, typelib } #define MYSQL_THDVAR_DOUBLE(name, opt, comment, check, update, def, min, max, blk) \ DECLARE_MYSQL_THDVAR_SIMPLE(name, double) = { \ PLUGIN_VAR_DOUBLE | PLUGIN_VAR_THDLOCAL | ((opt) & PLUGIN_VAR_MASK), \ #name, comment, check, update, -1, def, min, max, blk, NULL } /* accessor macros */ #define SYSVAR(name) \ (*(MYSQL_SYSVAR_NAME(name).value)) /* when thd == null, result points to global value */ #define THDVAR(thd, name) \ (*(MYSQL_SYSVAR_NAME(name).resolve(thd, MYSQL_SYSVAR_NAME(name).offset))) /* Plugin description structure. */ struct st_mysql_plugin { int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ void *info; /* pointer to type-specific plugin descriptor */ const char *name; /* plugin name */ const char *author; /* plugin author (for I_S.PLUGINS) */ const char *descr; /* general descriptive text (for I_S.PLUGINS) */ int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ /* The function to invoke when plugin is loaded. Plugin initialisation done here should defer any ALTER TABLE queries to after the ddl recovery is done, in the signal_ddl_recovery_done() callback called by ha_signal_ddl_recovery_done(). */ int (*init)(void *); int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ unsigned int version; /* plugin version (for I_S.PLUGINS) */ struct st_mysql_show_var *status_vars; struct st_mysql_sys_var **system_vars; void * __reserved1; /* reserved for dependency checking */ unsigned long flags; /* flags for plugin */ }; /* MariaDB extension for plugins declaration structure. It also copy current MySQL plugin fields to have more independency in plugins extension */ struct st_maria_plugin { int type; /* the plugin type (a MYSQL_XXX_PLUGIN value) */ void *info; /* pointer to type-specific plugin descriptor */ const char *name; /* plugin name */ const char *author; /* plugin author (for SHOW PLUGINS) */ const char *descr; /* general descriptive text (for SHOW PLUGINS ) */ int license; /* the plugin license (PLUGIN_LICENSE_XXX) */ /* The function to invoke when plugin is loaded. Plugin initialisation done here should defer any ALTER TABLE queries to after the ddl recovery is done, in the signal_ddl_recovery_done() callback called by ha_signal_ddl_recovery_done(). */ int (*init)(void *); int (*deinit)(void *);/* the function to invoke when plugin is unloaded */ unsigned int version; /* plugin version (for SHOW PLUGINS) */ struct st_mysql_show_var *status_vars; struct st_mysql_sys_var **system_vars; const char *version_info; /* plugin version string */ unsigned int maturity; /* MariaDB_PLUGIN_MATURITY_XXX */ }; /************************************************************************* API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) */ #include "plugin_ftparser.h" /************************************************************************* API for Storage Engine plugin. (MYSQL_DAEMON_PLUGIN) */ /* handlertons of different MySQL releases are incompatible */ #define MYSQL_DAEMON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) /* Here we define only the descriptor structure, that is referred from st_mysql_plugin. */ struct st_mysql_daemon { int interface_version; }; /************************************************************************* API for I_S plugin. (MYSQL_INFORMATION_SCHEMA_PLUGIN) */ /* handlertons of different MySQL releases are incompatible */ #define MYSQL_INFORMATION_SCHEMA_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) /* Here we define only the descriptor structure, that is referred from st_mysql_plugin. */ struct st_mysql_information_schema { int interface_version; }; /************************************************************************* API for Storage Engine plugin. (MYSQL_STORAGE_ENGINE_PLUGIN) */ /* handlertons of different MySQL releases are incompatible */ #define MYSQL_HANDLERTON_INTERFACE_VERSION (MYSQL_VERSION_ID << 8) /* The real API is in the sql/handler.h Here we define only the descriptor structure, that is referred from st_mysql_plugin. */ struct st_mysql_storage_engine { int interface_version; }; struct handlerton; /* API for Replication plugin. (MYSQL_REPLICATION_PLUGIN) */ #define MYSQL_REPLICATION_INTERFACE_VERSION 0x0200 /** Replication plugin descriptor */ struct Mysql_replication { int interface_version; }; /************************************************************************* st_mysql_value struct for reading values from mysqld. Used by server variables framework to parse user-provided values. Will be used for arguments when implementing UDFs. Note that val_str() returns a string in temporary memory that will be freed at the end of statement. Copy the string if you need it to persist. */ #define MYSQL_VALUE_TYPE_STRING 0 #define MYSQL_VALUE_TYPE_REAL 1 #define MYSQL_VALUE_TYPE_INT 2 struct st_mysql_value { int (*value_type)(struct st_mysql_value *); const char *(*val_str)(struct st_mysql_value *, char *buffer, int *length); int (*val_real)(struct st_mysql_value *, double *realbuf); int (*val_int)(struct st_mysql_value *, long long *intbuf); int (*is_unsigned)(struct st_mysql_value *); }; /************************************************************************* Miscellaneous functions for plugin implementors */ #ifdef __cplusplus extern "C" { #endif int thd_in_lock_tables(const MYSQL_THD thd); int thd_tablespace_op(const MYSQL_THD thd); long long thd_test_options(const MYSQL_THD thd, long long test_options); int thd_sql_command(const MYSQL_THD thd); struct DDL_options_st; struct DDL_options_st *thd_ddl_options(const MYSQL_THD thd); void thd_storage_lock_wait(MYSQL_THD thd, long long value); int thd_tx_isolation(const MYSQL_THD thd); int thd_tx_is_read_only(const MYSQL_THD thd); /** Create a temporary file. @details The temporary file is created in a location specified by the mysql server configuration (--tmpdir option). The caller does not need to delete the file, it will be deleted automatically. @param prefix prefix for temporary file name @retval -1 error @retval >= 0 a file handle that can be passed to dup or my_close */ int mysql_tmpfile(const char *prefix); /** Return the thread id of a user thread @param thd user thread connection handle @return thread id */ unsigned long thd_get_thread_id(const MYSQL_THD thd); /** Get the XID for this connection's transaction @param thd user thread connection handle @param xid location where identifier is stored */ void thd_get_xid(const MYSQL_THD thd, MYSQL_XID *xid); /** Invalidate the query cache for a given table. @param thd user thread connection handle @param key databasename\\0tablename\\0 @param key_length length of key in bytes, including the NUL bytes @param using_trx flag: TRUE if using transactions, FALSE otherwise */ void mysql_query_cache_invalidate4(MYSQL_THD thd, const char *key, unsigned int key_length, int using_trx); /** Provide a handler data getter to simplify coding */ void *thd_get_ha_data(const MYSQL_THD thd, const struct handlerton *hton); /** Provide a handler data setter to simplify coding @details Set ha_data pointer (storage engine per-connection information). To avoid unclean deactivation (uninstall) of storage engine plugin in the middle of transaction, additional storage engine plugin lock is acquired. If ha_data is not null and storage engine plugin was not locked by thd_set_ha_data() in this connection before, storage engine plugin gets locked. If ha_data is null and storage engine plugin was locked by thd_set_ha_data() in this connection before, storage engine plugin lock gets released. If handlerton::close_connection() didn't reset ha_data, server does it immediately after calling handlerton::close_connection(). */ void thd_set_ha_data(MYSQL_THD thd, const struct handlerton *hton, const void *ha_data); /** Signal that the first part of handler commit is finished, and that the committed transaction is now visible and has fixed commit ordering with respect to other transactions. The commit need _not_ be durable yet, and typically will not be when this call makes sense. This call is optional, if the storage engine does not call it the upper layer will after the handler commit() method is done. However, the storage engine may choose to call it itself to increase the possibility for group commit. In-order parallel replication uses this to apply different transaction in parallel, but delay the commits of later transactions until earlier transactions have committed first, thus achieving increased performance on multi-core systems while still preserving full transaction consistency. The storage engine can call this from within the commit() method, typically after the commit record has been written to the transaction log, but before the log has been fsync()'ed. This will allow the next replicated transaction to proceed to commit before the first one has done fsync() or similar. Thus, it becomes possible for multiple sequential replicated transactions to share a single fsync() inside the engine in group commit. Note that this method should _not_ be called from within the commit_ordered() method, or any other place in the storage engine. When commit_ordered() is used (typically when binlog is enabled), the transaction coordinator takes care of this and makes group commit in the storage engine possible without any other action needed on the part of the storage engine. This function thd_wakeup_subsequent_commits() is only needed when no transaction coordinator is used, meaning a single storage engine and no binary log. */ void thd_wakeup_subsequent_commits(MYSQL_THD thd, int wakeup_error); #ifdef __cplusplus } #endif #endif PKe[qaaservice_log_warnings.hnu[/* Copyright (c) 2013, 2018, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SERVICE_LOG_WARNINGS #define MYSQL_SERVICE_LOG_WARNINGS /** @file This service provides access to the log warning level for the current session. thd_log_warnings(thd) @return thd->log_warnings */ #ifdef __cplusplus extern "C" { #endif extern struct thd_log_warnings_service_st { void *(*thd_log_warnings)(MYSQL_THD); } *thd_log_warnings_service; #ifdef MYSQL_DYNAMIC_PLUGIN # define thd_log_warnings(THD) thd_log_warnings_service->thd_log_warnings(THD) #else /** MDL_context accessor @param thd the current session @return pointer to thd->mdl_context */ int thd_log_warnings(MYSQL_THD thd); #endif #ifdef __cplusplus } #endif #endif PKe[|service_thd_timezone.hnu[#ifndef MYSQL_SERVICE_THD_TIMEZONE_INCLUDED /* Copyright (C) 2013 MariaDB Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service provides functions to convert between my_time_t and MYSQL_TIME taking into account the current value of the time_zone session variable. The values of the my_time_t type are in Unix timestamp format, i.e. the number of seconds since "1970-01-01 00:00:00 UTC". The values of the MYSQL_TIME type are in the current time zone, according to thd->variables.time_zone. If the MYSQL_THD parameter is NULL, then global_system_variables.time_zone is used for conversion. */ #ifndef MYSQL_ABI_CHECK /* This service currently does not depend on any system headers. If it needs system headers in the future, make sure to put them inside this ifndef. */ #endif #include "mysql_time.h" #ifdef __cplusplus extern "C" { #endif extern struct thd_timezone_service_st { my_time_t (*thd_TIME_to_gmt_sec)(MYSQL_THD thd, const MYSQL_TIME *ltime, unsigned int *errcode); void (*thd_gmt_sec_to_TIME)(MYSQL_THD thd, MYSQL_TIME *ltime, my_time_t t); } *thd_timezone_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_TIME_to_gmt_sec(thd, ltime, errcode) \ (thd_timezone_service->thd_TIME_to_gmt_sec((thd), (ltime), (errcode))) #define thd_gmt_sec_to_TIME(thd, ltime, t) \ (thd_timezone_service->thd_gmt_sec_to_TIME((thd), (ltime), (t))) #else my_time_t thd_TIME_to_gmt_sec(MYSQL_THD thd, const MYSQL_TIME *ltime, unsigned int *errcode); void thd_gmt_sec_to_TIME(MYSQL_THD thd, MYSQL_TIME *ltime, my_time_t t); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_TIMEZONE_INCLUDED #endif PKe[sGG service_md5.hnu[#ifndef MYSQL_SERVICE_MD5_INCLUDED /* Copyright (c) 2014, Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file my md5 service Functions to calculate MD5 hash from a memory buffer */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #endif #define MY_MD5_HASH_SIZE 16 /* Hash size in bytes */ extern struct my_md5_service_st { void (*my_md5_type)(unsigned char*, const char*, size_t); void (*my_md5_multi_type)(unsigned char*, ...); size_t (*my_md5_context_size_type)(); void (*my_md5_init_type)(void *); void (*my_md5_input_type)(void *, const unsigned char *, size_t); void (*my_md5_result_type)(void *, unsigned char *); } *my_md5_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_md5(A,B,C) my_md5_service->my_md5_type(A,B,C) #define my_md5_multi my_md5_service->my_md5_multi_type #define my_md5_context_size() my_md5_service->my_md5_context_size_type() #define my_md5_init(A) my_md5_service->my_md5_init_type(A) #define my_md5_input(A,B,C) my_md5_service->my_md5_input_type(A,B,C) #define my_md5_result(A,B) my_md5_service->my_md5_result_type(A,B) #else void my_md5(unsigned char*, const char*, size_t); void my_md5_multi(unsigned char*, ...); size_t my_md5_context_size(); void my_md5_init(void *context); void my_md5_input(void *context, const unsigned char *buf, size_t len); void my_md5_result(void *context, unsigned char *digest); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_MD5_INCLUDED #endif PKe[̯N7N7service_wsrep.hnu[#ifndef MYSQL_SERVICE_WSREP_INCLUDED #define MYSQL_SERVICE_WSREP_INCLUDED enum Wsrep_service_key_type { WSREP_SERVICE_KEY_SHARED, WSREP_SERVICE_KEY_REFERENCE, WSREP_SERVICE_KEY_UPDATE, WSREP_SERVICE_KEY_EXCLUSIVE }; #if (defined (MYSQL_DYNAMIC_PLUGIN) && defined(MYSQL_SERVICE_WSREP_DYNAMIC_INCLUDED)) || (!defined(MYSQL_DYNAMIC_PLUGIN) && defined(MYSQL_SERVICE_WSREP_STATIC_INCLUDED)) #else /* Copyright (c) 2015, 2020, MariaDB Corporation Ab 2018 Codership Oy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file wsrep service Interface to WSREP functionality in the server. For engines that want to support galera. */ #include #ifdef __cplusplus #endif struct xid_t; struct wsrep_ws_handle; struct wsrep_buf; /* Must match to definition in sql/mysqld.h */ typedef int64 query_id_t; extern struct wsrep_service_st { my_bool (*get_wsrep_recovery_func)(); bool (*wsrep_consistency_check_func)(MYSQL_THD thd); int (*wsrep_is_wsrep_xid_func)(const void *xid); long long (*wsrep_xid_seqno_func)(const struct xid_t *xid); const unsigned char* (*wsrep_xid_uuid_func)(const struct xid_t *xid); my_bool (*wsrep_on_func)(const MYSQL_THD thd); bool (*wsrep_prepare_key_for_innodb_func)(MYSQL_THD thd, const unsigned char*, size_t, const unsigned char*, size_t, struct wsrep_buf*, size_t*); void (*wsrep_thd_LOCK_func)(const MYSQL_THD thd); int (*wsrep_thd_TRYLOCK_func)(const MYSQL_THD thd); void (*wsrep_thd_UNLOCK_func)(const MYSQL_THD thd); const char * (*wsrep_thd_query_func)(const MYSQL_THD thd); int (*wsrep_thd_retry_counter_func)(const MYSQL_THD thd); bool (*wsrep_thd_ignore_table_func)(MYSQL_THD thd); long long (*wsrep_thd_trx_seqno_func)(const MYSQL_THD thd); my_bool (*wsrep_thd_is_aborting_func)(const MYSQL_THD thd); void (*wsrep_set_data_home_dir_func)(const char *data_dir); my_bool (*wsrep_thd_is_BF_func)(const MYSQL_THD thd, my_bool sync); my_bool (*wsrep_thd_is_local_func)(const MYSQL_THD thd); void (*wsrep_thd_self_abort_func)(MYSQL_THD thd); int (*wsrep_thd_append_key_func)(MYSQL_THD thd, const struct wsrep_key* key, int n_keys, enum Wsrep_service_key_type); int (*wsrep_thd_append_table_key_func)(MYSQL_THD thd, const char* db, const char* table, enum Wsrep_service_key_type); my_bool (*wsrep_thd_is_local_transaction)(const MYSQL_THD thd); const char* (*wsrep_thd_client_state_str_func)(const MYSQL_THD thd); const char* (*wsrep_thd_client_mode_str_func)(const MYSQL_THD thd); const char* (*wsrep_thd_transaction_state_str_func)(const MYSQL_THD thd); query_id_t (*wsrep_thd_transaction_id_func)(const MYSQL_THD thd); my_bool (*wsrep_thd_bf_abort_func)(MYSQL_THD bf_thd, MYSQL_THD victim_thd, my_bool signal); my_bool (*wsrep_thd_order_before_func)(const MYSQL_THD left, const MYSQL_THD right); void (*wsrep_handle_SR_rollback_func)(MYSQL_THD BF_thd, MYSQL_THD victim_thd); my_bool (*wsrep_thd_skip_locking_func)(const MYSQL_THD thd); const char* (*wsrep_get_sr_table_name_func)(); my_bool (*wsrep_get_debug_func)(); void (*wsrep_commit_ordered_func)(MYSQL_THD thd); my_bool (*wsrep_thd_is_applying_func)(const MYSQL_THD thd); ulong (*wsrep_OSU_method_get_func)(const MYSQL_THD thd); my_bool (*wsrep_thd_has_ignored_error_func)(const MYSQL_THD thd); void (*wsrep_thd_set_ignored_error_func)(MYSQL_THD thd, my_bool val); void (*wsrep_report_bf_lock_wait_func)(const MYSQL_THD thd, unsigned long long trx_id); void (*wsrep_thd_kill_LOCK_func)(const MYSQL_THD thd); void (*wsrep_thd_kill_UNLOCK_func)(const MYSQL_THD thd); void (*wsrep_thd_set_wsrep_PA_unsafe_func)(MYSQL_THD thd); uint32 (*wsrep_get_domain_id_func)(); } *wsrep_service; #define MYSQL_SERVICE_WSREP_INCLUDED #endif #ifdef MYSQL_DYNAMIC_PLUGIN #define MYSQL_SERVICE_WSREP_DYNAMIC_INCLUDED #define get_wsrep_recovery() wsrep_service->get_wsrep_recovery_func() #define wsrep_consistency_check(T) wsrep_service->wsrep_consistency_check_func(T) #define wsrep_is_wsrep_xid(X) wsrep_service->wsrep_is_wsrep_xid_func(X) #define wsrep_xid_seqno(X) wsrep_service->wsrep_xid_seqno_func(X) #define wsrep_xid_uuid(X) wsrep_service->wsrep_xid_uuid_func(X) #define wsrep_on(thd) (thd) && WSREP_ON && wsrep_service->wsrep_on_func(thd) #define wsrep_prepare_key_for_innodb(A,B,C,D,E,F,G) wsrep_service->wsrep_prepare_key_for_innodb_func(A,B,C,D,E,F,G) #define wsrep_thd_LOCK(T) wsrep_service->wsrep_thd_LOCK_func(T) #define wsrep_thd_TRYLOCK(T) wsrep_service->wsrep_thd_TRYLOCK_func(T) #define wsrep_thd_UNLOCK(T) wsrep_service->wsrep_thd_UNLOCK_func(T) #define wsrep_thd_kill_LOCK(T) wsrep_service->wsrep_thd_kill_LOCK_func(T) #define wsrep_thd_kill_UNLOCK(T) wsrep_service->wsrep_thd_kill_UNLOCK_func(T) #define wsrep_thd_query(T) wsrep_service->wsrep_thd_query_func(T) #define wsrep_thd_retry_counter(T) wsrep_service->wsrep_thd_retry_counter_func(T) #define wsrep_thd_ignore_table(T) wsrep_service->wsrep_thd_ignore_table_func(T) #define wsrep_thd_trx_seqno(T) wsrep_service->wsrep_thd_trx_seqno_func(T) #define wsrep_set_data_home_dir(A) wsrep_service->wsrep_set_data_home_dir_func(A) #define wsrep_thd_is_BF(T,S) wsrep_service->wsrep_thd_is_BF_func(T,S) #define wsrep_thd_is_aborting(T) wsrep_service->wsrep_thd_is_aborting_func(T) #define wsrep_thd_is_local(T) wsrep_service->wsrep_thd_is_local_func(T) #define wsrep_thd_self_abort(T) wsrep_service->wsrep_thd_self_abort_func(T) #define wsrep_thd_append_key(T,W,N,K) wsrep_service->wsrep_thd_append_key_func(T,W,N,K) #define wsrep_thd_append_table_key(T,D,B,K) wsrep_service->wsrep_thd_append_table_key_func(T,D,B,K) #define wsrep_thd_is_local_transaction(T) wsrep_service->wsrep_thd_is_local_transaction_func(T) #define wsrep_thd_client_state_str(T) wsrep_service->wsrep_thd_client_state_str_func(T) #define wsrep_thd_client_mode_str(T) wsrep_service->wsrep_thd_client_mode_str_func(T) #define wsrep_thd_transaction_state_str(T) wsrep_service->wsrep_thd_transaction_state_str_func(T) #define wsrep_thd_transaction_id(T) wsrep_service->wsrep_thd_transaction_id_func(T) #define wsrep_thd_bf_abort(T,T2,S) wsrep_service->wsrep_thd_bf_abort_func(T,T2,S) #define wsrep_thd_order_before(L,R) wsrep_service->wsrep_thd_order_before_func(L,R) #define wsrep_handle_SR_rollback(B,V) wsrep_service->wsrep_handle_SR_rollback_func(B,V) #define wsrep_thd_skip_locking(T) wsrep_service->wsrep_thd_skip_locking_func(T) #define wsrep_get_sr_table_name() wsrep_service->wsrep_get_sr_table_name_func() #define wsrep_get_debug() wsrep_service->wsrep_get_debug_func() #define wsrep_commit_ordered(T) wsrep_service->wsrep_commit_ordered_func(T) #define wsrep_thd_is_applying(T) wsrep_service->wsrep_thd_is_applying_func(T) #define wsrep_OSU_method_get(T) wsrep_service->wsrep_OSU_method_get_func(T) #define wsrep_thd_has_ignored_error(T) wsrep_service->wsrep_thd_has_ignored_error_func(T) #define wsrep_thd_set_ignored_error(T,V) wsrep_service->wsrep_thd_set_ignored_error_func(T,V) #define wsrep_report_bf_lock_wait(T,I) wsrep_service->wsrep_report_bf_lock_wait(T,I) #define wsrep_thd_set_PA_unsafe(T) wsrep_service->wsrep_thd_set_PA_unsafe_func(T) #define wsrep_get_domain_id(T) wsrep_service->wsrep_get_domain_id_func(T) #else #define MYSQL_SERVICE_WSREP_STATIC_INCLUDED extern ulong wsrep_debug; extern my_bool wsrep_log_conflicts; extern my_bool wsrep_certify_nonPK; extern my_bool wsrep_load_data_splitting; extern my_bool wsrep_drupal_282555_workaround; extern my_bool wsrep_recovery; extern long wsrep_protocol_version; extern "C" bool wsrep_consistency_check(MYSQL_THD thd); bool wsrep_prepare_key_for_innodb(MYSQL_THD thd, const unsigned char* cache_key, size_t cache_key_len, const unsigned char* row_id, size_t row_id_len, struct wsrep_buf* key, size_t* key_len); extern "C" const char *wsrep_thd_query(const MYSQL_THD thd); extern "C" int wsrep_is_wsrep_xid(const void* xid); extern "C" long long wsrep_xid_seqno(const struct xid_t* xid); const unsigned char* wsrep_xid_uuid(const struct xid_t* xid); extern "C" long long wsrep_thd_trx_seqno(const MYSQL_THD thd); my_bool get_wsrep_recovery(); bool wsrep_thd_ignore_table(MYSQL_THD thd); void wsrep_set_data_home_dir(const char *data_dir); /* from mysql wsrep-lib */ #include "my_global.h" #include "my_pthread.h" /* Return true if wsrep is enabled for a thd. This means that wsrep is enabled globally and the thd has wsrep on */ extern "C" my_bool wsrep_on(const MYSQL_THD thd); /* Lock thd wsrep lock */ extern "C" void wsrep_thd_LOCK(const MYSQL_THD thd); /* Try thd wsrep lock. Return non-zero if lock could not be taken. */ extern "C" int wsrep_thd_TRYLOCK(const MYSQL_THD thd); /* Unlock thd wsrep lock */ extern "C" void wsrep_thd_UNLOCK(const MYSQL_THD thd); extern "C" void wsrep_thd_kill_LOCK(const MYSQL_THD thd); extern "C" void wsrep_thd_kill_UNLOCK(const MYSQL_THD thd); /* Return thd client state string */ extern "C" const char* wsrep_thd_client_state_str(const MYSQL_THD thd); /* Return thd client mode string */ extern "C" const char* wsrep_thd_client_mode_str(const MYSQL_THD thd); /* Return thd transaction state string */ extern "C" const char* wsrep_thd_transaction_state_str(const MYSQL_THD thd); /* Return current transaction id */ extern "C" query_id_t wsrep_thd_transaction_id(const MYSQL_THD thd); /* Mark thd own transaction as aborted */ extern "C" void wsrep_thd_self_abort(MYSQL_THD thd); /* Return true if thd is in replicating mode */ extern "C" my_bool wsrep_thd_is_local(const MYSQL_THD thd); /* Return true if thd is in high priority mode */ /* todo: rename to is_high_priority() */ extern "C" my_bool wsrep_thd_is_applying(const MYSQL_THD thd); /* Return true if thd is in TOI mode */ extern "C" my_bool wsrep_thd_is_toi(const MYSQL_THD thd); /* Return true if thd is in replicating TOI mode */ extern "C" my_bool wsrep_thd_is_local_toi(const MYSQL_THD thd); /* Return true if thd is in RSU mode */ extern "C" my_bool wsrep_thd_is_in_rsu(const MYSQL_THD thd); /* Return true if thd is in BF mode, either high_priority or TOI */ extern "C" my_bool wsrep_thd_is_BF(const MYSQL_THD thd, my_bool sync); /* Return true if thd is streaming in progress */ extern "C" my_bool wsrep_thd_is_SR(const MYSQL_THD thd); extern "C" void wsrep_handle_SR_rollback(MYSQL_THD BF_thd, MYSQL_THD victim_thd); /* Return thd retry counter */ extern "C" int wsrep_thd_retry_counter(const MYSQL_THD thd); /* BF abort victim_thd */ extern "C" my_bool wsrep_thd_bf_abort(MYSQL_THD bf_thd, MYSQL_THD victim_thd, my_bool signal); /* Return true if left thd is ordered before right thd */ extern "C" my_bool wsrep_thd_order_before(const MYSQL_THD left, const MYSQL_THD right); /* Return true if thd should skip locking. This means that the thd is operating on shared resource inside commit order critical section. */ extern "C" my_bool wsrep_thd_skip_locking(const MYSQL_THD thd); /* Return true if thd is aborting */ extern "C" my_bool wsrep_thd_is_aborting(const MYSQL_THD thd); struct wsrep_key; struct wsrep_key_array; extern "C" int wsrep_thd_append_key(MYSQL_THD thd, const struct wsrep_key* key, int n_keys, enum Wsrep_service_key_type); extern "C" int wsrep_thd_append_table_key(MYSQL_THD thd, const char* db, const char* table, enum Wsrep_service_key_type); extern "C" my_bool wsrep_thd_is_local_transaction(const MYSQL_THD thd); extern const char* wsrep_sr_table_name_full; extern "C" const char* wsrep_get_sr_table_name(); extern "C" my_bool wsrep_get_debug(); extern "C" void wsrep_commit_ordered(MYSQL_THD thd); extern "C" my_bool wsrep_thd_is_applying(const MYSQL_THD thd); extern "C" ulong wsrep_OSU_method_get(const MYSQL_THD thd); extern "C" my_bool wsrep_thd_has_ignored_error(const MYSQL_THD thd); extern "C" void wsrep_thd_set_ignored_error(MYSQL_THD thd, my_bool val); extern "C" void wsrep_report_bf_lock_wait(const THD *thd, unsigned long long trx_id); /* declare parallel applying unsafety for the THD */ extern "C" void wsrep_thd_set_PA_unsafe(MYSQL_THD thd); extern "C" uint32 wsrep_get_domain_id(); #endif #endif /* MYSQL_SERVICE_WSREP_INCLUDED */ PKe[ɈDnnservice_thd_rnd.hnu[#ifndef MYSQL_SERVICE_THD_RND_INCLUDED /* Copyright (C) 2017 MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service provides access to the thd-local random number generator. It's preferable over the global one, because concurrent threads can generate random numbers without fighting each other over the access to the shared rnd state. */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #endif extern struct thd_rnd_service_st { double (*thd_rnd_ptr)(MYSQL_THD thd); void (*thd_c_r_p_ptr)(MYSQL_THD thd, char *to, size_t length); } *thd_rnd_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_rnd(A) thd_rnd_service->thd_rnd_ptr(A) #define thd_create_random_password(A,B,C) thd_rnd_service->thd_c_r_p_ptr(A,B,C) #else double thd_rnd(MYSQL_THD thd); /** Generate string of printable random characters of requested length. @param to[out] Buffer for generation; must be at least length+1 bytes long; result string is always null-terminated @param length[in] How many random characters to put in buffer */ void thd_create_random_password(MYSQL_THD thd, char *to, size_t length); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_RND_INCLUDED #endif PKe[#Sx service_logger.hnu[/* Copyright (C) 2012 Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SERVICE_LOGGER_INCLUDED #define MYSQL_SERVICE_LOGGER_INCLUDED #ifndef MYSQL_ABI_CHECK #include #endif /** @file logger service Log file with rotation implementation. This service implements logging with possible rotation of the log files. Interface intentionally tries to be similar to FILE* related functions. So that one can open the log with logger_open(), specifying the limit on the logfile size and the rotations number. Then it's possible to write messages to the log with logger_printf or logger_vprintf functions. As the size of the logfile grows over the specified limit, it is renamed to 'logfile.1'. The former 'logfile.1' becomes 'logfile.2', etc. The file 'logfile.rotations' is removed. That's how the rotation works. The rotation can be forced with the logger_rotate() call. Finally the log should be closed with logger_close(). @notes: Implementation checks the size of the log file before it starts new printf into it. So the size of the file gets over the limit when it rotates. The access is secured with the mutex, so the log is threadsafe. */ #ifdef __cplusplus extern "C" { #endif typedef struct logger_handle_st LOGGER_HANDLE; extern struct logger_service_st { void (*logger_init_mutexes)(); LOGGER_HANDLE* (*open)(const char *path, unsigned long long size_limit, unsigned int rotations); int (*close)(LOGGER_HANDLE *log); int (*vprintf)(LOGGER_HANDLE *log, const char *fmt, va_list argptr); int (*printf)(LOGGER_HANDLE *log, const char *fmt, ...); int (*write)(LOGGER_HANDLE *log, const char *buffer, size_t size); int (*rotate)(LOGGER_HANDLE *log); } *logger_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define logger_init_mutexes logger_service->logger_init_mutexes #define logger_open(path, size_limit, rotations) \ (logger_service->open(path, size_limit, rotations)) #define logger_close(log) (logger_service->close(log)) #define logger_rotate(log) (logger_service->rotate(log)) #define logger_vprintf(log, fmt, argptr) (logger_service->\ vprintf(log, fmt, argptr)) #define logger_printf (*logger_service->printf) #define logger_write(log, buffer, size) \ (logger_service->write(log, buffer, size)) #else void logger_init_mutexes(); LOGGER_HANDLE *logger_open(const char *path, unsigned long long size_limit, unsigned int rotations); int logger_close(LOGGER_HANDLE *log); int logger_vprintf(LOGGER_HANDLE *log, const char *fmt, va_list argptr); int logger_printf(LOGGER_HANDLE *log, const char *fmt, ...); int logger_write(LOGGER_HANDLE *log, const char *buffer, size_t size); int logger_rotate(LOGGER_HANDLE *log); #endif #ifdef __cplusplus } #endif #endif /*MYSQL_SERVICE_LOGGER_INCLUDED*/ PKe[BChNplugin_ftparser.hnu[/* Copyright (c) 2005 MySQL AB, 2009 Sun Microsystems, Inc. Use is subject to license terms. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef _my_plugin_ftparser_h #define _my_plugin_ftparser_h #include "plugin.h" #ifdef __cplusplus extern "C" { #endif /************************************************************************* API for Full-text parser plugin. (MYSQL_FTPARSER_PLUGIN) */ #define MYSQL_FTPARSER_INTERFACE_VERSION 0x0100 /* Parsing modes. Set in MYSQL_FTPARSER_PARAM::mode */ enum enum_ftparser_mode { /* Fast and simple mode. This mode is used for indexing, and natural language queries. The parser is expected to return only those words that go into the index. Stopwords or too short/long words should not be returned. The 'boolean_info' argument of mysql_add_word() does not have to be set. */ MYSQL_FTPARSER_SIMPLE_MODE= 0, /* Parse with stopwords mode. This mode is used in boolean searches for "phrase matching." The parser is not allowed to ignore words in this mode. Every word should be returned, including stopwords and words that are too short or long. The 'boolean_info' argument of mysql_add_word() does not have to be set. */ MYSQL_FTPARSER_WITH_STOPWORDS= 1, /* Parse in boolean mode. This mode is used to parse a boolean query string. The parser should provide a valid MYSQL_FTPARSER_BOOLEAN_INFO structure in the 'boolean_info' argument to mysql_add_word(). Usually that means that the parser should recognize boolean operators in the parsing stream and set appropriate fields in MYSQL_FTPARSER_BOOLEAN_INFO structure accordingly. As for MYSQL_FTPARSER_WITH_STOPWORDS mode, no word should be ignored. Instead, use FT_TOKEN_STOPWORD for the token type of such a word. */ MYSQL_FTPARSER_FULL_BOOLEAN_INFO= 2 }; /* Token types for boolean mode searching (used for the type member of MYSQL_FTPARSER_BOOLEAN_INFO struct) FT_TOKEN_EOF: End of data. FT_TOKEN_WORD: Regular word. FT_TOKEN_LEFT_PAREN: Left parenthesis (start of group/sub-expression). FT_TOKEN_RIGHT_PAREN: Right parenthesis (end of group/sub-expression). FT_TOKEN_STOPWORD: Stopword. */ enum enum_ft_token_type { FT_TOKEN_EOF= 0, FT_TOKEN_WORD= 1, FT_TOKEN_LEFT_PAREN= 2, FT_TOKEN_RIGHT_PAREN= 3, FT_TOKEN_STOPWORD= 4 }; /* This structure is used in boolean search mode only. It conveys boolean-mode metadata to the MySQL search engine for every word in the search query. A valid instance of this structure must be filled in by the plugin parser and passed as an argument in the call to mysql_add_word (the callback function in the MYSQL_FTPARSER_PARAM structure) when a query is parsed in boolean mode. type: The token type. Should be one of the enum_ft_token_type values. yesno: Whether the word must be present for a match to occur: >0 Must be present <0 Must not be present 0 Neither; the word is optional but its presence increases the relevance With the default settings of the ft_boolean_syntax system variable, >0 corresponds to the '+' operator, <0 corresponds to the '-' operator, and 0 means neither operator was used. weight_adjust: A weighting factor that determines how much a match for the word counts. Positive values increase, negative - decrease the relative word's importance in the query. wasign: The sign of the word's weight in the query. If it's non-negative the match for the word will increase document relevance, if it's negative - decrease (the word becomes a "noise word", the less of it the better). trunc: Corresponds to the '*' operator in the default setting of the ft_boolean_syntax system variable. */ typedef struct st_mysql_ftparser_boolean_info { enum enum_ft_token_type type; int yesno; int weight_adjust; char wasign; char trunc; /* These are parser state and must be removed. */ char prev; char *quot; } MYSQL_FTPARSER_BOOLEAN_INFO; /* The following flag means that buffer with a string (document, word) may be overwritten by the caller before the end of the parsing (that is before st_mysql_ftparser::deinit() call). If one needs the string to survive between two successive calls of the parsing function, she needs to save a copy of it. The flag may be set by MySQL before calling st_mysql_ftparser::parse(), or it may be set by a plugin before calling st_mysql_ftparser_param::mysql_parse() or st_mysql_ftparser_param::mysql_add_word(). */ #define MYSQL_FTFLAGS_NEED_COPY 1 /* An argument of the full-text parser plugin. This structure is filled in by MySQL server and passed to the parsing function of the plugin as an in/out parameter. mysql_parse: A pointer to the built-in parser implementation of the server. It's set by the server and can be used by the parser plugin to invoke the MySQL default parser. If plugin's role is to extract textual data from .doc, .pdf or .xml content, it might extract plaintext from the content, and then pass the text to the default MySQL parser to be parsed. mysql_add_word: A server callback to add a new word. When parsing a document, the server sets this to point at a function that adds the word to MySQL full-text index. When parsing a search query, this function will add the new word to the list of words to search for. The boolean_info argument can be NULL for all cases except when mode is MYSQL_FTPARSER_FULL_BOOLEAN_INFO. A plugin can replace this callback to post-process every parsed word before passing it to the original mysql_add_word function. ftparser_state: A generic pointer. The plugin can set it to point to information to be used internally for its own purposes. mysql_ftparam: This is set by the server. It is used by MySQL functions called via mysql_parse() and mysql_add_word() callback. The plugin should not modify it. cs: Information about the character set of the document or query string. doc: A pointer to the document or query string to be parsed. length: Length of the document or query string, in bytes. flags: See MYSQL_FTFLAGS_* constants above. mode: The parsing mode. With boolean operators, with stopwords, or nothing. See enum_ftparser_mode above. */ typedef struct st_mysql_ftparser_param { int (*mysql_parse)(struct st_mysql_ftparser_param *, const char *doc, int doc_len); int (*mysql_add_word)(struct st_mysql_ftparser_param *, const char *word, int word_len, MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); void *ftparser_state; void *mysql_ftparam; const struct charset_info_st *cs; const char *doc; int length; unsigned int flags; enum enum_ftparser_mode mode; } MYSQL_FTPARSER_PARAM; /* Full-text parser descriptor. interface_version is, e.g., MYSQL_FTPARSER_INTERFACE_VERSION. The parsing, initialization, and deinitialization functions are invoked per SQL statement for which the parser is used. */ struct st_mysql_ftparser { int interface_version; int (*parse)(MYSQL_FTPARSER_PARAM *param); int (*init)(MYSQL_FTPARSER_PARAM *param); int (*deinit)(MYSQL_FTPARSER_PARAM *param); }; #ifdef __cplusplus } #endif #endif PKe[ tj service_sql.hnu[/* Copyright (C) 2021 MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #ifndef MYSQL_SERVICE_SQL #define MYSQL_SERVICE_SQL #ifndef MYSQL_ABI_CHECK #include #endif /** @file SQL service Interface for plugins to execute SQL queries on the local server. Functions of the service are the 'server-limited' client library: mysql_init mysql_real_connect_local mysql_real_connect mysql_errno mysql_error mysql_real_query mysql_affected_rows mysql_num_rows mysql_store_result mysql_free_result mysql_fetch_row mysql_close */ #ifdef __cplusplus extern "C" { #endif extern struct sql_service_st { MYSQL *(STDCALL *mysql_init_func)(MYSQL *mysql); MYSQL *(*mysql_real_connect_local_func)(MYSQL *mysql); MYSQL *(STDCALL *mysql_real_connect_func)(MYSQL *mysql, const char *host, const char *user, const char *passwd, const char *db, unsigned int port, const char *unix_socket, unsigned long clientflag); unsigned int(STDCALL *mysql_errno_func)(MYSQL *mysql); const char *(STDCALL *mysql_error_func)(MYSQL *mysql); int (STDCALL *mysql_real_query_func)(MYSQL *mysql, const char *q, unsigned long length); my_ulonglong (STDCALL *mysql_affected_rows_func)(MYSQL *mysql); my_ulonglong (STDCALL *mysql_num_rows_func)(MYSQL_RES *res); MYSQL_RES *(STDCALL *mysql_store_result_func)(MYSQL *mysql); void (STDCALL *mysql_free_result_func)(MYSQL_RES *result); MYSQL_ROW (STDCALL *mysql_fetch_row_func)(MYSQL_RES *result); void (STDCALL *mysql_close_func)(MYSQL *mysql); int (STDCALL *mysql_options_func)(MYSQL *mysql, enum mysql_option option, const void *arg); unsigned long *(STDCALL *mysql_fetch_lengths_func)(MYSQL_RES *res); int (STDCALL *mysql_set_character_set_func)(MYSQL *mysql, const char *cs_name); unsigned int (STDCALL *mysql_num_fields_func)(MYSQL_RES *res); int (STDCALL *mysql_select_db_func)(MYSQL *mysql, const char *db); MYSQL_RES *(STDCALL *mysql_use_result_func)(MYSQL *mysql); MYSQL_FIELD *(STDCALL *mysql_fetch_fields_func)(MYSQL_RES *res); unsigned long (STDCALL *mysql_real_escape_string_func)(MYSQL *mysql, char *to, const char *from, unsigned long length); my_bool (STDCALL *mysql_ssl_set_func)(MYSQL *mysql, const char *key, const char *cert, const char *ca, const char *capath, const char *cipher); } *sql_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define mysql_init(M) sql_service->mysql_init_func(M) #define mysql_real_connect_local(M) sql_service->mysql_real_connect_local_func(M) #define mysql_real_connect(M,H,U,PW,D,P,S,F) sql_service->mysql_real_connect_func(M,H,U,PW,D,P,S,F) #define mysql_errno(M) sql_service->mysql_errno_func(M) #define mysql_error(M) sql_service->mysql_error_func(M) #define mysql_real_query sql_service->mysql_real_query_func #define mysql_affected_rows(M) sql_service->mysql_affected_rows_func(M) #define mysql_num_rows(R) sql_service->mysql_num_rows_func(R) #define mysql_store_result(M) sql_service->mysql_store_result_func(M) #define mysql_free_result(R) sql_service->mysql_free_result_func(R) #define mysql_fetch_row(R) sql_service->mysql_fetch_row_func(R) #define mysql_close(M) sql_service->mysql_close_func(M) #define mysql_options(M,O,V) sql_service->mysql_options_func(M,O,V) #define mysql_fetch_lengths(R) sql_service->mysql_fetch_lengths_func(R) #define mysql_set_character_set(M,C) sql_service->mysql_set_character_set_func(M,C) #define mysql_num_fields(R) sql_service->mysql_num_fields_func(R) #define mysql_select_db(M,D) sql_service->mysql_select_db_func(M,D) #define mysql_use_result(M) sql_service->mysql_use_result_func(M) #define mysql_fetch_fields(R) sql_service->mysql_fetch_fields_func(R) #define mysql_real_escape_string(M,T,F,L) sql_service->mysql_real_escape_string_func(M,T,F,L) #define mysql_ssl_set(M,K,C1,C2,C3,C4) sql_service->mysql_ssl_set_func(M,K,C1,C2,C3,C4) #else /* Establishes the connection to the 'local' server that started the plugin. Like the mysql_real_connect() does for the remote server. The established connection has no user/host associated to it, neither it has the current db, so the queries should have database/table name specified. */ MYSQL *mysql_real_connect_local(MYSQL *mysql); /* The rest of the function declarations must be taken from the mysql.h */ #endif /*MYSQL_DYNAMIC_PLUGIN*/ #ifdef __cplusplus } #endif #endif /*MYSQL_SERVICE_SQL */ PKe[DMf  service_my_print_error.hnu[/* Copyright (c) 2016, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SERVICE_MY_PRINT_ERROR_INCLUDED #define MYSQL_SERVICE_MY_PRINT_ERROR_INCLUDED /** @file include/mysql/service_my_print_error.h This service provides functions for plugins to report errors to client (without client, the errors are written to the error log). */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #include #endif #define ME_ERROR_LOG 64 /* Write the message to the error log */ #define ME_ERROR_LOG_ONLY 128 /* Write the error message to error log only */ #define ME_NOTE 1024 /* Not an error, just a note */ #define ME_WARNING 2048 /* Not an error, just a warning */ #define ME_FATAL 4096 /* Fatal statement error */ extern struct my_print_error_service_st { void (*my_error_func)(unsigned int nr, unsigned long MyFlags, ...); void (*my_printf_error_func)(unsigned int nr, const char *fmt, unsigned long MyFlags,...); void (*my_printv_error_func)(unsigned int error, const char *format, unsigned long MyFlags, va_list ap); } *my_print_error_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_error my_print_error_service->my_error_func #define my_printf_error my_print_error_service->my_printf_error_func #define my_printv_error(A,B,C,D) my_print_error_service->my_printv_error_func(A,B,C,D) #else extern void my_error(unsigned int nr, unsigned long MyFlags, ...); extern void my_printf_error(unsigned int my_err, const char *format, unsigned long MyFlags, ...); extern void my_printv_error(unsigned int error, const char *format, unsigned long MyFlags,va_list ap); #endif /* MYSQL_DYNAMIC_PLUGIN */ #ifdef __cplusplus } #endif #endif PKe[<4 services.hnu[#ifndef MYSQL_SERVICES_INCLUDED /* Copyright (c) 2009, 2010, Oracle and/or its affiliates. Copyright (c) 2012, 2017, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /*#include */ #include #ifdef __cplusplus } #endif #define MYSQL_SERVICES_INCLUDED #endif PKe[8A"service_thd_mdl.hnu[/* Copyright (c) 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #pragma once /** @file include/mysql/service_thd_mdl.h This service provides functions for plugins and storage engines to access metadata locks. */ #ifdef __cplusplus extern "C" { #endif extern struct thd_mdl_service_st { void *(*thd_mdl_context)(MYSQL_THD); } *thd_mdl_service; #ifdef MYSQL_DYNAMIC_PLUGIN # define thd_mdl_context(_THD) thd_mdl_service->thd_mdl_context(_THD) #else /** MDL_context accessor @param thd the current session @return pointer to thd->mdl_context */ void *thd_mdl_context(MYSQL_THD thd); #endif #ifdef __cplusplus } #endif PKe[ JSpsi/mysql_socket.hnu[/* Copyright (c) 2010, 2023, Oracle and/or its affiliates. Copyright (c) 2017, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_SOCKET_H #define MYSQL_SOCKET_H /* For MY_STAT */ #include /* For my_chsize */ #include /* For socket api */ #ifdef _WIN32 #include #include #include #define SOCKBUF_T char #else #include #define SOCKBUF_T void #endif /** @file mysql/psi/mysql_socket.h [...] */ #include "mysql/psi/psi.h" #ifndef PSI_SOCKET_CALL #define PSI_SOCKET_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Socket_instrumentation Socket Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_socket_register(P1, P2, P3) Socket registration. */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_register(P1, P2, P3) \ inline_mysql_socket_register(P1, P2, P3) #else #define mysql_socket_register(P1, P2, P3) \ do {} while (0) #endif /** An instrumented socket. */ struct st_mysql_socket { /** The real socket descriptor. */ my_socket fd; /** Is this a Unix-domain socket? */ char is_unix_domain_socket; /** Is this a socket opened for the extra port? */ char is_extra_port; /** Address family of the socket. (See sa_family from struct sockaddr). */ unsigned short address_family; /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c MYSQL_SOCKET interface. */ struct PSI_socket *m_psi; }; /** An instrumented socket. @c MYSQL_SOCKET is a replacement for @c my_socket. */ typedef struct st_mysql_socket MYSQL_SOCKET; /** @def MYSQL_INVALID_SOCKET MYSQL_SOCKET initial value. */ //MYSQL_SOCKET MYSQL_INVALID_SOCKET= {INVALID_SOCKET, NULL}; #define MYSQL_INVALID_SOCKET mysql_socket_invalid() /** MYSQL_SOCKET helper. Initialize instrumented socket. @sa mysql_socket_getfd @sa mysql_socket_setfd */ static inline MYSQL_SOCKET mysql_socket_invalid() { MYSQL_SOCKET mysql_socket= {INVALID_SOCKET, 0, 0, 0, NULL}; return mysql_socket; } /** Set socket descriptor and address. @param socket nstrumented socket @param addr unformatted socket address @param addr_len length of socket address */ static inline void mysql_socket_set_address( #ifdef HAVE_PSI_SOCKET_INTERFACE MYSQL_SOCKET socket, const struct sockaddr *addr, socklen_t addr_len #else MYSQL_SOCKET socket __attribute__ ((unused)), const struct sockaddr *addr __attribute__ ((unused)), socklen_t addr_len __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_SOCKET_INTERFACE if (socket.m_psi != NULL) PSI_SOCKET_CALL(set_socket_info)(socket.m_psi, NULL, addr, addr_len); #endif } /** Set socket descriptor and address. @param socket instrumented socket */ static inline void mysql_socket_set_thread_owner( #ifdef HAVE_PSI_SOCKET_INTERFACE MYSQL_SOCKET socket #else MYSQL_SOCKET socket __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_SOCKET_INTERFACE if (socket.m_psi != NULL) PSI_SOCKET_CALL(set_socket_thread_owner)(socket.m_psi); #endif } /** MYSQL_SOCKET helper. Get socket descriptor. @param mysql_socket Instrumented socket @sa mysql_socket_getfd */ static inline my_socket mysql_socket_getfd(MYSQL_SOCKET mysql_socket) { return mysql_socket.fd; } /** MYSQL_SOCKET helper. Set socket descriptor. @param mysql_socket Instrumented socket @param fd Socket descriptor @sa mysql_socket_setfd */ static inline void mysql_socket_setfd(MYSQL_SOCKET *mysql_socket, my_socket fd) { if (likely(mysql_socket != NULL)) mysql_socket->fd= fd; } /** @def MYSQL_SOCKET_WAIT_VARIABLES Instrumentation helper for socket waits. This instrumentation declares local variables. Do not use a ';' after this macro @param LOCKER locker @param STATE locker state @sa MYSQL_START_SOCKET_WAIT. @sa MYSQL_END_SOCKET_WAIT. */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) \ struct PSI_socket_locker* LOCKER; \ PSI_socket_locker_state STATE; #else #define MYSQL_SOCKET_WAIT_VARIABLES(LOCKER, STATE) #endif /** @def MYSQL_START_SOCKET_WAIT Instrumentation helper for socket waits. This instrumentation marks the start of a wait event. @param LOCKER locker @param STATE locker state @param SOCKET instrumented socket @param OP The socket operation to be performed @param COUNT bytes to be written/read @sa MYSQL_END_SOCKET_WAIT. */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \ LOCKER= inline_mysql_start_socket_wait(STATE, SOCKET, OP, COUNT,\ __FILE__, __LINE__) #else #define MYSQL_START_SOCKET_WAIT(LOCKER, STATE, SOCKET, OP, COUNT) \ do {} while (0) #endif /** @def MYSQL_END_SOCKET_WAIT Instrumentation helper for socket waits. This instrumentation marks the end of a wait event. @param LOCKER locker @param COUNT actual bytes written/read, or -1 @sa MYSQL_START_SOCKET_WAIT. */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ inline_mysql_end_socket_wait(LOCKER, COUNT) #else #define MYSQL_END_SOCKET_WAIT(LOCKER, COUNT) \ do {} while (0) #endif /** @def MYSQL_SOCKET_SET_STATE Set the state (IDLE, ACTIVE) of an instrumented socket. @param SOCKET the instrumented socket @param STATE the new state @sa PSI_socket_state */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \ inline_mysql_socket_set_state(SOCKET, STATE) #else #define MYSQL_SOCKET_SET_STATE(SOCKET, STATE) \ do {} while (0) #endif #ifdef HAVE_PSI_SOCKET_INTERFACE /** Instrumentation calls for MYSQL_START_SOCKET_WAIT. @sa MYSQL_START_SOCKET_WAIT. */ static inline struct PSI_socket_locker* inline_mysql_start_socket_wait(PSI_socket_locker_state *state, MYSQL_SOCKET mysql_socket, enum PSI_socket_operation op, size_t byte_count, const char *src_file, uint src_line) { struct PSI_socket_locker *locker; if (psi_likely(mysql_socket.m_psi != NULL)) { locker= PSI_SOCKET_CALL(start_socket_wait) (state, mysql_socket.m_psi, op, byte_count, src_file, src_line); } else locker= NULL; return locker; } /** Instrumentation calls for MYSQL_END_SOCKET_WAIT. @sa MYSQL_END_SOCKET_WAIT. */ static inline void inline_mysql_end_socket_wait(struct PSI_socket_locker *locker, size_t byte_count) { if (psi_likely(locker != NULL)) PSI_SOCKET_CALL(end_socket_wait)(locker, byte_count); } /** Set the state (IDLE, ACTIVE) of an instrumented socket. @param socket the instrumented socket @param state the new state @sa PSI_socket_state */ static inline void inline_mysql_socket_set_state(MYSQL_SOCKET socket, enum PSI_socket_state state) { if (socket.m_psi != NULL) PSI_SOCKET_CALL(set_socket_state)(socket.m_psi, state); } #endif /* HAVE_PSI_SOCKET_INTERFACE */ /** @def mysql_socket_fd(K, F) Create a socket. @c mysql_socket_fd is a replacement for @c socket. @param K PSI_socket_key for this instrumented socket @param F File descriptor */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_fd(K, F) \ inline_mysql_socket_fd(K, F) #else #define mysql_socket_fd(K, F) \ inline_mysql_socket_fd(F) #endif /** @def mysql_socket_socket(K, D, T, P) Create a socket. @c mysql_socket_socket is a replacement for @c socket. @param K PSI_socket_key for this instrumented socket @param D Socket domain @param T Protocol type @param P Transport protocol */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_socket(K, D, T, P) \ inline_mysql_socket_socket(K, D, T, P) #else #define mysql_socket_socket(K, D, T, P) \ inline_mysql_socket_socket(D, T, P) #endif /** @def mysql_socket_bind(FD, AP, L) Bind a socket to a local port number and IP address @c mysql_socket_bind is a replacement for @c bind. @param FD Instrumented socket descriptor returned by socket() @param AP Pointer to local port number and IP address in sockaddr structure @param L Length of sockaddr structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_bind(FD, AP, L) \ inline_mysql_socket_bind(__FILE__, __LINE__, FD, AP, L) #else #define mysql_socket_bind(FD, AP, L) \ inline_mysql_socket_bind(FD, AP, L) #endif /** @def mysql_socket_getsockname(FD, AP, LP) Return port number and IP address of the local host @c mysql_socket_getsockname is a replacement for @c getsockname. @param FD Instrumented socket descriptor returned by socket() @param AP Pointer to returned address of local host in @c sockaddr structure @param LP Pointer to length of @c sockaddr structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_getsockname(FD, AP, LP) \ inline_mysql_socket_getsockname(__FILE__, __LINE__, FD, AP, LP) #else #define mysql_socket_getsockname(FD, AP, LP) \ inline_mysql_socket_getsockname(FD, AP, LP) #endif /** @def mysql_socket_connect(FD, AP, L) Establish a connection to a remote host. @c mysql_socket_connect is a replacement for @c connect. @param FD Instrumented socket descriptor returned by socket() @param AP Pointer to target address in sockaddr structure @param L Length of sockaddr structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_connect(FD, AP, L) \ inline_mysql_socket_connect(__FILE__, __LINE__, FD, AP, L) #else #define mysql_socket_connect(FD, AP, L) \ inline_mysql_socket_connect(FD, AP, L) #endif /** @def mysql_socket_getpeername(FD, AP, LP) Get port number and IP address of remote host that a socket is connected to. @c mysql_socket_getpeername is a replacement for @c getpeername. @param FD Instrumented socket descriptor returned by socket() or accept() @param AP Pointer to returned address of remote host in sockaddr structure @param LP Pointer to length of sockaddr structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_getpeername(FD, AP, LP) \ inline_mysql_socket_getpeername(__FILE__, __LINE__, FD, AP, LP) #else #define mysql_socket_getpeername(FD, AP, LP) \ inline_mysql_socket_getpeername(FD, AP, LP) #endif /** @def mysql_socket_send(FD, B, N, FL) Send data from the buffer, B, to a connected socket. @c mysql_socket_send is a replacement for @c send. @param FD Instrumented socket descriptor returned by socket() or accept() @param B Buffer to send @param N Number of bytes to send @param FL Control flags */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_send(FD, B, N, FL) \ inline_mysql_socket_send(__FILE__, __LINE__, FD, B, N, FL) #else #define mysql_socket_send(FD, B, N, FL) \ inline_mysql_socket_send(FD, B, N, FL) #endif /** @def mysql_socket_recv(FD, B, N, FL) Receive data from a connected socket. @c mysql_socket_recv is a replacement for @c recv. @param FD Instrumented socket descriptor returned by socket() or accept() @param B Buffer to receive to @param N Maximum bytes to receive @param FL Control flags */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_recv(FD, B, N, FL) \ inline_mysql_socket_recv(__FILE__, __LINE__, FD, B, N, FL) #else #define mysql_socket_recv(FD, B, N, FL) \ inline_mysql_socket_recv(FD, B, N, FL) #endif /** @def mysql_socket_sendto(FD, B, N, FL, AP, L) Send data to a socket at the specified address. @c mysql_socket_sendto is a replacement for @c sendto. @param FD Instrumented socket descriptor returned by socket() @param B Buffer to send @param N Number of bytes to send @param FL Control flags @param AP Pointer to destination sockaddr structure @param L Size of sockaddr structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_sendto(FD, B, N, FL, AP, L) \ inline_mysql_socket_sendto(__FILE__, __LINE__, FD, B, N, FL, AP, L) #else #define mysql_socket_sendto(FD, B, N, FL, AP, L) \ inline_mysql_socket_sendto(FD, B, N, FL, AP, L) #endif /** @def mysql_socket_recvfrom(FD, B, N, FL, AP, L) Receive data from a socket and return source address information @c mysql_socket_recvfrom is a replacement for @c recvfrom. @param FD Instrumented socket descriptor returned by socket() @param B Buffer to receive to @param N Maximum bytes to receive @param FL Control flags @param AP Pointer to source address in sockaddr_storage structure @param LP Size of sockaddr_storage structure */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \ inline_mysql_socket_recvfrom(__FILE__, __LINE__, FD, B, N, FL, AP, LP) #else #define mysql_socket_recvfrom(FD, B, N, FL, AP, LP) \ inline_mysql_socket_recvfrom(FD, B, N, FL, AP, LP) #endif /** @def mysql_socket_getsockopt(FD, LV, ON, OP, OL) Get a socket option for the specified socket. @c mysql_socket_getsockopt is a replacement for @c getsockopt. @param FD Instrumented socket descriptor returned by socket() @param LV Protocol level @param ON Option to query @param OP Buffer which will contain the value for the requested option @param OL Pointer to length of OP */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \ inline_mysql_socket_getsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL) #else #define mysql_socket_getsockopt(FD, LV, ON, OP, OL) \ inline_mysql_socket_getsockopt(FD, LV, ON, OP, OL) #endif /** @def mysql_socket_setsockopt(FD, LV, ON, OP, OL) Set a socket option for the specified socket. @c mysql_socket_setsockopt is a replacement for @c setsockopt. @param FD Instrumented socket descriptor returned by socket() @param LV Protocol level @param ON Option to modify @param OP Buffer containing the value for the specified option @param OL Pointer to length of OP */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \ inline_mysql_socket_setsockopt(__FILE__, __LINE__, FD, LV, ON, OP, OL) #else #define mysql_socket_setsockopt(FD, LV, ON, OP, OL) \ inline_mysql_socket_setsockopt(FD, LV, ON, OP, OL) #endif /** @def mysql_sock_set_nonblocking Set socket to non-blocking. @param FD instrumented socket descriptor */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_sock_set_nonblocking(FD) \ inline_mysql_sock_set_nonblocking(__FILE__, __LINE__, FD) #else #define mysql_sock_set_nonblocking(FD) \ inline_mysql_sock_set_nonblocking(FD) #endif /** @def mysql_socket_listen(FD, N) Set socket state to listen for an incoming connection. @c mysql_socket_listen is a replacement for @c listen. @param FD Instrumented socket descriptor, bound and connected @param N Maximum number of pending connections allowed. */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_listen(FD, N) \ inline_mysql_socket_listen(__FILE__, __LINE__, FD, N) #else #define mysql_socket_listen(FD, N) \ inline_mysql_socket_listen(FD, N) #endif /** @def mysql_socket_accept(K, FD, AP, LP) Accept a connection from any remote host; TCP only. @c mysql_socket_accept is a replacement for @c accept. @param K PSI_socket_key for this instrumented socket @param FD Instrumented socket descriptor, bound and placed in a listen state @param AP Pointer to sockaddr structure with returned IP address and port of connected host @param LP Pointer to length of valid information in AP */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_accept(K, FD, AP, LP) \ inline_mysql_socket_accept(__FILE__, __LINE__, K, FD, AP, LP) #else #define mysql_socket_accept(K, FD, AP, LP) \ inline_mysql_socket_accept(FD, AP, LP) #endif /** @def mysql_socket_close(FD) Close a socket and sever any connections. @c mysql_socket_close is a replacement for @c close. @param FD Instrumented socket descriptor returned by socket() or accept() */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_close(FD) \ inline_mysql_socket_close(__FILE__, __LINE__, FD) #else #define mysql_socket_close(FD) \ inline_mysql_socket_close(FD) #endif /** @def mysql_socket_shutdown(FD, H) Disable receives and/or sends on a socket. @c mysql_socket_shutdown is a replacement for @c shutdown. @param FD Instrumented socket descriptor returned by socket() or accept() @param H Specifies which operations to shutdown */ #ifdef HAVE_PSI_SOCKET_INTERFACE #define mysql_socket_shutdown(FD, H) \ inline_mysql_socket_shutdown(__FILE__, __LINE__, FD, H) #else #define mysql_socket_shutdown(FD, H) \ inline_mysql_socket_shutdown(FD, H) #endif #ifdef HAVE_PSI_SOCKET_INTERFACE static inline void inline_mysql_socket_register( const char *category, PSI_socket_info *info, int count) { PSI_SOCKET_CALL(register_socket)(category, info, count); } #endif /** mysql_socket_fd */ static inline MYSQL_SOCKET inline_mysql_socket_fd ( #ifdef HAVE_PSI_SOCKET_INTERFACE PSI_socket_key key, #endif int fd) { MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET; mysql_socket.fd= fd; DBUG_ASSERT(mysql_socket.fd != INVALID_SOCKET); #ifdef HAVE_PSI_SOCKET_INTERFACE mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket) (key, (const my_socket*)&mysql_socket.fd, NULL, 0); #endif /** Currently systemd socket activation is the user of this function. Its API (man sd_listen_fds) says FD_CLOSE_EXEC is already called. If there becomes another user, we can call it again without detriment. If needed later: #if defined(HAVE_FCNTL) && defined(FD_CLOEXEC) (void) fcntl(mysql_socket.fd, F_SETFD, FD_CLOEXEC); #endif */ return mysql_socket; } /** mysql_socket_socket */ static inline MYSQL_SOCKET inline_mysql_socket_socket ( #ifdef HAVE_PSI_SOCKET_INTERFACE PSI_socket_key key, #endif int domain, int type, int protocol) { MYSQL_SOCKET mysql_socket= MYSQL_INVALID_SOCKET; mysql_socket.fd= socket(domain, type | SOCK_CLOEXEC, protocol); #ifdef HAVE_PSI_SOCKET_INTERFACE if (likely(mysql_socket.fd != INVALID_SOCKET)) { mysql_socket.m_psi= PSI_SOCKET_CALL(init_socket) (key, (const my_socket*)&mysql_socket.fd, NULL, 0); } #endif /* SOCK_CLOEXEC isn't always a number - can't preprocessor compare */ #if defined(HAVE_FCNTL) && defined(FD_CLOEXEC) && !defined(HAVE_SOCK_CLOEXEC) (void) fcntl(mysql_socket.fd, F_SETFD, FD_CLOEXEC); #endif return mysql_socket; } /** mysql_socket_bind */ static inline int inline_mysql_socket_bind ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, size_t len) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker_state state; PSI_socket_locker *locker; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= bind(mysql_socket.fd, addr, (int)len); /* Instrumentation end */ if (result == 0) PSI_SOCKET_CALL(set_socket_info)(mysql_socket.m_psi, NULL, addr, (socklen_t)len); if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= bind(mysql_socket.fd, addr, (int)len); return result; } /** mysql_socket_getsockname */ static inline int inline_mysql_socket_getsockname ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= getsockname(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= getsockname(mysql_socket.fd, addr, len); return result; } /** mysql_socket_connect */ static inline int inline_mysql_socket_connect ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, const struct sockaddr *addr, socklen_t len) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ result= connect(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= connect(mysql_socket.fd, addr, len); return result; } /** mysql_socket_getpeername */ static inline int inline_mysql_socket_getpeername ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, struct sockaddr *addr, socklen_t *len) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_BIND, (size_t)0, src_file, src_line); /* Instrumented code */ result= getpeername(mysql_socket.fd, addr, len); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= getpeername(mysql_socket.fd, addr, len); return result; } /** mysql_socket_send */ static inline ssize_t inline_mysql_socket_send ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags) { ssize_t result; DBUG_ASSERT(mysql_socket.fd != INVALID_SOCKET); #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); /* Instrumented code */ result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); /* Instrumentation end */ if (locker != NULL) { size_t bytes_written= (result > 0) ? (size_t) result : 0; PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); } return result; } #endif /* Non instrumented code */ result= send(mysql_socket.fd, buf, IF_WIN((int),) n, flags); return result; } /** mysql_socket_recv */ static inline ssize_t inline_mysql_socket_recv ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags) { ssize_t result; DBUG_ASSERT(mysql_socket.fd != INVALID_SOCKET); #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); /* Instrumented code */ result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); /* Instrumentation end */ if (locker != NULL) { size_t bytes_read= (result > 0) ? (size_t) result : 0; PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); } return result; } #endif /* Non instrumented code */ result= recv(mysql_socket.fd, buf, IF_WIN((int),) n, flags); return result; } /** mysql_socket_sendto */ static inline ssize_t inline_mysql_socket_sendto ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, const SOCKBUF_T *buf, size_t n, int flags, const struct sockaddr *addr, socklen_t addr_len) { ssize_t result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_SEND, n, src_file, src_line); /* Instrumented code */ result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); /* Instrumentation end */ if (locker != NULL) { size_t bytes_written = (result > 0) ? (size_t) result : 0; PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_written); } return result; } #endif /* Non instrumented code */ result= sendto(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); return result; } /** mysql_socket_recvfrom */ static inline ssize_t inline_mysql_socket_recvfrom ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, SOCKBUF_T *buf, size_t n, int flags, struct sockaddr *addr, socklen_t *addr_len) { ssize_t result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_RECV, (size_t)0, src_file, src_line); /* Instrumented code */ result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); /* Instrumentation end */ if (locker != NULL) { size_t bytes_read= (result > 0) ? (size_t) result : 0; PSI_SOCKET_CALL(end_socket_wait)(locker, bytes_read); } return result; } #endif /* Non instrumented code */ result= recvfrom(mysql_socket.fd, buf, IF_WIN((int),) n, flags, addr, addr_len); return result; } /** mysql_socket_getsockopt */ static inline int inline_mysql_socket_getsockopt ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, int level, int optname, SOCKBUF_T *optval, socklen_t *optlen) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); /* Instrumented code */ result= getsockopt(mysql_socket.fd, level, optname, optval, optlen); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= getsockopt(mysql_socket.fd, level, optname, optval, optlen); return result; } /** mysql_socket_setsockopt */ static inline int inline_mysql_socket_setsockopt ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, int level, int optname, const SOCKBUF_T *optval, socklen_t optlen) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); /* Instrumented code */ result= setsockopt(mysql_socket.fd, level, optname, optval, optlen); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= setsockopt(mysql_socket.fd, level, optname, optval, optlen); return result; } /** set_socket_nonblock */ static inline int set_socket_nonblock(my_socket fd) { int ret= 0; #ifdef _WIN32 { u_long nonblocking= 1; ret= ioctlsocket(fd, FIONBIO, &nonblocking); } #else { int fd_flags; fd_flags= fcntl(fd, F_GETFL, 0); if (fd_flags < 0) return errno; #if defined(O_NONBLOCK) fd_flags |= O_NONBLOCK; #elif defined(O_NDELAY) fd_flags |= O_NDELAY; #elif defined(O_FNDELAY) fd_flags |= O_FNDELAY; #else #error "No definition of non-blocking flag found." #endif /* O_NONBLOCK */ if (fcntl(fd, F_SETFL, fd_flags) == -1) ret= errno; } #endif /* _WIN32 */ return ret; } /** mysql_socket_set_nonblocking */ static inline int inline_mysql_sock_set_nonblocking ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket ) { int result= 0; #ifdef HAVE_PSI_SOCKET_INTERFACE if (mysql_socket.m_psi) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_OPT, (size_t)0, src_file, src_line); /* Instrumented code */ result= set_socket_nonblock(mysql_socket.fd); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= set_socket_nonblock(mysql_socket.fd); return result; } /** mysql_socket_listen */ static inline int inline_mysql_socket_listen ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, int backlog) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ result= listen(mysql_socket.fd, backlog); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ result= listen(mysql_socket.fd, backlog); return result; } /** mysql_socket_accept */ static inline MYSQL_SOCKET inline_mysql_socket_accept ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, PSI_socket_key key, #endif MYSQL_SOCKET socket_listen, struct sockaddr *addr, socklen_t *addr_len) { #ifdef FD_CLOEXEC int flags __attribute__ ((unused)); #endif MYSQL_SOCKET socket_accept; #ifdef HAVE_PSI_SOCKET_INTERFACE if (socket_listen.m_psi != NULL) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, socket_listen.m_psi, PSI_SOCKET_CONNECT, (size_t)0, src_file, src_line); /* Instrumented code */ #ifdef HAVE_ACCEPT4 socket_accept.fd= accept4(socket_listen.fd, addr, addr_len, SOCK_CLOEXEC); #else socket_accept.fd= accept(socket_listen.fd, addr, addr_len); #ifdef FD_CLOEXEC if (socket_accept.fd != INVALID_SOCKET) { flags= fcntl(socket_accept.fd, F_GETFD); if (flags != -1) { flags |= FD_CLOEXEC; fcntl(socket_accept.fd, F_SETFD, flags); } } #endif #endif /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); } else #endif { /* Non instrumented code */ #ifdef HAVE_ACCEPT4 socket_accept.fd= accept4(socket_listen.fd, addr, addr_len, SOCK_CLOEXEC); #else socket_accept.fd= accept(socket_listen.fd, addr, addr_len); #ifdef FD_CLOEXEC if (socket_accept.fd != INVALID_SOCKET) { flags= fcntl(socket_accept.fd, F_GETFD); if (flags != -1) { flags |= FD_CLOEXEC; fcntl(socket_accept.fd, F_SETFD, flags); } } #endif #endif } #ifdef HAVE_PSI_SOCKET_INTERFACE if (likely(socket_accept.fd != INVALID_SOCKET)) { /* Initialize the instrument with the new socket descriptor and address */ socket_accept.m_psi= PSI_SOCKET_CALL(init_socket) (key, (const my_socket*)&socket_accept.fd, addr, *addr_len); } #endif return socket_accept; } /** mysql_socket_close */ static inline int inline_mysql_socket_close ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket) { int result; #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { /* Instrumentation start */ PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_CLOSE, (size_t)0, src_file, src_line); /* Instrumented code */ result= closesocket(mysql_socket.fd); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); /* Remove the instrumentation for this socket. */ if (mysql_socket.m_psi != NULL) PSI_SOCKET_CALL(destroy_socket)(mysql_socket.m_psi); return result; } #endif /* Non instrumented code */ result= closesocket(mysql_socket.fd); return result; } /** mysql_socket_shutdown */ static inline int inline_mysql_socket_shutdown ( #ifdef HAVE_PSI_SOCKET_INTERFACE const char *src_file, uint src_line, #endif MYSQL_SOCKET mysql_socket, int how) { int result; #ifdef _WIN32 static LPFN_DISCONNECTEX DisconnectEx = NULL; if (DisconnectEx == NULL) { DWORD dwBytesReturned; GUID guidDisconnectEx = WSAID_DISCONNECTEX; WSAIoctl(mysql_socket.fd, SIO_GET_EXTENSION_FUNCTION_POINTER, &guidDisconnectEx, sizeof(GUID), &DisconnectEx, sizeof(DisconnectEx), &dwBytesReturned, NULL, NULL); } #endif /* Instrumentation start */ #ifdef HAVE_PSI_SOCKET_INTERFACE if (psi_likely(mysql_socket.m_psi != NULL)) { PSI_socket_locker *locker; PSI_socket_locker_state state; locker= PSI_SOCKET_CALL(start_socket_wait) (&state, mysql_socket.m_psi, PSI_SOCKET_SHUTDOWN, (size_t)0, src_file, src_line); /* Instrumented code */ #ifdef _WIN32 if (DisconnectEx) result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; else #endif result= shutdown(mysql_socket.fd, how); /* Instrumentation end */ if (locker != NULL) PSI_SOCKET_CALL(end_socket_wait)(locker, (size_t)0); return result; } #endif /* Non instrumented code */ #ifdef _WIN32 if (DisconnectEx) result= (DisconnectEx(mysql_socket.fd, (LPOVERLAPPED) NULL, (DWORD) 0, (DWORD) 0) == TRUE) ? 0 : -1; else #endif result= shutdown(mysql_socket.fd, how); return result; } /** @} (end of group Socket_instrumentation) */ #endif PKe[(Ĕpsi/mysql_mdl.hnu[/* Copyright (c) 2012, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ #ifndef MYSQL_MDL_H #define MYSQL_MDL_H /** @file mysql/psi/mysql_mdl.h Instrumentation helpers for metadata locks. */ #include "mysql/psi/psi.h" #ifdef HAVE_PSI_METADATA_INTERFACE #ifndef PSI_METADATA_CALL #define PSI_METADATA_CALL(M) PSI_DYNAMIC_CALL(M) #endif #define PSI_CALL_start_metadata_wait(A,B,C,D) PSI_METADATA_CALL(start_metadata_wait)(A,B,C,D) #define PSI_CALL_end_metadata_wait(A,B) PSI_METADATA_CALL(end_metadata_wait)(A,B) #define PSI_CALL_create_metadata_lock(A,B,C,D,E,F,G) PSI_METADATA_CALL(create_metadata_lock)(A,B,C,D,E,F,G) #define PSI_CALL_set_metadata_lock_status(A,B) PSI_METADATA_CALL(set_metadata_lock_status)(A,B) #define PSI_CALL_destroy_metadata_lock(A) PSI_METADATA_CALL(destroy_metadata_lock)(A) #else #define PSI_CALL_start_metadata_wait(A,B,C,D) 0 #define PSI_CALL_end_metadata_wait(A,B) do { } while(0) #define PSI_CALL_create_metadata_lock(A,B,C,D,E,F,G) 0 #define PSI_CALL_set_metadata_lock_status(A,B) do {} while(0) #define PSI_CALL_destroy_metadata_lock(A) do {} while(0) #endif /** @defgroup Thread_instrumentation Metadata Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_mdl_create(K, M, A) Instrumented metadata lock creation. @param I Metadata lock identity @param K Metadata key @param T Metadata lock type @param D Metadata lock duration @param S Metadata lock status @param F request source file @param L request source line */ #ifdef HAVE_PSI_METADATA_INTERFACE #define mysql_mdl_create(I, K, T, D, S, F, L) \ inline_mysql_mdl_create(I, K, T, D, S, F, L) #else #define mysql_mdl_create(I, K, T, D, S, F, L) NULL #endif #ifdef HAVE_PSI_METADATA_INTERFACE #define mysql_mdl_set_status(L, S) \ inline_mysql_mdl_set_status(L, S) #else #define mysql_mdl_set_status(L, S) \ do {} while (0) #endif /** @def mysql_mdl_destroy(M) Instrumented metadata lock destruction. @param M Metadata lock */ #ifdef HAVE_PSI_METADATA_INTERFACE #define mysql_mdl_destroy(M) \ inline_mysql_mdl_destroy(M, __FILE__, __LINE__) #else #define mysql_mdl_destroy(M) \ do {} while (0) #endif #ifdef HAVE_PSI_METADATA_INTERFACE static inline PSI_metadata_lock * inline_mysql_mdl_create(void *identity, const MDL_key *mdl_key, enum_mdl_type mdl_type, enum_mdl_duration mdl_duration, MDL_ticket::enum_psi_status mdl_status, const char *src_file, uint src_line) { PSI_metadata_lock *result; /* static_cast: Fit a round C++ enum peg into a square C int hole ... */ result= PSI_METADATA_CALL(create_metadata_lock) (identity, mdl_key, static_cast (mdl_type), static_cast (mdl_duration), static_cast (mdl_status), src_file, src_line); return result; } static inline void inline_mysql_mdl_set_status( PSI_metadata_lock *psi, MDL_ticket::enum_psi_status mdl_status) { if (psi != NULL) PSI_METADATA_CALL(set_metadata_lock_status)(psi, mdl_status); } static inline void inline_mysql_mdl_destroy( PSI_metadata_lock *psi, const char *src_file, uint src_line) { if (psi != NULL) PSI_METADATA_CALL(destroy_metadata_lock)(psi); } #endif /* HAVE_PSI_METADATA_INTERFACE */ /** @} (end of group Metadata_instrumentation) */ #endif PKe[ Lpsi/psi_abi_v2.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file mysql/psi/psi_abi_v1.h ABI check for mysql/psi/psi.h, when using PSI_VERSION_2. This file is only used to automate detection of changes between versions. Do not include this file, include mysql/psi/psi.h instead. */ #define USE_PSI_2 #define HAVE_PSI_INTERFACE #define MY_GLOBAL_INCLUDED #include "mysql/psi/psi.h" PKe[S5upsi/psi_base.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. Without limiting anything contained in the foregoing, this file, which is part of C Driver for MySQL (Connector/C), is also subject to the Universal FOSS Exception, version 1.0, a copy of which can be found at http://oss.oracle.com/licenses/universal-foss-exception. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_PSI_BASE_H #define MYSQL_PSI_BASE_H #ifdef EMBEDDED_LIBRARY #define DISABLE_ALL_PSI #endif /* EMBEDDED_LIBRARY */ #ifdef __cplusplus extern "C" { #endif /** @file mysql/psi/psi_base.h Performance schema instrumentation interface. @defgroup Instrumentation_interface Instrumentation Interface @ingroup Performance_schema @{ */ #define PSI_INSTRUMENT_ME 0 #define PSI_INSTRUMENT_MEM ((PSI_memory_key)0) #define PSI_NOT_INSTRUMENTED 0 /** Global flag. This flag indicate that an instrumentation point is a global variable, or a singleton. */ #define PSI_FLAG_GLOBAL (1 << 0) /** Mutable flag. This flag indicate that an instrumentation point is a general placeholder, that can mutate into a more specific instrumentation point. */ #define PSI_FLAG_MUTABLE (1 << 1) #define PSI_FLAG_THREAD (1 << 2) /** Stage progress flag. This flag apply to the stage instruments only. It indicates the instrumentation provides progress data. */ #define PSI_FLAG_STAGE_PROGRESS (1 << 3) /** Shared Exclusive flag. Indicates that rwlock support the shared exclusive state. */ #define PSI_RWLOCK_FLAG_SX (1 << 4) /** Transferable flag. This flag indicate that an instrumented object can be created by a thread and destroyed by another thread. */ #define PSI_FLAG_TRANSFER (1 << 5) /** Volatility flag. This flag indicate that an instrumented object has a volatility (life cycle) comparable to the volatility of a session. */ #define PSI_FLAG_VOLATILITY_SESSION (1 << 6) /** System thread flag. Indicates that the instrumented object exists on a system thread. */ #define PSI_FLAG_THREAD_SYSTEM (1 << 9) #ifdef HAVE_PSI_INTERFACE /** @def PSI_VERSION_1 Performance Schema Interface number for version 1. This version is supported. */ #define PSI_VERSION_1 1 /** @def PSI_VERSION_2 Performance Schema Interface number for version 2. This version is not implemented, it's a placeholder. */ #define PSI_VERSION_2 2 /** @def PSI_CURRENT_VERSION Performance Schema Interface number for the most recent version. The most current version is @c PSI_VERSION_1 */ #define PSI_CURRENT_VERSION 1 /** @def USE_PSI_1 Define USE_PSI_1 to use the interface version 1. */ /** @def USE_PSI_2 Define USE_PSI_2 to use the interface version 2. */ /** @def HAVE_PSI_1 Define HAVE_PSI_1 if the interface version 1 needs to be compiled in. */ /** @def HAVE_PSI_2 Define HAVE_PSI_2 if the interface version 2 needs to be compiled in. */ #ifndef USE_PSI_2 #ifndef USE_PSI_1 #define USE_PSI_1 #endif #endif #ifdef USE_PSI_1 #define HAVE_PSI_1 #endif #ifdef USE_PSI_2 #define HAVE_PSI_2 #endif /* Allow to override PSI_XXX_CALL at compile time with more efficient implementations, if available. If nothing better is available, make a dynamic call using the PSI_server function pointer. */ #define PSI_DYNAMIC_CALL(M) PSI_server->M #endif /* HAVE_PSI_INTERFACE */ /** @} */ /** Instrumented memory key. To instrument memory, a memory key must be obtained using @c register_memory. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_memory_key; #ifdef __cplusplus } #endif #endif /* MYSQL_PSI_BASE_H */ PKe[[6^11psi/mysql_table.hnu[/* Copyright (c) 2010, 2023, Oracle and/or its affiliates. All rights reserved. Copyright (c) 2017, 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_TABLE_H #define MYSQL_TABLE_H /** @file mysql/psi/mysql_table.h Instrumentation helpers for table io. */ #include "mysql/psi/psi.h" #ifndef PSI_TABLE_CALL #define PSI_TABLE_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Table_instrumentation Table Instrumentation @ingroup Instrumentation_interface @{ */ #ifdef HAVE_PSI_TABLE_INTERFACE #define MYSQL_UNBIND_TABLE(handler) (handler)->unbind_psi() #define PSI_CALL_unbind_table PSI_TABLE_CALL(unbind_table) #define PSI_CALL_rebind_table PSI_TABLE_CALL(rebind_table) #define PSI_CALL_open_table PSI_TABLE_CALL(open_table) #define PSI_CALL_close_table PSI_TABLE_CALL(close_table) #define PSI_CALL_get_table_share PSI_TABLE_CALL(get_table_share) #define PSI_CALL_release_table_share PSI_TABLE_CALL(release_table_share) #define PSI_CALL_drop_table_share PSI_TABLE_CALL(drop_table_share) #else #define MYSQL_UNBIND_TABLE(handler) do { } while(0) #define PSI_CALL_unbind_table(A1) do { } while(0) #define PSI_CALL_rebind_table(A1,A2,A3) NULL #define PSI_CALL_close_table(A1,A2) do { } while(0) #define PSI_CALL_open_table(A1,A2) NULL #define PSI_CALL_get_table_share(A1,A2) NULL #define PSI_CALL_release_table_share(A1) do { } while(0) #define PSI_CALL_drop_table_share(A1,A2,A3,A4,A5) do { } while(0) #endif /** @def MYSQL_TABLE_WAIT_VARIABLES Instrumentation helper for table waits. This instrumentation declares local variables. Do not use a ';' after this macro @param LOCKER the locker @param STATE the locker state @sa MYSQL_START_TABLE_IO_WAIT. @sa MYSQL_END_TABLE_IO_WAIT. @sa MYSQL_START_TABLE_LOCK_WAIT. @sa MYSQL_END_TABLE_LOCK_WAIT. */ #ifdef HAVE_PSI_TABLE_INTERFACE #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) \ struct PSI_table_locker* LOCKER; \ PSI_table_locker_state STATE; #else #define MYSQL_TABLE_WAIT_VARIABLES(LOCKER, STATE) #endif /** @def MYSQL_START_TABLE_LOCK_WAIT Instrumentation helper for table lock waits. This instrumentation marks the start of a wait event. @param LOCKER the locker @param STATE the locker state @param PSI the instrumented table @param OP the table operation to be performed @param FLAGS per table operation flags. @sa MYSQL_END_TABLE_LOCK_WAIT. */ #ifdef HAVE_PSI_TABLE_INTERFACE #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \ LOCKER= inline_mysql_start_table_lock_wait(STATE, PSI, \ OP, FLAGS, __FILE__, __LINE__) #else #define MYSQL_START_TABLE_LOCK_WAIT(LOCKER, STATE, PSI, OP, FLAGS) \ do {} while (0) #endif /** @def MYSQL_END_TABLE_LOCK_WAIT Instrumentation helper for table lock waits. This instrumentation marks the end of a wait event. @param LOCKER the locker @sa MYSQL_START_TABLE_LOCK_WAIT. */ #ifdef HAVE_PSI_TABLE_INTERFACE #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \ inline_mysql_end_table_lock_wait(LOCKER) #else #define MYSQL_END_TABLE_LOCK_WAIT(LOCKER) \ do {} while (0) #endif #ifdef HAVE_PSI_TABLE_INTERFACE #define MYSQL_UNLOCK_TABLE(T) \ inline_mysql_unlock_table(T) #else #define MYSQL_UNLOCK_TABLE(T) \ do {} while (0) #endif #ifdef HAVE_PSI_TABLE_INTERFACE /** Instrumentation calls for MYSQL_START_TABLE_LOCK_WAIT. @sa MYSQL_END_TABLE_LOCK_WAIT. */ static inline struct PSI_table_locker * inline_mysql_start_table_lock_wait(PSI_table_locker_state *state, struct PSI_table *psi, enum PSI_table_lock_operation op, ulong flags, const char *src_file, uint src_line) { if (psi_likely(psi != NULL)) { struct PSI_table_locker *locker; locker= PSI_TABLE_CALL(start_table_lock_wait) (state, psi, op, flags, src_file, src_line); return locker; } return NULL; } /** Instrumentation calls for MYSQL_END_TABLE_LOCK_WAIT. @sa MYSQL_START_TABLE_LOCK_WAIT. */ static inline void inline_mysql_end_table_lock_wait(struct PSI_table_locker *locker) { if (psi_likely(locker != NULL)) PSI_TABLE_CALL(end_table_lock_wait)(locker); } static inline void inline_mysql_unlock_table(struct PSI_table *table) { if (table != NULL) PSI_TABLE_CALL(unlock_table)(table); } #endif /** @} (end of group Table_instrumentation) */ #endif PKe[ˁpsi/psi_abi_v0.hnu[/* Copyright (c) 2011, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file mysql/psi/psi_abi_v0.h ABI check for mysql/psi/psi.h, when compiling without instrumentation. This file is only used to automate detection of changes between versions. Do not include this file, include mysql/psi/psi.h instead. */ #define MY_GLOBAL_INCLUDED #include "mysql/psi/psi.h" PKe[W~~psi/mysql_thread.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. Copyright (c) 2020, 2021, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_THREAD_H #define MYSQL_THREAD_H /** @file mysql/psi/mysql_thread.h Instrumentation helpers for mysys threads, mutexes, read write locks and conditions. This header file provides the necessary declarations to use the mysys thread API with the performance schema instrumentation. In some compilers (SunStudio), 'static inline' functions, when declared but not used, are not optimized away (because they are unused) by default, so that including a static inline function from a header file does create unwanted dependencies, causing unresolved symbols at link time. Other compilers, like gcc, optimize these dependencies by default. Since the instrumented APIs declared here are wrapper on top of my_pthread / safemutex / etc APIs, including mysql/psi/mysql_thread.h assumes that the dependency on my_pthread and safemutex already exists. */ /* Note: there are several orthogonal dimensions here. Dimension 1: Instrumentation HAVE_PSI_INTERFACE is defined when the instrumentation is compiled in. This may happen both in debug or production builds. Dimension 2: Debug SAFE_MUTEX is defined when debug is compiled in. This may happen both with and without instrumentation. Dimension 3: Platform Mutexes are implemented with one of: - the pthread library - fast mutexes - window apis This is implemented by various macro definitions in my_pthread.h This causes complexity with '#ifdef'-ery that can't be avoided. */ #include "mysql/psi/psi.h" #ifdef MYSQL_SERVER #ifndef MYSQL_DYNAMIC_PLUGIN #include "pfs_thread_provider.h" #endif #endif #ifndef PSI_MUTEX_CALL #define PSI_MUTEX_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifndef PSI_RWLOCK_CALL #define PSI_RWLOCK_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifndef PSI_COND_CALL #define PSI_COND_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifndef PSI_THREAD_CALL #define PSI_THREAD_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Thread_instrumentation Thread Instrumentation @ingroup Instrumentation_interface @{ */ #ifdef HAVE_PSI_THREAD_INTERFACE #define PSI_CALL_delete_current_thread PSI_THREAD_CALL(delete_current_thread) #define PSI_CALL_get_thread PSI_THREAD_CALL(get_thread) #define PSI_CALL_new_thread PSI_THREAD_CALL(new_thread) #define PSI_CALL_register_thread PSI_THREAD_CALL(register_thread) #define PSI_CALL_set_thread PSI_THREAD_CALL(set_thread) #define PSI_CALL_set_thread_THD PSI_THREAD_CALL(set_thread_THD) #define PSI_CALL_set_thread_connect_attrs PSI_THREAD_CALL(set_thread_connect_attrs) #define PSI_CALL_set_thread_db PSI_THREAD_CALL(set_thread_db) #define PSI_CALL_set_thread_id PSI_THREAD_CALL(set_thread_id) #define PSI_CALL_set_thread_os_id PSI_THREAD_CALL(set_thread_os_id) #define PSI_CALL_set_thread_info PSI_THREAD_CALL(set_thread_info) #define PSI_CALL_set_thread_start_time PSI_THREAD_CALL(set_thread_start_time) #define PSI_CALL_set_thread_account PSI_THREAD_CALL(set_thread_account) #define PSI_CALL_spawn_thread PSI_THREAD_CALL(spawn_thread) #define PSI_CALL_set_connection_type PSI_THREAD_CALL(set_connection_type) #else #define PSI_CALL_delete_current_thread() do { } while(0) #define PSI_CALL_get_thread() NULL #define PSI_CALL_new_thread(A1,A2,A3) NULL #define PSI_CALL_register_thread(A1,A2,A3) do { } while(0) #define PSI_CALL_set_thread(A1) do { } while(0) #define PSI_CALL_set_thread_THD(A1,A2) do { } while(0) #define PSI_CALL_set_thread_connect_attrs(A1,A2,A3) 0 #define PSI_CALL_set_thread_db(A1,A2) do { } while(0) #define PSI_CALL_set_thread_id(A1,A2) do { } while(0) #define PSI_CALL_set_thread_os_id(A1) do { } while(0) #define PSI_CALL_set_thread_info(A1, A2) do { } while(0) #define PSI_CALL_set_thread_start_time(A1) do { } while(0) #define PSI_CALL_set_thread_account(A1, A2, A3, A4) do { } while(0) #define PSI_CALL_spawn_thread(A1, A2, A3, A4, A5) 0 #define PSI_CALL_set_connection_type(A) do { } while(0) #endif /** An instrumented mutex structure. @sa mysql_mutex_t */ struct st_mysql_mutex { /** The real mutex. */ #ifdef SAFE_MUTEX safe_mutex_t m_mutex; #else pthread_mutex_t m_mutex; #endif /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c mysql_mutex_t interface. */ struct PSI_mutex *m_psi; }; /** Type of an instrumented mutex. @c mysql_mutex_t is a drop-in replacement for @c pthread_mutex_t. @sa mysql_mutex_assert_owner @sa mysql_mutex_assert_not_owner @sa mysql_mutex_init @sa mysql_mutex_lock @sa mysql_mutex_unlock @sa mysql_mutex_destroy */ typedef struct st_mysql_mutex mysql_mutex_t; /** An instrumented rwlock structure. @sa mysql_rwlock_t */ struct st_mysql_rwlock { /** The real rwlock */ rw_lock_t m_rwlock; /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c mysql_rwlock_t interface. */ struct PSI_rwlock *m_psi; }; /** An instrumented prlock structure. @sa mysql_prlock_t */ struct st_mysql_prlock { /** The real prlock */ rw_pr_lock_t m_prlock; /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c mysql_rwlock_t interface. */ struct PSI_rwlock *m_psi; }; /** Type of an instrumented rwlock. @c mysql_rwlock_t is a drop-in replacement for @c pthread_rwlock_t. @sa mysql_rwlock_init @sa mysql_rwlock_rdlock @sa mysql_rwlock_tryrdlock @sa mysql_rwlock_wrlock @sa mysql_rwlock_trywrlock @sa mysql_rwlock_unlock @sa mysql_rwlock_destroy */ typedef struct st_mysql_rwlock mysql_rwlock_t; /** Type of an instrumented prlock. A prlock is a read write lock that 'prefers readers' (pr). @c mysql_prlock_t is a drop-in replacement for @c rw_pr_lock_t. @sa mysql_prlock_init @sa mysql_prlock_rdlock @sa mysql_prlock_wrlock @sa mysql_prlock_unlock @sa mysql_prlock_destroy */ typedef struct st_mysql_prlock mysql_prlock_t; /** An instrumented cond structure. @sa mysql_cond_t */ struct st_mysql_cond { /** The real condition */ pthread_cond_t m_cond; /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c mysql_cond_t interface. */ struct PSI_cond *m_psi; }; /** Type of an instrumented condition. @c mysql_cond_t is a drop-in replacement for @c pthread_cond_t. @sa mysql_cond_init @sa mysql_cond_wait @sa mysql_cond_timedwait @sa mysql_cond_signal @sa mysql_cond_broadcast @sa mysql_cond_destroy */ typedef struct st_mysql_cond mysql_cond_t; /* Consider the following code: static inline void foo() { bar(); } when foo() is never called. With gcc, foo() is a local static function, so the dependencies are optimized away at compile time, and there is no dependency on bar(). With other compilers (HP, Sun Studio), the function foo() implementation is compiled, and bar() needs to be present to link. Due to the existing header dependencies in MySQL code, this header file is sometime used when it is not needed, which in turn cause link failures on some platforms. The proper fix would be to cut these extra dependencies in the calling code. DISABLE_MYSQL_THREAD_H is a work around to limit dependencies. DISABLE_MYSQL_PRLOCK_H is similar, and is used to disable specifically the prlock wrappers. */ #ifndef DISABLE_MYSQL_THREAD_H #define mysql_mutex_is_owner(M) safe_mutex_is_owner(&(M)->m_mutex) /** @def mysql_mutex_assert_owner(M) Wrapper, to use safe_mutex_assert_owner with instrumented mutexes. @c mysql_mutex_assert_owner is a drop-in replacement for @c safe_mutex_assert_owner. */ #define mysql_mutex_assert_owner(M) \ safe_mutex_assert_owner(&(M)->m_mutex) /** @def mysql_mutex_assert_not_owner(M) Wrapper, to use safe_mutex_assert_not_owner with instrumented mutexes. @c mysql_mutex_assert_not_owner is a drop-in replacement for @c safe_mutex_assert_not_owner. */ #define mysql_mutex_assert_not_owner(M) \ safe_mutex_assert_not_owner(&(M)->m_mutex) #define mysql_mutex_setflags(M, F) \ safe_mutex_setflags(&(M)->m_mutex, (F)) /** @def mysql_prlock_assert_write_owner(M) Drop-in replacement for @c rw_pr_lock_assert_write_owner. */ #define mysql_prlock_assert_write_owner(M) \ rw_pr_lock_assert_write_owner(&(M)->m_prlock) /** @def mysql_prlock_assert_not_write_owner(M) Drop-in replacement for @c rw_pr_lock_assert_not_write_owner. */ #define mysql_prlock_assert_not_write_owner(M) \ rw_pr_lock_assert_not_write_owner(&(M)->m_prlock) /** @def mysql_mutex_register(P1, P2, P3) Mutex registration. */ #define mysql_mutex_register(P1, P2, P3) \ inline_mysql_mutex_register(P1, P2, P3) /** @def mysql_mutex_init(K, M, A) Instrumented mutex_init. @c mysql_mutex_init is a replacement for @c pthread_mutex_init. @param K The PSI_mutex_key for this instrumented mutex @param M The mutex to initialize @param A Mutex attributes */ #ifdef HAVE_PSI_MUTEX_INTERFACE #ifdef SAFE_MUTEX #define mysql_mutex_init(K, M, A) \ inline_mysql_mutex_init(K, M, A, #M, __FILE__, __LINE__) #else #define mysql_mutex_init(K, M, A) \ inline_mysql_mutex_init(K, M, A) #endif #else #ifdef SAFE_MUTEX #define mysql_mutex_init(K, M, A) \ inline_mysql_mutex_init(M, A, #M, __FILE__, __LINE__) #else #define mysql_mutex_init(K, M, A) \ inline_mysql_mutex_init(M, A) #endif #endif /** @def mysql_mutex_destroy(M) Instrumented mutex_destroy. @c mysql_mutex_destroy is a drop-in replacement for @c pthread_mutex_destroy. */ #ifdef SAFE_MUTEX #define mysql_mutex_destroy(M) \ inline_mysql_mutex_destroy(M, __FILE__, __LINE__) #else #define mysql_mutex_destroy(M) \ inline_mysql_mutex_destroy(M) #endif /** @def mysql_mutex_lock(M) Instrumented mutex_lock. @c mysql_mutex_lock is a drop-in replacement for @c pthread_mutex_lock. @param M The mutex to lock */ #if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) #define mysql_mutex_lock(M) \ inline_mysql_mutex_lock(M, __FILE__, __LINE__) #else #define mysql_mutex_lock(M) \ inline_mysql_mutex_lock(M) #endif /** @def mysql_mutex_trylock(M) Instrumented mutex_lock. @c mysql_mutex_trylock is a drop-in replacement for @c pthread_mutex_trylock. */ #if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) #define mysql_mutex_trylock(M) \ inline_mysql_mutex_trylock(M, __FILE__, __LINE__) #else #define mysql_mutex_trylock(M) \ inline_mysql_mutex_trylock(M) #endif /** @def mysql_mutex_unlock(M) Instrumented mutex_unlock. @c mysql_mutex_unlock is a drop-in replacement for @c pthread_mutex_unlock. */ #ifdef SAFE_MUTEX #define mysql_mutex_unlock(M) \ inline_mysql_mutex_unlock(M, __FILE__, __LINE__) #else #define mysql_mutex_unlock(M) \ inline_mysql_mutex_unlock(M) #endif /** @def mysql_rwlock_register(P1, P2, P3) Rwlock registration. */ #define mysql_rwlock_register(P1, P2, P3) \ inline_mysql_rwlock_register(P1, P2, P3) /** @def mysql_rwlock_init(K, RW) Instrumented rwlock_init. @c mysql_rwlock_init is a replacement for @c pthread_rwlock_init. Note that pthread_rwlockattr_t is not supported in MySQL. @param K The PSI_rwlock_key for this instrumented rwlock @param RW The rwlock to initialize */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(K, RW) #else #define mysql_rwlock_init(K, RW) inline_mysql_rwlock_init(RW) #endif /** @def mysql_prlock_init(K, RW) Instrumented rw_pr_init. @c mysql_prlock_init is a replacement for @c rw_pr_init. @param K The PSI_rwlock_key for this instrumented prlock @param RW The prlock to initialize */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(K, RW) #else #define mysql_prlock_init(K, RW) inline_mysql_prlock_init(RW) #endif /** @def mysql_rwlock_destroy(RW) Instrumented rwlock_destroy. @c mysql_rwlock_destroy is a drop-in replacement for @c pthread_rwlock_destroy. */ #define mysql_rwlock_destroy(RW) inline_mysql_rwlock_destroy(RW) /** @def mysql_prlock_destroy(RW) Instrumented rw_pr_destroy. @c mysql_prlock_destroy is a drop-in replacement for @c rw_pr_destroy. */ #define mysql_prlock_destroy(RW) inline_mysql_prlock_destroy(RW) /** @def mysql_rwlock_rdlock(RW) Instrumented rwlock_rdlock. @c mysql_rwlock_rdlock is a drop-in replacement for @c pthread_rwlock_rdlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_rwlock_rdlock(RW) \ inline_mysql_rwlock_rdlock(RW, __FILE__, __LINE__) #else #define mysql_rwlock_rdlock(RW) \ inline_mysql_rwlock_rdlock(RW) #endif /** @def mysql_prlock_rdlock(RW) Instrumented rw_pr_rdlock. @c mysql_prlock_rdlock is a drop-in replacement for @c rw_pr_rdlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_prlock_rdlock(RW) \ inline_mysql_prlock_rdlock(RW, __FILE__, __LINE__) #else #define mysql_prlock_rdlock(RW) \ inline_mysql_prlock_rdlock(RW) #endif /** @def mysql_rwlock_wrlock(RW) Instrumented rwlock_wrlock. @c mysql_rwlock_wrlock is a drop-in replacement for @c pthread_rwlock_wrlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_rwlock_wrlock(RW) \ inline_mysql_rwlock_wrlock(RW, __FILE__, __LINE__) #else #define mysql_rwlock_wrlock(RW) \ inline_mysql_rwlock_wrlock(RW) #endif /** @def mysql_prlock_wrlock(RW) Instrumented rw_pr_wrlock. @c mysql_prlock_wrlock is a drop-in replacement for @c rw_pr_wrlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_prlock_wrlock(RW) \ inline_mysql_prlock_wrlock(RW, __FILE__, __LINE__) #else #define mysql_prlock_wrlock(RW) \ inline_mysql_prlock_wrlock(RW) #endif /** @def mysql_rwlock_tryrdlock(RW) Instrumented rwlock_tryrdlock. @c mysql_rwlock_tryrdlock is a drop-in replacement for @c pthread_rwlock_tryrdlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_rwlock_tryrdlock(RW) \ inline_mysql_rwlock_tryrdlock(RW, __FILE__, __LINE__) #else #define mysql_rwlock_tryrdlock(RW) \ inline_mysql_rwlock_tryrdlock(RW) #endif /** @def mysql_rwlock_trywrlock(RW) Instrumented rwlock_trywrlock. @c mysql_rwlock_trywrlock is a drop-in replacement for @c pthread_rwlock_trywrlock. */ #ifdef HAVE_PSI_RWLOCK_INTERFACE #define mysql_rwlock_trywrlock(RW) \ inline_mysql_rwlock_trywrlock(RW, __FILE__, __LINE__) #else #define mysql_rwlock_trywrlock(RW) \ inline_mysql_rwlock_trywrlock(RW) #endif /** @def mysql_rwlock_unlock(RW) Instrumented rwlock_unlock. @c mysql_rwlock_unlock is a drop-in replacement for @c pthread_rwlock_unlock. */ #define mysql_rwlock_unlock(RW) inline_mysql_rwlock_unlock(RW) /** @def mysql_prlock_unlock(RW) Instrumented rw_pr_unlock. @c mysql_prlock_unlock is a drop-in replacement for @c rw_pr_unlock. */ #define mysql_prlock_unlock(RW) inline_mysql_prlock_unlock(RW) /** @def mysql_cond_register(P1, P2, P3) Cond registration. */ #define mysql_cond_register(P1, P2, P3) \ inline_mysql_cond_register(P1, P2, P3) /** @def mysql_cond_init(K, C, A) Instrumented cond_init. @c mysql_cond_init is a replacement for @c pthread_cond_init. @param C The cond to initialize @param K The PSI_cond_key for this instrumented cond @param A Condition attributes */ #ifdef HAVE_PSI_COND_INTERFACE #define mysql_cond_init(K, C, A) inline_mysql_cond_init(K, C, A) #else #define mysql_cond_init(K, C, A) inline_mysql_cond_init(C, A) #endif /** @def mysql_cond_destroy(C) Instrumented cond_destroy. @c mysql_cond_destroy is a drop-in replacement for @c pthread_cond_destroy. */ #define mysql_cond_destroy(C) inline_mysql_cond_destroy(C) /** @def mysql_cond_wait(C) Instrumented cond_wait. @c mysql_cond_wait is a drop-in replacement for @c pthread_cond_wait. */ #if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE) #define mysql_cond_wait(C, M) \ inline_mysql_cond_wait(C, M, __FILE__, __LINE__) #else #define mysql_cond_wait(C, M) \ inline_mysql_cond_wait(C, M) #endif /** @def mysql_cond_timedwait(C, M, W) Instrumented cond_timedwait. @c mysql_cond_timedwait is a drop-in replacement for @c pthread_cond_timedwait. */ #if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE) #define mysql_cond_timedwait(C, M, W) \ inline_mysql_cond_timedwait(C, M, W, __FILE__, __LINE__) #else #define mysql_cond_timedwait(C, M, W) \ inline_mysql_cond_timedwait(C, M, W) #endif /** @def mysql_cond_signal(C) Instrumented cond_signal. @c mysql_cond_signal is a drop-in replacement for @c pthread_cond_signal. */ #define mysql_cond_signal(C) inline_mysql_cond_signal(C) /** @def mysql_cond_broadcast(C) Instrumented cond_broadcast. @c mysql_cond_broadcast is a drop-in replacement for @c pthread_cond_broadcast. */ #define mysql_cond_broadcast(C) inline_mysql_cond_broadcast(C) /** @def mysql_thread_register(P1, P2, P3) Thread registration. */ #define mysql_thread_register(P1, P2, P3) \ inline_mysql_thread_register(P1, P2, P3) /** @def mysql_thread_create(K, P1, P2, P3, P4) Instrumented pthread_create. This function creates both the thread instrumentation and a thread. @c mysql_thread_create is a replacement for @c pthread_create. The parameter P4 (or, if it is NULL, P1) will be used as the instrumented thread "identity". Providing a P1 / P4 parameter with a different value for each call will on average improve performances, since this thread identity value is used internally to randomize access to data and prevent contention. This is optional, and the improvement is not guaranteed, only statistical. @param K The PSI_thread_key for this instrumented thread @param P1 pthread_create parameter 1 @param P2 pthread_create parameter 2 @param P3 pthread_create parameter 3 @param P4 pthread_create parameter 4 */ #ifdef HAVE_PSI_THREAD_INTERFACE #define mysql_thread_create(K, P1, P2, P3, P4) \ inline_mysql_thread_create(K, P1, P2, P3, P4) #else #define mysql_thread_create(K, P1, P2, P3, P4) \ pthread_create(P1, P2, P3, P4) #endif /** @def mysql_thread_set_psi_id(I) Set the thread identifier for the instrumentation. @param I The thread identifier */ #ifdef HAVE_PSI_THREAD_INTERFACE #define mysql_thread_set_psi_id(I) inline_mysql_thread_set_psi_id(I) #else #define mysql_thread_set_psi_id(I) do {} while (0) #endif /** @def mysql_thread_set_psi_THD(T) Set the thread sql session for the instrumentation. @param I The thread identifier */ #ifdef HAVE_PSI_THREAD_INTERFACE #define mysql_thread_set_psi_THD(T) inline_mysql_thread_set_psi_THD(T) #else #define mysql_thread_set_psi_THD(T) do {} while (0) #endif static inline void inline_mysql_mutex_register( #ifdef HAVE_PSI_MUTEX_INTERFACE const char *category, PSI_mutex_info *info, int count #else const char *category __attribute__ ((unused)), void *info __attribute__ ((unused)), int count __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_MUTEX_INTERFACE PSI_MUTEX_CALL(register_mutex)(category, info, count); #endif } static inline int inline_mysql_mutex_init( #ifdef HAVE_PSI_MUTEX_INTERFACE PSI_mutex_key key, #endif mysql_mutex_t *that, const pthread_mutexattr_t *attr #ifdef SAFE_MUTEX , const char *src_name, const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_MUTEX_INTERFACE that->m_psi= PSI_MUTEX_CALL(init_mutex)(key, &that->m_mutex); #else that->m_psi= NULL; #endif #ifdef SAFE_MUTEX return safe_mutex_init(&that->m_mutex, attr, src_name, src_file, src_line); #else return pthread_mutex_init(&that->m_mutex, attr); #endif } static inline int inline_mysql_mutex_destroy( mysql_mutex_t *that #ifdef SAFE_MUTEX , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_MUTEX_INTERFACE if (that->m_psi != NULL) { PSI_MUTEX_CALL(destroy_mutex)(that->m_psi); that->m_psi= NULL; } #endif #ifdef SAFE_MUTEX return safe_mutex_destroy(&that->m_mutex, src_file, src_line); #else return pthread_mutex_destroy(&that->m_mutex); #endif } #ifdef HAVE_PSI_MUTEX_INTERFACE ATTRIBUTE_COLD int psi_mutex_lock(mysql_mutex_t *that, const char *file, uint line); ATTRIBUTE_COLD int psi_mutex_trylock(mysql_mutex_t *that, const char *file, uint line); #endif static inline int inline_mysql_mutex_lock( mysql_mutex_t *that #if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_MUTEX_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_mutex_lock(that, src_file, src_line); #endif /* Non instrumented code */ #ifdef SAFE_MUTEX return safe_mutex_lock(&that->m_mutex, FALSE, src_file, src_line); #else return pthread_mutex_lock(&that->m_mutex); #endif } static inline int inline_mysql_mutex_trylock( mysql_mutex_t *that #if defined(SAFE_MUTEX) || defined (HAVE_PSI_MUTEX_INTERFACE) , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_MUTEX_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_mutex_trylock(that, src_file, src_line); #endif /* Non instrumented code */ #ifdef SAFE_MUTEX return safe_mutex_lock(&that->m_mutex, TRUE, src_file, src_line); #else return pthread_mutex_trylock(&that->m_mutex); #endif } static inline int inline_mysql_mutex_unlock( mysql_mutex_t *that #ifdef SAFE_MUTEX , const char *src_file, uint src_line #endif ) { int result; #ifdef HAVE_PSI_MUTEX_INTERFACE if (psi_likely(that->m_psi != NULL)) PSI_MUTEX_CALL(unlock_mutex)(that->m_psi); #endif #ifdef SAFE_MUTEX result= safe_mutex_unlock(&that->m_mutex, src_file, src_line); #else result= pthread_mutex_unlock(&that->m_mutex); #endif return result; } static inline void inline_mysql_rwlock_register( #ifdef HAVE_PSI_RWLOCK_INTERFACE const char *category, PSI_rwlock_info *info, int count #else const char *category __attribute__ ((unused)), void *info __attribute__ ((unused)), int count __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE PSI_RWLOCK_CALL(register_rwlock)(category, info, count); #endif } static inline int inline_mysql_rwlock_init( #ifdef HAVE_PSI_RWLOCK_INTERFACE PSI_rwlock_key key, #endif mysql_rwlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_rwlock); #else that->m_psi= NULL; #endif /* pthread_rwlockattr_t is not used in MySQL. */ return my_rwlock_init(&that->m_rwlock, NULL); } #ifndef DISABLE_MYSQL_PRLOCK_H static inline int inline_mysql_prlock_init( #ifdef HAVE_PSI_RWLOCK_INTERFACE PSI_rwlock_key key, #endif mysql_prlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE that->m_psi= PSI_RWLOCK_CALL(init_rwlock)(key, &that->m_prlock); #else that->m_psi= NULL; #endif return rw_pr_init(&that->m_prlock); } #endif static inline int inline_mysql_rwlock_destroy( mysql_rwlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) { PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); that->m_psi= NULL; } #endif return rwlock_destroy(&that->m_rwlock); } #ifndef DISABLE_MYSQL_PRLOCK_H static inline int inline_mysql_prlock_destroy( mysql_prlock_t *that) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) { PSI_RWLOCK_CALL(destroy_rwlock)(that->m_psi); that->m_psi= NULL; } #endif return rw_pr_destroy(&that->m_prlock); } #endif #ifdef HAVE_PSI_RWLOCK_INTERFACE ATTRIBUTE_COLD int psi_rwlock_rdlock(mysql_rwlock_t *that, const char *file, uint line); ATTRIBUTE_COLD int psi_rwlock_tryrdlock(mysql_rwlock_t *that, const char *file, uint line); ATTRIBUTE_COLD int psi_rwlock_wrlock(mysql_rwlock_t *that, const char *file, uint line); ATTRIBUTE_COLD int psi_rwlock_trywrlock(mysql_rwlock_t *that, const char *file, uint line); # ifndef DISABLE_MYSQL_PRLOCK_H ATTRIBUTE_COLD int psi_prlock_rdlock(mysql_prlock_t *that, const char *file, uint line); ATTRIBUTE_COLD int psi_prlock_wrlock(mysql_prlock_t *that, const char *file, uint line); # endif #endif static inline int inline_mysql_rwlock_rdlock( mysql_rwlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_rwlock_rdlock(that, src_file, src_line); #endif return rw_rdlock(&that->m_rwlock); } #ifndef DISABLE_MYSQL_PRLOCK_H static inline int inline_mysql_prlock_rdlock( mysql_prlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_prlock_rdlock(that, src_file, src_line); #endif return rw_pr_rdlock(&that->m_prlock); } #endif static inline int inline_mysql_rwlock_wrlock( mysql_rwlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_rwlock_wrlock(that, src_file, src_line); #endif return rw_wrlock(&that->m_rwlock); } #ifndef DISABLE_MYSQL_PRLOCK_H static inline int inline_mysql_prlock_wrlock( mysql_prlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_prlock_wrlock(that, src_file, src_line); #endif return rw_pr_wrlock(&that->m_prlock); } #endif static inline int inline_mysql_rwlock_tryrdlock( mysql_rwlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_rwlock_tryrdlock(that, src_file, src_line); #endif return rw_tryrdlock(&that->m_rwlock); } static inline int inline_mysql_rwlock_trywrlock( mysql_rwlock_t *that #ifdef HAVE_PSI_RWLOCK_INTERFACE , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_rwlock_trywrlock(that, src_file, src_line); #endif return rw_trywrlock(&that->m_rwlock); } static inline int inline_mysql_rwlock_unlock( mysql_rwlock_t *that) { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); #endif result= rw_unlock(&that->m_rwlock); return result; } #ifndef DISABLE_MYSQL_PRLOCK_H static inline int inline_mysql_prlock_unlock( mysql_prlock_t *that) { int result; #ifdef HAVE_PSI_RWLOCK_INTERFACE if (psi_likely(that->m_psi != NULL)) PSI_RWLOCK_CALL(unlock_rwlock)(that->m_psi); #endif result= rw_pr_unlock(&that->m_prlock); return result; } #endif static inline void inline_mysql_cond_register( #ifdef HAVE_PSI_COND_INTERFACE const char *category, PSI_cond_info *info, int count #else const char *category __attribute__ ((unused)), void *info __attribute__ ((unused)), int count __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_COND_INTERFACE PSI_COND_CALL(register_cond)(category, info, count); #endif } static inline int inline_mysql_cond_init( #ifdef HAVE_PSI_COND_INTERFACE PSI_cond_key key, #endif mysql_cond_t *that, const pthread_condattr_t *attr) { #ifdef HAVE_PSI_COND_INTERFACE that->m_psi= PSI_COND_CALL(init_cond)(key, &that->m_cond); #else that->m_psi= NULL; #endif return pthread_cond_init(&that->m_cond, attr); } static inline int inline_mysql_cond_destroy( mysql_cond_t *that) { #ifdef HAVE_PSI_COND_INTERFACE if (psi_likely(that->m_psi != NULL)) { PSI_COND_CALL(destroy_cond)(that->m_psi); that->m_psi= NULL; } #endif return pthread_cond_destroy(&that->m_cond); } #ifdef HAVE_PSI_COND_INTERFACE ATTRIBUTE_COLD int psi_cond_wait(mysql_cond_t *that, mysql_mutex_t *mutex, const char *file, uint line); ATTRIBUTE_COLD int psi_cond_timedwait(mysql_cond_t *that, mysql_mutex_t *mutex, const struct timespec *abstime, const char *file, uint line); #endif static inline int inline_mysql_cond_wait( mysql_cond_t *that, mysql_mutex_t *mutex #if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE) , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_COND_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_cond_wait(that, mutex, src_file, src_line); #endif return my_cond_wait(&that->m_cond, &mutex->m_mutex); } static inline int inline_mysql_cond_timedwait( mysql_cond_t *that, mysql_mutex_t *mutex, const struct timespec *abstime #if defined(SAFE_MUTEX) || defined(HAVE_PSI_COND_INTERFACE) , const char *src_file, uint src_line #endif ) { #ifdef HAVE_PSI_COND_INTERFACE if (psi_likely(that->m_psi != NULL)) return psi_cond_timedwait(that, mutex, abstime, src_file, src_line); #endif return my_cond_timedwait(&that->m_cond, &mutex->m_mutex, abstime); } static inline int inline_mysql_cond_signal( mysql_cond_t *that) { int result; #ifdef HAVE_PSI_COND_INTERFACE if (psi_likely(that->m_psi != NULL)) PSI_COND_CALL(signal_cond)(that->m_psi); #endif result= pthread_cond_signal(&that->m_cond); return result; } static inline int inline_mysql_cond_broadcast( mysql_cond_t *that) { int result; #ifdef HAVE_PSI_COND_INTERFACE if (psi_likely(that->m_psi != NULL)) PSI_COND_CALL(broadcast_cond)(that->m_psi); #endif result= pthread_cond_broadcast(&that->m_cond); return result; } static inline void inline_mysql_thread_register( #ifdef HAVE_PSI_THREAD_INTERFACE const char *category, PSI_thread_info *info, int count #else const char *category __attribute__ ((unused)), void *info __attribute__ ((unused)), int count __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_THREAD_INTERFACE PSI_THREAD_CALL(register_thread)(category, info, count); #endif } #ifdef HAVE_PSI_THREAD_INTERFACE static inline int inline_mysql_thread_create( PSI_thread_key key, pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) { int result; result= PSI_THREAD_CALL(spawn_thread)(key, thread, attr, start_routine, arg); return result; } static inline void inline_mysql_thread_set_psi_id(my_thread_id id) { struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)(); PSI_THREAD_CALL(set_thread_id)(psi, id); } #ifdef __cplusplus class THD; static inline void inline_mysql_thread_set_psi_THD(THD *thd) { struct PSI_thread *psi= PSI_THREAD_CALL(get_thread)(); PSI_THREAD_CALL(set_thread_THD)(psi, thd); } #endif /* __cplusplus */ static inline void mysql_thread_set_peer_port(uint port __attribute__ ((unused))) { #ifdef HAVE_PSI_THREAD_INTERFACE struct PSI_thread *psi = PSI_THREAD_CALL(get_thread)(); PSI_THREAD_CALL(set_thread_peer_port)(psi, port); #endif } #endif #endif /* DISABLE_MYSQL_THREAD_H */ /** @} (end of group Thread_instrumentation) */ #endif PKe[ᒣJJpsi/mysql_stage.hnu[/* Copyright (c) 2010, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_STAGE_H #define MYSQL_STAGE_H /** @file mysql/psi/mysql_stage.h Instrumentation helpers for stages. */ #include "mysql/psi/psi.h" #ifndef PSI_STAGE_CALL #define PSI_STAGE_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Stage_instrumentation Stage Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_stage_register(P1, P2, P3) Stage registration. */ #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_stage_register(P1, P2, P3) \ inline_mysql_stage_register(P1, P2, P3) #else #define mysql_stage_register(P1, P2, P3) \ do {} while (0) #endif /** @def MYSQL_SET_STAGE Set the current stage. Use this API when the file and line is passed from the caller. @param K the stage key @param F the source file name @param L the source file line @return the current stage progress */ #ifdef HAVE_PSI_STAGE_INTERFACE #define MYSQL_SET_STAGE(K, F, L) \ inline_mysql_set_stage(K, F, L) #else #define MYSQL_SET_STAGE(K, F, L) \ NULL #endif /** @def mysql_set_stage Set the current stage. @param K the stage key @return the current stage progress */ #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_set_stage(K) \ inline_mysql_set_stage(K, __FILE__, __LINE__) #else #define mysql_set_stage(K) \ NULL #endif /** @def mysql_end_stage End the last stage */ #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_end_stage() \ inline_mysql_end_stage() #else #define mysql_end_stage() \ do {} while (0) #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline void inline_mysql_stage_register( const char *category, PSI_stage_info **info, int count) { PSI_STAGE_CALL(register_stage)(category, info, count); } #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline PSI_stage_progress* inline_mysql_set_stage(PSI_stage_key key, const char *src_file, int src_line) { return PSI_STAGE_CALL(start_stage)(key, src_file, src_line); } #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline void inline_mysql_end_stage() { PSI_STAGE_CALL(end_stage)(); } #endif #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_stage_set_work_completed(P1, P2) \ inline_mysql_stage_set_work_completed(P1, P2) #define mysql_stage_get_work_completed(P1) \ inline_mysql_stage_get_work_completed(P1) #else #define mysql_stage_set_work_completed(P1, P2) \ do {} while (0) #define mysql_stage_get_work_completed(P1) \ do {} while (0) #endif #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_stage_inc_work_completed(P1, P2) \ inline_mysql_stage_inc_work_completed(P1, P2) #else #define mysql_stage_inc_work_completed(P1, P2) \ do {} while (0) #endif #ifdef HAVE_PSI_STAGE_INTERFACE #define mysql_stage_set_work_estimated(P1, P2) \ inline_mysql_stage_set_work_estimated(P1, P2) #define mysql_stage_get_work_estimated(P1) \ inline_mysql_stage_get_work_estimated(P1) #else #define mysql_stage_set_work_estimated(P1, P2) \ do {} while (0) #define mysql_stage_get_work_estimated(P1) \ do {} while (0) #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline void inline_mysql_stage_set_work_completed(PSI_stage_progress *progress, ulonglong val) { if (progress != NULL) progress->m_work_completed= val; } static inline ulonglong inline_mysql_stage_get_work_completed(PSI_stage_progress *progress) { return progress->m_work_completed; } #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline void inline_mysql_stage_inc_work_completed(PSI_stage_progress *progress, ulonglong val) { if (progress != NULL) progress->m_work_completed+= val; } #endif #ifdef HAVE_PSI_STAGE_INTERFACE static inline void inline_mysql_stage_set_work_estimated(PSI_stage_progress *progress, ulonglong val) { if (progress != NULL) progress->m_work_estimated= val; } static inline ulonglong inline_mysql_stage_get_work_estimated(PSI_stage_progress *progress) { return progress->m_work_estimated; } #endif /** @} (end of group Stage_instrumentation) */ #endif PKe[]e''psi/mysql_ps.hnu[/* Copyright (c) 2014, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MYSQL_PS_H #define MYSQL_PS_H /** @file mysql/psi/mysql_ps.h Instrumentation helpers for prepared statements. */ #include "mysql/psi/psi.h" #ifndef PSI_PS_CALL #define PSI_PS_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifdef HAVE_PSI_PS_INTERFACE #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH) \ inline_mysql_create_prepared_stmt(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH) #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \ inline_mysql_execute_prepared_stmt(LOCKER, PREPARED_STMT) #define MYSQL_DESTROY_PS(PREPARED_STMT) \ inline_mysql_destroy_prepared_stmt(PREPARED_STMT) #define MYSQL_REPREPARE_PS(PREPARED_STMT) \ inline_mysql_reprepare_prepared_stmt(PREPARED_STMT) #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \ inline_mysql_set_prepared_stmt_text(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) #else #define MYSQL_CREATE_PS(IDENTITY, ID, LOCKER, NAME, NAME_LENGTH) \ NULL #define MYSQL_EXECUTE_PS(LOCKER, PREPARED_STMT) \ do {} while (0) #define MYSQL_DESTROY_PS(PREPARED_STMT) \ do {} while (0) #define MYSQL_REPREPARE_PS(PREPARED_STMT) \ do {} while (0) #define MYSQL_SET_PS_TEXT(PREPARED_STMT, SQLTEXT, SQLTEXT_LENGTH) \ do {} while (0) #endif #ifdef HAVE_PSI_PS_INTERFACE static inline struct PSI_prepared_stmt* inline_mysql_create_prepared_stmt(void *identity, uint stmt_id, PSI_statement_locker *locker, const char *stmt_name, size_t stmt_name_length) { if (locker == NULL) return NULL; return PSI_PS_CALL(create_prepared_stmt)(identity, stmt_id, locker, stmt_name, stmt_name_length); } static inline void inline_mysql_execute_prepared_stmt(PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt) { if (prepared_stmt != NULL && locker != NULL) PSI_PS_CALL(execute_prepared_stmt)(locker, prepared_stmt); } static inline void inline_mysql_destroy_prepared_stmt(PSI_prepared_stmt *prepared_stmt) { if (prepared_stmt != NULL) PSI_PS_CALL(destroy_prepared_stmt)(prepared_stmt); } static inline void inline_mysql_reprepare_prepared_stmt(PSI_prepared_stmt *prepared_stmt) { if (prepared_stmt != NULL) PSI_PS_CALL(reprepare_prepared_stmt)(prepared_stmt); } static inline void inline_mysql_set_prepared_stmt_text(PSI_prepared_stmt *prepared_stmt, const char *text, uint text_len) { if (prepared_stmt != NULL) { PSI_PS_CALL(set_prepared_stmt_text)(prepared_stmt, text, text_len); } } #endif #endif PKe[S?7 7 psi/mysql_memory.hnu[/* Copyright (c) 2012, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Suite 500, Boston, MA 02110-1335 USA */ #ifndef MYSQL_MEMORY_H #define MYSQL_MEMORY_H /** @file mysql/psi/mysql_memory.h Instrumentation helpers for memory allocation. */ #include "mysql/psi/psi.h" #ifdef HAVE_PSI_MEMORY_INTERFACE #define PSI_CALL_memory_alloc(A1,A2,A3) PSI_MEMORY_CALL(memory_alloc)(A1,A2,A3) #define PSI_CALL_memory_free(A1,A2,A3) PSI_MEMORY_CALL(memory_free)(A1,A2,A3) #define PSI_CALL_memory_realloc(A1,A2,A3,A4) PSI_MEMORY_CALL(memory_realloc)(A1,A2,A3,A4) #define PSI_CALL_register_memory(A1,A2,A3) PSI_MEMORY_CALL(register_memory)(A1,A2,A3) #else #define PSI_CALL_memory_alloc(A1,A2,A3) 0 #define PSI_CALL_memory_free(A1,A2,A3) do { } while(0) #define PSI_CALL_memory_realloc(A1,A2,A3,A4) 0 #define PSI_CALL_register_memory(A1,A2,A3) do { } while(0) #endif #ifndef PSI_MEMORY_CALL #define PSI_MEMORY_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Memory_instrumentation Memory Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_memory_register(P1, P2, P3) Memory registration. */ #define mysql_memory_register(P1, P2, P3) \ inline_mysql_memory_register(P1, P2, P3) static inline void inline_mysql_memory_register( #ifdef HAVE_PSI_MEMORY_INTERFACE const char *category, PSI_memory_info *info, int count) #else const char *category __attribute__((unused)), void *info __attribute__((unused)), int count __attribute__((unused))) #endif { PSI_CALL_register_memory(category, info, count); } /** @} (end of group Memory_instrumentation) */ #endif PKe[~m@@psi/mysql_transaction.hnu[/* Copyright (c) 2013, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MYSQL_TRANSACTION_H #define MYSQL_TRANSACTION_H /** @file mysql/psi/mysql_transaction.h Instrumentation helpers for transactions. */ #include "mysql/psi/psi.h" #ifndef PSI_TRANSACTION_CALL #define PSI_TRANSACTION_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Transaction_instrumentation Transaction Instrumentation @ingroup Instrumentation_interface @{ */ #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \ inline_mysql_start_transaction(STATE, XID, TRXID, ISO, RO, AC, __FILE__, __LINE__) #else #define MYSQL_START_TRANSACTION(STATE, XID, TRXID, ISO, RO, AC) \ 0 #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \ inline_mysql_set_transaction_gtid(LOCKER, P1, P2) #else #define MYSQL_SET_TRANSACTION_GTID(LOCKER, P1, P2) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \ inline_mysql_set_transaction_xid(LOCKER, P1, P2) #else #define MYSQL_SET_TRANSACTION_XID(LOCKER, P1, P2) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \ inline_mysql_set_transaction_xa_state(LOCKER, P1) #else #define MYSQL_SET_TRANSACTION_XA_STATE(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \ inline_mysql_set_transaction_trxid(LOCKER, P1) #else #define MYSQL_SET_TRANSACTION_TRXID(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \ inline_mysql_inc_transaction_savepoints(LOCKER, P1) #else #define MYSQL_INC_TRANSACTION_SAVEPOINTS(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \ inline_mysql_inc_transaction_rollback_to_savepoint(LOCKER, P1) #else #define MYSQL_INC_TRANSACTION_ROLLBACK_TO_SAVEPOINT(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \ inline_mysql_inc_transaction_release_savepoint(LOCKER, P1) #else #define MYSQL_INC_TRANSACTION_RELEASE_SAVEPOINT(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \ inline_mysql_rollback_transaction(LOCKER) #else #define MYSQL_ROLLBACK_TRANSACTION(LOCKER) \ do { } while(0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE #define MYSQL_COMMIT_TRANSACTION(LOCKER) \ inline_mysql_commit_transaction(LOCKER) #else #define MYSQL_COMMIT_TRANSACTION(LOCKER) \ do { } while(0) #endif #ifdef HAVE_PSI_TRANSACTION_INTERFACE static inline struct PSI_transaction_locker * inline_mysql_start_transaction(PSI_transaction_locker_state *state, const void *xid, ulonglong trxid, int isolation_level, my_bool read_only, my_bool autocommit, const char *src_file, int src_line) { PSI_transaction_locker *locker; locker= PSI_TRANSACTION_CALL(get_thread_transaction_locker)(state, xid, trxid, isolation_level, read_only, autocommit); if (likely(locker != NULL)) PSI_TRANSACTION_CALL(start_transaction)(locker, src_file, src_line); return locker; } static inline void inline_mysql_set_transaction_gtid(PSI_transaction_locker *locker, const void *sid, const void *gtid_spec) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(set_transaction_gtid)(locker, sid, gtid_spec); } static inline void inline_mysql_set_transaction_xid(PSI_transaction_locker *locker, const void *xid, int xa_state) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(set_transaction_xid)(locker, xid, xa_state); } static inline void inline_mysql_set_transaction_xa_state(PSI_transaction_locker *locker, int xa_state) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(set_transaction_xa_state)(locker, xa_state); } static inline void inline_mysql_set_transaction_trxid(PSI_transaction_locker *locker, const ulonglong *trxid) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(set_transaction_trxid)(locker, trxid); } static inline void inline_mysql_inc_transaction_savepoints(PSI_transaction_locker *locker, ulong count) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(inc_transaction_savepoints)(locker, count); } static inline void inline_mysql_inc_transaction_rollback_to_savepoint(PSI_transaction_locker *locker, ulong count) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(inc_transaction_rollback_to_savepoint)(locker, count); } static inline void inline_mysql_inc_transaction_release_savepoint(PSI_transaction_locker *locker, ulong count) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(inc_transaction_release_savepoint)(locker, count); } static inline void inline_mysql_rollback_transaction(struct PSI_transaction_locker *locker) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(end_transaction)(locker, false); } static inline void inline_mysql_commit_transaction(struct PSI_transaction_locker *locker) { if (likely(locker != NULL)) PSI_TRANSACTION_CALL(end_transaction)(locker, true); } #endif /** @} (end of group Transaction_instrumentation) */ #endif PKe[ۺը psi/mysql_sp.hnu[/* Copyright (c) 2013, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ #ifndef MYSQL_SP_H #define MYSQL_SP_H /** @file mysql/psi/mysql_sp.h Instrumentation helpers for stored programs. */ #include "mysql/psi/psi.h" #ifndef PSI_SP_CALL #define PSI_SP_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifdef HAVE_PSI_SP_INTERFACE #define MYSQL_START_SP(STATE, SP_SHARE) \ inline_mysql_start_sp(STATE, SP_SHARE) #else #define MYSQL_START_SP(STATE, SP_SHARE) \ NULL #endif #ifdef HAVE_PSI_SP_INTERFACE #define MYSQL_END_SP(LOCKER) \ inline_mysql_end_sp(LOCKER) #else #define MYSQL_END_SP(LOCKER) \ do {} while (0) #endif #ifdef HAVE_PSI_SP_INTERFACE #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \ inline_mysql_drop_sp(OT, SN, SNL, ON, ONL) #else #define MYSQL_DROP_SP(OT, SN, SNL, ON, ONL) \ do {} while (0) #endif #ifdef HAVE_PSI_SP_INTERFACE #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \ inline_mysql_get_sp_share(OT, SN, SNL, ON, ONL) #else #define MYSQL_GET_SP_SHARE(OT, SN, SNL, ON, ONL) \ NULL #endif #ifdef HAVE_PSI_SP_INTERFACE static inline struct PSI_sp_locker* inline_mysql_start_sp(PSI_sp_locker_state *state, PSI_sp_share *sp_share) { return PSI_SP_CALL(start_sp)(state, sp_share); } static inline void inline_mysql_end_sp(PSI_sp_locker *locker) { if (likely(locker != NULL)) PSI_SP_CALL(end_sp)(locker); } static inline void inline_mysql_drop_sp(uint sp_type, const char* schema_name, uint shcema_name_length, const char* object_name, uint object_name_length) { PSI_SP_CALL(drop_sp)(sp_type, schema_name, shcema_name_length, object_name, object_name_length); } static inline PSI_sp_share* inline_mysql_get_sp_share(uint sp_type, const char* schema_name, uint shcema_name_length, const char* object_name, uint object_name_length) { return PSI_SP_CALL(get_sp_share)(sp_type, schema_name, shcema_name_length, object_name, object_name_length); } #endif #endif PKe[fpsi/mysql_file.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_FILE_H #define MYSQL_FILE_H /* For strlen() */ #include /* For MY_STAT */ #include /* For my_chsize */ #include /** @file mysql/psi/mysql_file.h Instrumentation helpers for mysys file io. This header file provides the necessary declarations to use the mysys file API with the performance schema instrumentation. In some compilers (SunStudio), 'static inline' functions, when declared but not used, are not optimized away (because they are unused) by default, so that including a static inline function from a header file does create unwanted dependencies, causing unresolved symbols at link time. Other compilers, like gcc, optimize these dependencies by default. Since the instrumented APIs declared here are wrapper on top of mysys file io APIs, including mysql/psi/mysql_file.h assumes that the dependency on my_sys already exists. */ #include "mysql/psi/psi.h" #ifndef PSI_FILE_CALL #define PSI_FILE_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup File_instrumentation File Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_file_register(P1, P2, P3) File registration. */ #define mysql_file_register(P1, P2, P3) \ inline_mysql_file_register(P1, P2, P3) /** @def mysql_file_fgets(P1, P2, F) Instrumented fgets. @c mysql_file_fgets is a replacement for @c fgets. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fgets(P1, P2, F) \ inline_mysql_file_fgets(__FILE__, __LINE__, P1, P2, F) #else #define mysql_file_fgets(P1, P2, F) \ inline_mysql_file_fgets(P1, P2, F) #endif /** @def mysql_file_fgetc(F) Instrumented fgetc. @c mysql_file_fgetc is a replacement for @c fgetc. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fgetc(F) inline_mysql_file_fgetc(__FILE__, __LINE__, F) #else #define mysql_file_fgetc(F) inline_mysql_file_fgetc(F) #endif /** @def mysql_file_fputs(P1, F) Instrumented fputs. @c mysql_file_fputs is a replacement for @c fputs. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fputs(P1, F) \ inline_mysql_file_fputs(__FILE__, __LINE__, P1, F) #else #define mysql_file_fputs(P1, F)\ inline_mysql_file_fputs(P1, F) #endif /** @def mysql_file_fputc(P1, F) Instrumented fputc. @c mysql_file_fputc is a replacement for @c fputc. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fputc(P1, F) \ inline_mysql_file_fputc(__FILE__, __LINE__, P1, F) #else #define mysql_file_fputc(P1, F) \ inline_mysql_file_fputc(P1, F) #endif /** @def mysql_file_fprintf Instrumented fprintf. @c mysql_file_fprintf is a replacement for @c fprintf. */ #define mysql_file_fprintf inline_mysql_file_fprintf /** @def mysql_file_vfprintf(F, P1, P2) Instrumented vfprintf. @c mysql_file_vfprintf is a replacement for @c vfprintf. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_vfprintf(F, P1, P2) \ inline_mysql_file_vfprintf(__FILE__, __LINE__, F, P1, P2) #else #define mysql_file_vfprintf(F, P1, P2) \ inline_mysql_file_vfprintf(F, P1, P2) #endif /** @def mysql_file_fflush(F, P1, P2) Instrumented fflush. @c mysql_file_fflush is a replacement for @c fflush. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fflush(F) \ inline_mysql_file_fflush(__FILE__, __LINE__, F) #else #define mysql_file_fflush(F) \ inline_mysql_file_fflush(F) #endif /** @def mysql_file_feof(F) Instrumented feof. @c mysql_file_feof is a replacement for @c feof. */ #define mysql_file_feof(F) inline_mysql_file_feof(F) /** @def mysql_file_fstat(FN, S, FL) Instrumented fstat. @c mysql_file_fstat is a replacement for @c my_fstat. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fstat(FN, S, FL) \ inline_mysql_file_fstat(__FILE__, __LINE__, FN, S, FL) #else #define mysql_file_fstat(FN, S, FL) \ inline_mysql_file_fstat(FN, S, FL) #endif /** @def mysql_file_stat(K, FN, S, FL) Instrumented stat. @c mysql_file_stat is a replacement for @c my_stat. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_stat(K, FN, S, FL) \ inline_mysql_file_stat(K, __FILE__, __LINE__, FN, S, FL) #else #define mysql_file_stat(K, FN, S, FL) \ inline_mysql_file_stat(FN, S, FL) #endif /** @def mysql_file_chsize(F, P1, P2, P3) Instrumented chsize. @c mysql_file_chsize is a replacement for @c my_chsize. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_chsize(F, P1, P2, P3) \ inline_mysql_file_chsize(__FILE__, __LINE__, F, P1, P2, P3) #else #define mysql_file_chsize(F, P1, P2, P3) \ inline_mysql_file_chsize(F, P1, P2, P3) #endif /** @def mysql_file_fopen(K, N, F1, F2) Instrumented fopen. @c mysql_file_fopen is a replacement for @c my_fopen. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fopen(K, N, F1, F2) \ inline_mysql_file_fopen(K, __FILE__, __LINE__, N, F1, F2) #else #define mysql_file_fopen(K, N, F1, F2) \ inline_mysql_file_fopen(N, F1, F2) #endif /** @def mysql_file_fclose(FD, FL) Instrumented fclose. @c mysql_file_fclose is a replacement for @c my_fclose. Without the instrumentation, this call will have the same behavior as the undocumented and possibly platform specific my_fclose(NULL, ...) behavior. With the instrumentation, mysql_fclose(NULL, ...) will safely return 0, which is an extension compared to my_fclose and is therefore compliant. mysql_fclose is on purpose *not* implementing @code assert(file != NULL) @endcode, since doing so could introduce regressions. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fclose(FD, FL) \ inline_mysql_file_fclose(__FILE__, __LINE__, FD, FL) #else #define mysql_file_fclose(FD, FL) \ inline_mysql_file_fclose(FD, FL) #endif /** @def mysql_file_fread(FD, P1, P2, P3) Instrumented fread. @c mysql_file_fread is a replacement for @c my_fread. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fread(FD, P1, P2, P3) \ inline_mysql_file_fread(__FILE__, __LINE__, FD, P1, P2, P3) #else #define mysql_file_fread(FD, P1, P2, P3) \ inline_mysql_file_fread(FD, P1, P2, P3) #endif /** @def mysql_file_fwrite(FD, P1, P2, P3) Instrumented fwrite. @c mysql_file_fwrite is a replacement for @c my_fwrite. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fwrite(FD, P1, P2, P3) \ inline_mysql_file_fwrite(__FILE__, __LINE__, FD, P1, P2, P3) #else #define mysql_file_fwrite(FD, P1, P2, P3) \ inline_mysql_file_fwrite(FD, P1, P2, P3) #endif /** @def mysql_file_fseek(FD, P, W, F) Instrumented fseek. @c mysql_file_fseek is a replacement for @c my_fseek. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_fseek(FD, P, W, F) \ inline_mysql_file_fseek(__FILE__, __LINE__, FD, P, W, F) #else #define mysql_file_fseek(FD, P, W, F) \ inline_mysql_file_fseek(FD, P, W, F) #endif /** @def mysql_file_ftell(FD, F) Instrumented ftell. @c mysql_file_ftell is a replacement for @c my_ftell. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_ftell(FD, F) \ inline_mysql_file_ftell(__FILE__, __LINE__, FD, F) #else #define mysql_file_ftell(FD, F) \ inline_mysql_file_ftell(FD, F) #endif /** @def mysql_file_create(K, N, F1, F2, F3) Instrumented create. @c mysql_file_create is a replacement for @c my_create. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_create(K, N, F1, F2, F3) \ inline_mysql_file_create(K, __FILE__, __LINE__, N, F1, F2, F3) #else #define mysql_file_create(K, N, F1, F2, F3) \ inline_mysql_file_create(N, F1, F2, F3) #endif /** @def mysql_file_create_temp(K, T, D, P, M, F) Instrumented create_temp_file. @c mysql_file_create_temp is a replacement for @c create_temp_file. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_create_temp(K, T, D, P, M, F) \ inline_mysql_file_create_temp(K, __FILE__, __LINE__, T, D, P, M, F) #else #define mysql_file_create_temp(K, T, D, P, M, F) \ inline_mysql_file_create_temp(T, D, P, M, F) #endif /** @def mysql_file_open(K, N, F1, F2) Instrumented open. @c mysql_file_open is a replacement for @c my_open. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_open(K, N, F1, F2) \ inline_mysql_file_open(K, __FILE__, __LINE__, N, F1, F2) #else #define mysql_file_open(K, N, F1, F2) \ inline_mysql_file_open(N, F1, F2) #endif /** @def mysql_file_close(FD, F) Instrumented close. @c mysql_file_close is a replacement for @c my_close. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_close(FD, F) \ inline_mysql_file_close(__FILE__, __LINE__, FD, F) #else #define mysql_file_close(FD, F) \ inline_mysql_file_close(FD, F) #endif /** @def mysql_file_read(FD, B, S, F) Instrumented read. @c mysql_read is a replacement for @c my_read. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_read(FD, B, S, F) \ inline_mysql_file_read(__FILE__, __LINE__, FD, B, S, F) #else #define mysql_file_read(FD, B, S, F) \ inline_mysql_file_read(FD, B, S, F) #endif /** @def mysql_file_write(FD, B, S, F) Instrumented write. @c mysql_file_write is a replacement for @c my_write. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_write(FD, B, S, F) \ inline_mysql_file_write(__FILE__, __LINE__, FD, B, S, F) #else #define mysql_file_write(FD, B, S, F) \ inline_mysql_file_write(FD, B, S, F) #endif /** @def mysql_file_pread(FD, B, S, O, F) Instrumented pread. @c mysql_pread is a replacement for @c my_pread. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_pread(FD, B, S, O, F) \ inline_mysql_file_pread(__FILE__, __LINE__, FD, B, S, O, F) #else #define mysql_file_pread(FD, B, S, O, F) \ inline_mysql_file_pread(FD, B, S, O, F) #endif /** @def mysql_file_pwrite(FD, B, S, O, F) Instrumented pwrite. @c mysql_file_pwrite is a replacement for @c my_pwrite. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_pwrite(FD, B, S, O, F) \ inline_mysql_file_pwrite(__FILE__, __LINE__, FD, B, S, O, F) #else #define mysql_file_pwrite(FD, B, S, O, F) \ inline_mysql_file_pwrite(FD, B, S, O, F) #endif /** @def mysql_file_seek(FD, P, W, F) Instrumented seek. @c mysql_file_seek is a replacement for @c my_seek. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_seek(FD, P, W, F) \ inline_mysql_file_seek(__FILE__, __LINE__, FD, P, W, F) #else #define mysql_file_seek(FD, P, W, F) \ inline_mysql_file_seek(FD, P, W, F) #endif /** @def mysql_file_tell(FD, F) Instrumented tell. @c mysql_file_tell is a replacement for @c my_tell. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_tell(FD, F) \ inline_mysql_file_tell(__FILE__, __LINE__, FD, F) #else #define mysql_file_tell(FD, F) \ inline_mysql_file_tell(FD, F) #endif /** @def mysql_file_delete(K, P1, P2) Instrumented delete. @c mysql_file_delete is a replacement for @c my_delete. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_delete(K, P1, P2) \ inline_mysql_file_delete(K, __FILE__, __LINE__, P1, P2) #else #define mysql_file_delete(K, P1, P2) \ inline_mysql_file_delete(P1, P2) #endif /** @def mysql_file_rename(K, P1, P2, P3) Instrumented rename. @c mysql_file_rename is a replacement for @c my_rename. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_rename(K, P1, P2, P3) \ inline_mysql_file_rename(K, __FILE__, __LINE__, P1, P2, P3) #else #define mysql_file_rename(K, P1, P2, P3) \ inline_mysql_file_rename(P1, P2, P3) #endif /** @def mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) Instrumented create with symbolic link. @c mysql_file_create_with_symlink is a replacement for @c my_create_with_symlink. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ inline_mysql_file_create_with_symlink(K, __FILE__, __LINE__, \ P1, P2, P3, P4, P5) #else #define mysql_file_create_with_symlink(K, P1, P2, P3, P4, P5) \ inline_mysql_file_create_with_symlink(P1, P2, P3, P4, P5) #endif /** @def mysql_file_delete_with_symlink(K, P1, P2, P3) Instrumented delete with symbolic link. @c mysql_file_delete_with_symlink is a replacement for @c my_handler_delete_with_symlink. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_delete_with_symlink(K, P1, P2, P3) \ inline_mysql_file_delete_with_symlink(K, __FILE__, __LINE__, P1, P2, P3) #else #define mysql_file_delete_with_symlink(K, P1, P2, P3) \ inline_mysql_file_delete_with_symlink(P1, P2, P3) #endif /** @def mysql_file_rename_with_symlink(K, P1, P2, P3) Instrumented rename with symbolic link. @c mysql_file_rename_with_symlink is a replacement for @c my_rename_with_symlink. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ inline_mysql_file_rename_with_symlink(K, __FILE__, __LINE__, P1, P2, P3) #else #define mysql_file_rename_with_symlink(K, P1, P2, P3) \ inline_mysql_file_rename_with_symlink(P1, P2, P3) #endif /** @def mysql_file_sync(P1, P2) Instrumented file sync. @c mysql_file_sync is a replacement for @c my_sync. */ #ifdef HAVE_PSI_FILE_INTERFACE #define mysql_file_sync(P1, P2) \ inline_mysql_file_sync(__FILE__, __LINE__, P1, P2) #else #define mysql_file_sync(P1, P2) \ inline_mysql_file_sync(P1, P2) #endif /** An instrumented FILE structure. @sa MYSQL_FILE */ struct st_mysql_file { /** The real file. */ FILE *m_file; /** The instrumentation hook. Note that this hook is not conditionally defined, for binary compatibility of the @c MYSQL_FILE interface. */ struct PSI_file *m_psi; }; /** Type of an instrumented file. @c MYSQL_FILE is a drop-in replacement for @c FILE. @sa mysql_file_open */ typedef struct st_mysql_file MYSQL_FILE; static inline void inline_mysql_file_register( #ifdef HAVE_PSI_FILE_INTERFACE const char *category, PSI_file_info *info, int count #else const char *category __attribute__ ((unused)), void *info __attribute__ ((unused)), int count __attribute__ ((unused)) #endif ) { #ifdef HAVE_PSI_FILE_INTERFACE PSI_FILE_CALL(register_file)(category, info, count); #endif } static inline char * inline_mysql_file_fgets( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif char *str, int size, MYSQL_FILE *file) { char *result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker) (&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) size, src_file, src_line); result= fgets(str, size, file->m_file); PSI_FILE_CALL(end_file_wait)(locker, result ? strlen(result) : 0); return result; } } #endif result= fgets(str, size, file->m_file); return result; } static inline int inline_mysql_file_fgetc( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file) { int result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); result= fgetc(file->m_file); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); return result; } } #endif result= fgetc(file->m_file); return result; } static inline int inline_mysql_file_fputs( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif const char *str, MYSQL_FILE *file) { int result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes; locker= PSI_FILE_CALL(get_thread_file_stream_locker) (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { bytes= str ? strlen(str) : 0; PSI_FILE_CALL(start_file_wait)(locker, bytes, src_file, src_line); result= fputs(str, file->m_file); PSI_FILE_CALL(end_file_wait)(locker, bytes); return result; } } #endif result= fputs(str, file->m_file); return result; } static inline int inline_mysql_file_fputc( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif char c, MYSQL_FILE *file) { int result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker) (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 1, src_file, src_line); result= fputc(c, file->m_file); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 1); return result; } } #endif result= fputc(c, file->m_file); return result; } static inline int inline_mysql_file_fprintf(MYSQL_FILE *file, const char *format, ...) { /* TODO: figure out how to pass src_file and src_line from the caller. */ int result; va_list args; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker) (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, __FILE__, __LINE__); va_start(args, format); result= vfprintf(file->m_file, format, args); va_end(args); PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); return result; } } #endif va_start(args, format); result= vfprintf(file->m_file, format, args); va_end(args); return result; } static inline int inline_mysql_file_vfprintf( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, const char *format, va_list args) { int result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker) (&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= vfprintf(file->m_file, format, args); PSI_FILE_CALL(end_file_wait)(locker, (size_t) result); return result; } } #endif result= vfprintf(file->m_file, format, args); return result; } static inline int inline_mysql_file_fflush( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file) { int result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_FLUSH); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= fflush(file->m_file); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } } #endif result= fflush(file->m_file); return result; } static inline int inline_mysql_file_feof(MYSQL_FILE *file) { /* Not instrumented, there is no wait involved */ return feof(file->m_file); } static inline int inline_mysql_file_fstat( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif int filenr, MY_STAT *stat_area, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, filenr, PSI_FILE_FSTAT); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_fstat(filenr, stat_area, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif result= my_fstat(filenr, stat_area, flags); return result; } static inline MY_STAT * inline_mysql_file_stat( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *path, MY_STAT *stat_area, myf flags) { MY_STAT *result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STAT, path, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); result= my_stat(path, stat_area, flags); PSI_FILE_CALL(end_file_open_wait)(locker, result); return result; } #endif result= my_stat(path, stat_area, flags); return result; } static inline int inline_mysql_file_chsize( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, my_off_t newlength, int filler, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CHSIZE); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) newlength, src_file, src_line); result= my_chsize(file, newlength, filler, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) newlength); return result; } #endif result= my_chsize(file, newlength, filler, flags); return result; } static inline MYSQL_FILE* inline_mysql_file_fopen( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *filename, int flags, myf myFlags) { MYSQL_FILE *that; that= (MYSQL_FILE*) my_malloc(PSI_NOT_INSTRUMENTED, sizeof(MYSQL_FILE), MYF(MY_WME)); if (likely(that != NULL)) { #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_STREAM_OPEN, filename, that); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); that->m_file= my_fopen(filename, flags, myFlags); that->m_psi= PSI_FILE_CALL(end_file_open_wait)(locker, that->m_file); if (unlikely(that->m_file == NULL)) { my_free(that); return NULL; } return that; } #endif that->m_psi= NULL; that->m_file= my_fopen(filename, flags, myFlags); if (unlikely(that->m_file == NULL)) { my_free(that); return NULL; } } return that; } static inline int inline_mysql_file_fclose( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, myf flags) { int result= 0; if (likely(file != NULL)) { #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_STREAM_CLOSE); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_fclose(file->m_file, flags); PSI_FILE_CALL(end_file_close_wait)(locker, result); my_free(file); return result; } } #endif result= my_fclose(file->m_file, flags); my_free(file); } return result; } static inline size_t inline_mysql_file_fread( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, uchar *buffer, size_t count, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_READ); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_fread(file->m_file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } } #endif result= my_fread(file->m_file, buffer, count, flags); return result; } static inline size_t inline_mysql_file_fwrite( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, const uchar *buffer, size_t count, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_WRITE); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_fwrite(file->m_file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } } #endif result= my_fwrite(file->m_file, buffer, count, flags); return result; } static inline my_off_t inline_mysql_file_fseek( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, my_off_t pos, int whence, myf flags) { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_SEEK); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_fseek(file->m_file, pos, whence, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } } #endif result= my_fseek(file->m_file, pos, whence, flags); return result; } static inline my_off_t inline_mysql_file_ftell( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif MYSQL_FILE *file, myf flags) { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE if (psi_likely(file->m_psi)) { struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_stream_locker)(&state, file->m_psi, PSI_FILE_TELL); if (likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_ftell(file->m_file, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } } #endif result= my_ftell(file->m_file, flags); return result; } static inline File inline_mysql_file_create( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *filename, mode_t create_flags, int access_flags, myf myFlags) { File file; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_create(filename, create_flags, access_flags, myFlags); PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif file= my_create(filename, create_flags, access_flags, myFlags); return file; } static inline File inline_mysql_file_create_temp( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif char *to, const char *dir, const char *pfx, int mode, myf myFlags) { File file; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker) (&state, key, PSI_FILE_CREATE, NULL, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); /* The file name is generated by create_temp_file(). */ file= create_temp_file(to, dir, pfx, mode, myFlags); PSI_FILE_CALL(end_temp_file_open_wait_and_bind_to_descriptor)(locker, file, (const char*)to); return file; } #endif file= create_temp_file(to, dir, pfx, mode, myFlags); return file; } static inline File inline_mysql_file_open( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *filename, int flags, myf myFlags) { File file; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_OPEN, filename, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_open(filename, flags, myFlags); PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif file= my_open(filename, flags, myFlags); return file; } static inline int inline_mysql_file_close( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_CLOSE); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_close(file, flags); PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif result= my_close(file, flags); return result; } static inline size_t inline_mysql_file_read( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, uchar *buffer, size_t count, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_read(file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } #endif result= my_read(file, buffer, count, flags); return result; } static inline size_t inline_mysql_file_write( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, const uchar *buffer, size_t count, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_write(file, buffer, count, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } #endif result= my_write(file, buffer, count, flags); return result; } static inline size_t inline_mysql_file_pread( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, uchar *buffer, size_t count, my_off_t offset, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_read; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_READ); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_pread(file, buffer, count, offset, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_read= (result == 0) ? count : 0; else bytes_read= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_read); return result; } #endif result= my_pread(file, buffer, count, offset, flags); return result; } static inline size_t inline_mysql_file_pwrite( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, const uchar *buffer, size_t count, my_off_t offset, myf flags) { size_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; size_t bytes_written; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_WRITE); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, count, src_file, src_line); result= my_pwrite(file, buffer, count, offset, flags); if (flags & (MY_NABP | MY_FNABP)) bytes_written= (result == 0) ? count : 0; else bytes_written= (result != MY_FILE_ERROR) ? result : 0; PSI_FILE_CALL(end_file_wait)(locker, bytes_written); return result; } #endif result= my_pwrite(file, buffer, count, offset, flags); return result; } static inline my_off_t inline_mysql_file_seek( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, my_off_t pos, int whence, myf flags) { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_SEEK); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_seek(file, pos, whence, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif result= my_seek(file, pos, whence, flags); return result; } static inline my_off_t inline_mysql_file_tell( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File file, myf flags) { my_off_t result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, file, PSI_FILE_TELL); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_tell(file, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif result= my_tell(file, flags); return result; } static inline int inline_mysql_file_delete( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *name, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, name, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_delete(name, flags); PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif result= my_delete(name, flags); return result; } static inline int inline_mysql_file_rename( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *from, const char *to, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker) (&state, key, PSI_FILE_RENAME, from, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename(from, to, flags); PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result); return result; } #endif result= my_rename(from, to, flags); return result; } static inline File inline_mysql_file_create_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *linkname, const char *filename, mode_t create_flags, int access_flags, myf flags) { File file; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_CREATE, filename, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_open_wait)(locker, src_file, src_line); file= my_create_with_symlink(linkname, filename, create_flags, access_flags, flags); PSI_FILE_CALL(end_file_open_wait_and_bind_to_descriptor)(locker, file); return file; } #endif file= my_create_with_symlink(linkname, filename, create_flags, access_flags, flags); return file; } static inline int inline_mysql_file_delete_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *name, const char *ext, myf flags) { int result; char buf[FN_REFLEN]; char *fullname= fn_format(buf, name, "", ext, MY_UNPACK_FILENAME | MY_APPEND_EXT); #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker)(&state, key, PSI_FILE_DELETE, fullname, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_close_wait)(locker, src_file, src_line); result= my_handler_delete_with_symlink(fullname, flags); PSI_FILE_CALL(end_file_close_wait)(locker, result); return result; } #endif result= my_handler_delete_with_symlink(fullname, flags); return result; } static inline int inline_mysql_file_rename_with_symlink( #ifdef HAVE_PSI_FILE_INTERFACE PSI_file_key key, const char *src_file, uint src_line, #endif const char *from, const char *to, myf flags) { int result; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_name_locker) (&state, key, PSI_FILE_RENAME, from, &locker); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_rename_with_symlink(from, to, flags); PSI_FILE_CALL(end_file_rename_wait)(locker, from, to, result); return result; } #endif result= my_rename_with_symlink(from, to, flags); return result; } static inline int inline_mysql_file_sync( #ifdef HAVE_PSI_FILE_INTERFACE const char *src_file, uint src_line, #endif File fd, myf flags) { int result= 0; #ifdef HAVE_PSI_FILE_INTERFACE struct PSI_file_locker *locker; PSI_file_locker_state state; locker= PSI_FILE_CALL(get_thread_file_descriptor_locker)(&state, fd, PSI_FILE_SYNC); if (psi_likely(locker != NULL)) { PSI_FILE_CALL(start_file_wait)(locker, (size_t) 0, src_file, src_line); result= my_sync(fd, flags); PSI_FILE_CALL(end_file_wait)(locker, (size_t) 0); return result; } #endif result= my_sync(fd, flags); return result; } /** @} (end of group File_instrumentation) */ #endif PKe[>e/ psi/mysql_idle.hnu[/* Copyright (c) 2011, 2023, Oracle and/or its affiliates Copyright (c) 2017, 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_IDLE_H #define MYSQL_IDLE_H /** @file mysql/psi/mysql_idle.h Instrumentation helpers for idle waits. */ #include "mysql/psi/psi.h" #ifndef PSI_IDLE_CALL #define PSI_IDLE_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Idle_instrumentation Idle Instrumentation @ingroup Instrumentation_interface @{ */ /** @def MYSQL_START_IDLE_WAIT Instrumentation helper for table io_waits. This instrumentation marks the start of a wait event. @param LOCKER the locker @param STATE the locker state @sa MYSQL_END_IDLE_WAIT. */ #ifdef HAVE_PSI_IDLE_INTERFACE #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \ LOCKER= inline_mysql_start_idle_wait(STATE, __FILE__, __LINE__) #else #define MYSQL_START_IDLE_WAIT(LOCKER, STATE) \ do {} while (0) #endif /** @def MYSQL_END_IDLE_WAIT Instrumentation helper for idle waits. This instrumentation marks the end of a wait event. @param LOCKER the locker @sa MYSQL_START_IDLE_WAIT. */ #ifdef HAVE_PSI_IDLE_INTERFACE #define MYSQL_END_IDLE_WAIT(LOCKER) \ inline_mysql_end_idle_wait(LOCKER) #else #define MYSQL_END_IDLE_WAIT(LOCKER) \ do {} while (0) #endif #ifdef HAVE_PSI_IDLE_INTERFACE /** Instrumentation calls for MYSQL_START_IDLE_WAIT. @sa MYSQL_END_IDLE_WAIT. */ static inline struct PSI_idle_locker * inline_mysql_start_idle_wait(PSI_idle_locker_state *state, const char *src_file, uint src_line) { struct PSI_idle_locker *locker; locker= PSI_IDLE_CALL(start_idle_wait)(state, src_file, src_line); return locker; } /** Instrumentation calls for MYSQL_END_IDLE_WAIT. @sa MYSQL_START_IDLE_WAIT. */ static inline void inline_mysql_end_idle_wait(struct PSI_idle_locker *locker) { if (psi_likely(locker != NULL)) PSI_IDLE_CALL(end_idle_wait)(locker); } #endif /** @} (end of group Idle_instrumentation) */ #endif PKe[W7psi/psi_abi_v1.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file mysql/psi/psi_abi_v1.h ABI check for mysql/psi/psi.h, when using PSI_VERSION_1. This file is only used to automate detection of changes between versions. Do not include this file, include mysql/psi/psi.h instead. */ #define USE_PSI_1 #define HAVE_PSI_INTERFACE #define MY_GLOBAL_INCLUDED #include "mysql/psi/psi.h" PKe[ZtBpsi/psi_memory.hnu[/* Copyright (c) 2013, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. Without limiting anything contained in the foregoing, this file, which is part of C Driver for MySQL (Connector/C), is also subject to the Universal FOSS Exception, version 1.0, a copy of which can be found at http://oss.oracle.com/licenses/universal-foss-exception. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_PSI_MEMORY_H #define MYSQL_PSI_MEMORY_H #include "psi_base.h" #ifdef __cplusplus extern "C" { #endif /** @file mysql/psi/psi_memory.h Performance schema instrumentation interface. @defgroup Instrumentation_interface Instrumentation Interface @ingroup Performance_schema @{ */ #ifdef HAVE_PSI_INTERFACE #ifndef DISABLE_ALL_PSI #ifndef DISABLE_PSI_MEMORY #define HAVE_PSI_MEMORY_INTERFACE #endif /* DISABLE_PSI_MEMORY */ #endif /* DISABLE_ALL_PSI */ #endif /* HAVE_PSI_INTERFACE */ struct PSI_thread; #ifdef HAVE_PSI_1 /** @defgroup Group_PSI_v1 Application Binary Interface, version 1 @ingroup Instrumentation_interface @{ */ /** Memory instrument information. @since PSI_VERSION_1 This structure is used to register instrumented memory. */ struct PSI_memory_info_v1 { /** Pointer to the key assigned to the registered memory. */ PSI_memory_key *m_key; /** The name of the memory instrument to register. */ const char *m_name; /** The flags of the socket instrument to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_memory_info_v1 PSI_memory_info_v1; /** Memory registration API. @param category a category name (typically a plugin name) @param info an array of memory info to register @param count the size of the info array */ typedef void (*register_memory_v1_t) (const char *category, struct PSI_memory_info_v1 *info, int count); /** Instrument memory allocation. @param key the memory instrument key @param size the size of memory allocated @param[out] owner the memory owner @return the effective memory instrument key */ typedef PSI_memory_key (*memory_alloc_v1_t) (PSI_memory_key key, size_t size, struct PSI_thread ** owner); /** Instrument memory re allocation. @param key the memory instrument key @param old_size the size of memory previously allocated @param new_size the size of memory re allocated @param[in, out] owner the memory owner @return the effective memory instrument key */ typedef PSI_memory_key (*memory_realloc_v1_t) (PSI_memory_key key, size_t old_size, size_t new_size, struct PSI_thread ** owner); /** Instrument memory claim. @param key the memory instrument key @param size the size of memory allocated @param[in, out] owner the memory owner @return the effective memory instrument key */ typedef PSI_memory_key (*memory_claim_v1_t) (PSI_memory_key key, size_t size, struct PSI_thread ** owner); /** Instrument memory free. @param key the memory instrument key @param size the size of memory allocated @param owner the memory owner */ typedef void (*memory_free_v1_t) (PSI_memory_key key, size_t size, struct PSI_thread * owner); /** @} (end of group Group_PSI_v1) */ #ifdef _AIX PSI_memory_key key_memory_log_event; #endif #endif /* HAVE_PSI_1 */ #ifdef HAVE_PSI_2 struct PSI_memory_info_v2 { int placeholder; }; #endif /* HAVE_PSI_2 */ #ifdef USE_PSI_1 typedef struct PSI_memory_info_v1 PSI_memory_info; #endif #ifdef USE_PSI_2 typedef struct PSI_memory_info_v2 PSI_memory_info; #endif /** @} (end of group Instrumentation_interface) */ #ifdef __cplusplus } #endif #endif /* MYSQL_PSI_MEMORY_H */ PKe[#.8WW psi/psi.hnu[/* Copyright (c) 2008, 2023, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H #define MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H #ifndef MY_GLOBAL_INCLUDED /* Make sure a .c or .cc file contains an include to my_global.h first. When this include is missing, all the #ifdef HAVE_XXX have no effect, and the resulting binary won't build, or won't link, or will crash at runtime since various structures will have different binary definitions. */ #error "You must include my_global.h in the code for the build to be correct." #endif /* If PSI_ON_BY_DFAULT is defined, assume PSI will be enabled by default and optimize jumps testing for PSI this case. If not, optimize the binary for that PSI is not enabled */ #ifdef PSI_ON_BY_DEFAULT #define psi_likely(A) likely(A) #define psi_unlikely(A) unlikely(A) #else #define psi_likely(A) unlikely(A) #define psi_unlikely(A) likely(A) #endif #include "psi_base.h" #include "psi_memory.h" #ifdef _WIN32 typedef struct thread_attr pthread_attr_t; typedef DWORD pthread_t; typedef DWORD pthread_key_t; #endif /* MAINTAINER: The following pattern: typedef struct XYZ XYZ; is not needed in C++, but required for C. */ C_MODE_START /** @sa MDL_key. */ struct MDL_key; typedef struct MDL_key MDL_key; /** @sa enum_mdl_type. */ typedef int opaque_mdl_type; /** @sa enum_mdl_duration. */ typedef int opaque_mdl_duration; /** @sa MDL_wait::enum_wait_status. */ typedef int opaque_mdl_status; /** @sa enum_vio_type. */ typedef int opaque_vio_type; struct TABLE_SHARE; struct sql_digest_storage; #ifdef __cplusplus class THD; #else /* Phony declaration when compiling C code. This is ok, because the C code will never have a THD anyway. */ struct opaque_THD { int dummy; }; typedef struct opaque_THD THD; #endif /** @file mysql/psi/psi.h Performance schema instrumentation interface. @defgroup Instrumentation_interface Instrumentation Interface @ingroup Performance_schema @{ */ /** Interface for an instrumented mutex. This is an opaque structure. */ struct PSI_mutex; typedef struct PSI_mutex PSI_mutex; /** Interface for an instrumented rwlock. This is an opaque structure. */ struct PSI_rwlock; typedef struct PSI_rwlock PSI_rwlock; /** Interface for an instrumented condition. This is an opaque structure. */ struct PSI_cond; typedef struct PSI_cond PSI_cond; /** Interface for an instrumented table share. This is an opaque structure. */ struct PSI_table_share; typedef struct PSI_table_share PSI_table_share; /** Interface for an instrumented table handle. This is an opaque structure. */ struct PSI_table; typedef struct PSI_table PSI_table; /** Interface for an instrumented thread. This is an opaque structure. */ struct PSI_thread; typedef struct PSI_thread PSI_thread; /** Interface for an instrumented file handle. This is an opaque structure. */ struct PSI_file; typedef struct PSI_file PSI_file; /** Interface for an instrumented socket descriptor. This is an opaque structure. */ struct PSI_socket; typedef struct PSI_socket PSI_socket; /** Interface for an instrumented prepared statement. This is an opaque structure. */ struct PSI_prepared_stmt; typedef struct PSI_prepared_stmt PSI_prepared_stmt; /** Interface for an instrumented table operation. This is an opaque structure. */ struct PSI_table_locker; typedef struct PSI_table_locker PSI_table_locker; /** Interface for an instrumented statement. This is an opaque structure. */ struct PSI_statement_locker; typedef struct PSI_statement_locker PSI_statement_locker; /** Interface for an instrumented transaction. This is an opaque structure. */ struct PSI_transaction_locker; typedef struct PSI_transaction_locker PSI_transaction_locker; /** Interface for an instrumented idle operation. This is an opaque structure. */ struct PSI_idle_locker; typedef struct PSI_idle_locker PSI_idle_locker; /** Interface for an instrumented statement digest operation. This is an opaque structure. */ struct PSI_digest_locker; typedef struct PSI_digest_locker PSI_digest_locker; /** Interface for an instrumented stored procedure share. This is an opaque structure. */ struct PSI_sp_share; typedef struct PSI_sp_share PSI_sp_share; /** Interface for an instrumented stored program. This is an opaque structure. */ struct PSI_sp_locker; typedef struct PSI_sp_locker PSI_sp_locker; /** Interface for an instrumented metadata lock. This is an opaque structure. */ struct PSI_metadata_lock; typedef struct PSI_metadata_lock PSI_metadata_lock; /** Interface for an instrumented stage progress. This is a public structure, for efficiency. */ struct PSI_stage_progress { ulonglong m_work_completed; ulonglong m_work_estimated; }; typedef struct PSI_stage_progress PSI_stage_progress; /** IO operation performed on an instrumented table. */ enum PSI_table_io_operation { /** Row fetch. */ PSI_TABLE_FETCH_ROW= 0, /** Row write. */ PSI_TABLE_WRITE_ROW= 1, /** Row update. */ PSI_TABLE_UPDATE_ROW= 2, /** Row delete. */ PSI_TABLE_DELETE_ROW= 3 }; typedef enum PSI_table_io_operation PSI_table_io_operation; /** State data storage for @c start_table_io_wait_v1_t, @c start_table_lock_wait_v1_t. This structure provide temporary storage to a table locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_table_io_wait_v1_t @sa start_table_lock_wait_v1_t */ struct PSI_table_locker_state { /** Internal state. */ uint m_flags; /** Current io operation. */ enum PSI_table_io_operation m_io_operation; /** Current table handle. */ struct PSI_table *m_table; /** Current table share. */ struct PSI_table_share *m_table_share; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; /** Implementation specific. For table io, the table io index. For table lock, the lock type. */ uint m_index; }; typedef struct PSI_table_locker_state PSI_table_locker_state; /** Entry point for the performance schema interface. */ struct PSI_bootstrap { /** ABI interface finder. Calling this method with an interface version number returns either an instance of the ABI for this version, or NULL. @param version the interface version number to find @return a versioned interface (PSI_v1, PSI_v2 or PSI) @sa PSI_VERSION_1 @sa PSI_v1 @sa PSI_VERSION_2 @sa PSI_v2 @sa PSI_CURRENT_VERSION @sa PSI */ void* (*get_interface)(int version); }; typedef struct PSI_bootstrap PSI_bootstrap; #ifdef HAVE_PSI_INTERFACE #ifdef DISABLE_ALL_PSI #ifndef DISABLE_PSI_THREAD #define DISABLE_PSI_THREAD #endif #ifndef DISABLE_PSI_MUTEX #define DISABLE_PSI_MUTEX #endif #ifndef DISABLE_PSI_RWLOCK #define DISABLE_PSI_RWLOCK #endif #ifndef DISABLE_PSI_COND #define DISABLE_PSI_COND #endif #ifndef DISABLE_PSI_FILE #define DISABLE_PSI_FILE #endif #ifndef DISABLE_PSI_TABLE #define DISABLE_PSI_TABLE #endif #ifndef DISABLE_PSI_SOCKET #define DISABLE_PSI_SOCKET #endif #ifndef DISABLE_PSI_STAGE #define DISABLE_PSI_STAGE #endif #ifndef DISABLE_PSI_STATEMENT #define DISABLE_PSI_STATEMENT #endif #ifndef DISABLE_PSI_SP #define DISABLE_PSI_SP #endif #ifndef DISABLE_PSI_IDLE #define DISABLE_PSI_IDLE #endif #ifndef DISABLE_PSI_STATEMENT_DIGEST #define DISABLE_PSI_STATEMENT_DIGEST #endif #ifndef DISABLE_PSI_METADATA #define DISABLE_PSI_METADATA #endif #ifndef DISABLE_PSI_MEMORY #define DISABLE_PSI_MEMORY #endif #ifndef DISABLE_PSI_TRANSACTION #define DISABLE_PSI_TRANSACTION #endif #ifndef DISABLE_PSI_SP #define DISABLE_PSI_SP #endif #ifndef DISABLE_PSI_PS #define DISABLE_PSI_PS #endif #endif /** @def DISABLE_PSI_MUTEX Compiling option to disable the mutex instrumentation. This option is mostly intended to be used during development, when doing special builds with only a subset of the performance schema instrumentation, for code analysis / profiling / performance tuning of a specific instrumentation alone. @sa DISABLE_PSI_RWLOCK @sa DISABLE_PSI_COND @sa DISABLE_PSI_FILE @sa DISABLE_PSI_THREAD @sa DISABLE_PSI_TABLE @sa DISABLE_PSI_STAGE @sa DISABLE_PSI_STATEMENT @sa DISABLE_PSI_SP @sa DISABLE_PSI_STATEMENT_DIGEST @sa DISABLE_PSI_SOCKET @sa DISABLE_PSI_MEMORY @sa DISABLE_PSI_IDLE @sa DISABLE_PSI_METADATA @sa DISABLE PSI_TRANSACTION */ #ifndef DISABLE_PSI_MUTEX #define HAVE_PSI_MUTEX_INTERFACE #endif /** @def DISABLE_PSI_RWLOCK Compiling option to disable the rwlock instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_RWLOCK #define HAVE_PSI_RWLOCK_INTERFACE #endif /** @def DISABLE_PSI_COND Compiling option to disable the cond instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_COND #define HAVE_PSI_COND_INTERFACE #endif /** @def DISABLE_PSI_FILE Compiling option to disable the file instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_FILE #define HAVE_PSI_FILE_INTERFACE #endif /** @def DISABLE_PSI_THREAD Compiling option to disable the thread instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_THREAD #define HAVE_PSI_THREAD_INTERFACE #endif /** @def DISABLE_PSI_TABLE Compiling option to disable the table instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_TABLE #define HAVE_PSI_TABLE_INTERFACE #endif /** @def DISABLE_PSI_STAGE Compiling option to disable the stage instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_STAGE #define HAVE_PSI_STAGE_INTERFACE #endif /** @def DISABLE_PSI_STATEMENT Compiling option to disable the statement instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_STATEMENT #define HAVE_PSI_STATEMENT_INTERFACE #endif /** @def DISABLE_PSI_SP Compiling option to disable the stored program instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_SP #define HAVE_PSI_SP_INTERFACE #endif /** @def DISABLE_PSI_PS Compiling option to disable the prepared statement instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_STATEMENT #ifndef DISABLE_PSI_PS #define HAVE_PSI_PS_INTERFACE #endif #endif /** @def DISABLE_PSI_STATEMENT_DIGEST Compiling option to disable the statement digest instrumentation. */ #ifndef DISABLE_PSI_STATEMENT #ifndef DISABLE_PSI_STATEMENT_DIGEST #define HAVE_PSI_STATEMENT_DIGEST_INTERFACE #endif #endif /** @def DISABLE_PSI_TRANSACTION Compiling option to disable the transaction instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_TRANSACTION #define HAVE_PSI_TRANSACTION_INTERFACE #endif /** @def DISABLE_PSI_SOCKET Compiling option to disable the statement instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_SOCKET #define HAVE_PSI_SOCKET_INTERFACE #endif /** @def DISABLE_PSI_MEMORY Compiling option to disable the memory instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_MEMORY #define HAVE_PSI_MEMORY_INTERFACE #endif /** @def DISABLE_PSI_IDLE Compiling option to disable the idle instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_IDLE #define HAVE_PSI_IDLE_INTERFACE #endif /** @def DISABLE_PSI_METADATA Compiling option to disable the metadata instrumentation. @sa DISABLE_PSI_MUTEX */ #ifndef DISABLE_PSI_METADATA #define HAVE_PSI_METADATA_INTERFACE #endif /** @def PSI_VERSION_1 Performance Schema Interface number for version 1. This version is supported. */ #define PSI_VERSION_1 1 /** @def PSI_VERSION_2 Performance Schema Interface number for version 2. This version is not implemented, it's a placeholder. */ #define PSI_VERSION_2 2 /** @def PSI_CURRENT_VERSION Performance Schema Interface number for the most recent version. The most current version is @c PSI_VERSION_1 */ #define PSI_CURRENT_VERSION 1 #ifndef USE_PSI_2 #ifndef USE_PSI_1 #define USE_PSI_1 #endif #endif /** Interface for an instrumented mutex operation. This is an opaque structure. */ struct PSI_mutex_locker; typedef struct PSI_mutex_locker PSI_mutex_locker; /** Interface for an instrumented rwlock operation. This is an opaque structure. */ struct PSI_rwlock_locker; typedef struct PSI_rwlock_locker PSI_rwlock_locker; /** Interface for an instrumented condition operation. This is an opaque structure. */ struct PSI_cond_locker; typedef struct PSI_cond_locker PSI_cond_locker; /** Interface for an instrumented file operation. This is an opaque structure. */ struct PSI_file_locker; typedef struct PSI_file_locker PSI_file_locker; /** Interface for an instrumented socket operation. This is an opaque structure. */ struct PSI_socket_locker; typedef struct PSI_socket_locker PSI_socket_locker; /** Interface for an instrumented MDL operation. This is an opaque structure. */ struct PSI_metadata_locker; typedef struct PSI_metadata_locker PSI_metadata_locker; /** Operation performed on an instrumented mutex. */ enum PSI_mutex_operation { /** Lock. */ PSI_MUTEX_LOCK= 0, /** Lock attempt. */ PSI_MUTEX_TRYLOCK= 1 }; typedef enum PSI_mutex_operation PSI_mutex_operation; /** Operation performed on an instrumented rwlock. For basic READ / WRITE lock, operations are "READ" or "WRITE". For SX-locks, operations are "SHARED", "SHARED-EXCLUSIVE" or "EXCLUSIVE". */ enum PSI_rwlock_operation { /** Read lock. */ PSI_RWLOCK_READLOCK= 0, /** Write lock. */ PSI_RWLOCK_WRITELOCK= 1, /** Read lock attempt. */ PSI_RWLOCK_TRYREADLOCK= 2, /** Write lock attempt. */ PSI_RWLOCK_TRYWRITELOCK= 3, /** Shared lock. */ PSI_RWLOCK_SHAREDLOCK= 4, /** Shared Exclusive lock. */ PSI_RWLOCK_SHAREDEXCLUSIVELOCK= 5, /** Exclusive lock. */ PSI_RWLOCK_EXCLUSIVELOCK= 6, /** Shared lock attempt. */ PSI_RWLOCK_TRYSHAREDLOCK= 7, /** Shared Exclusive lock attempt. */ PSI_RWLOCK_TRYSHAREDEXCLUSIVELOCK= 8, /** Exclusive lock attempt. */ PSI_RWLOCK_TRYEXCLUSIVELOCK= 9 }; typedef enum PSI_rwlock_operation PSI_rwlock_operation; /** Operation performed on an instrumented condition. */ enum PSI_cond_operation { /** Wait. */ PSI_COND_WAIT= 0, /** Wait, with timeout. */ PSI_COND_TIMEDWAIT= 1 }; typedef enum PSI_cond_operation PSI_cond_operation; /** Operation performed on an instrumented file. */ enum PSI_file_operation { /** File creation, as in @c create(). */ PSI_FILE_CREATE= 0, /** Temporary file creation, as in @c create_temp_file(). */ PSI_FILE_CREATE_TMP= 1, /** File open, as in @c open(). */ PSI_FILE_OPEN= 2, /** File open, as in @c fopen(). */ PSI_FILE_STREAM_OPEN= 3, /** File close, as in @c close(). */ PSI_FILE_CLOSE= 4, /** File close, as in @c fclose(). */ PSI_FILE_STREAM_CLOSE= 5, /** Generic file read, such as @c fgets(), @c fgetc(), @c fread(), @c read(), @c pread(). */ PSI_FILE_READ= 6, /** Generic file write, such as @c fputs(), @c fputc(), @c fprintf(), @c vfprintf(), @c fwrite(), @c write(), @c pwrite(). */ PSI_FILE_WRITE= 7, /** Generic file seek, such as @c fseek() or @c seek(). */ PSI_FILE_SEEK= 8, /** Generic file tell, such as @c ftell() or @c tell(). */ PSI_FILE_TELL= 9, /** File flush, as in @c fflush(). */ PSI_FILE_FLUSH= 10, /** File stat, as in @c stat(). */ PSI_FILE_STAT= 11, /** File stat, as in @c fstat(). */ PSI_FILE_FSTAT= 12, /** File chsize, as in @c my_chsize(). */ PSI_FILE_CHSIZE= 13, /** File delete, such as @c my_delete() or @c my_handler_delete_with_symlink(). */ PSI_FILE_DELETE= 14, /** File rename, such as @c my_rename() or @c my_rename_with_symlink(). */ PSI_FILE_RENAME= 15, /** File sync, as in @c fsync() or @c my_sync(). */ PSI_FILE_SYNC= 16 }; typedef enum PSI_file_operation PSI_file_operation; /** Lock operation performed on an instrumented table. */ enum PSI_table_lock_operation { /** Table lock, in the server layer. */ PSI_TABLE_LOCK= 0, /** Table lock, in the storage engine layer. */ PSI_TABLE_EXTERNAL_LOCK= 1 }; typedef enum PSI_table_lock_operation PSI_table_lock_operation; /** State of an instrumented socket. */ enum PSI_socket_state { /** Idle, waiting for the next command. */ PSI_SOCKET_STATE_IDLE= 1, /** Active, executing a command. */ PSI_SOCKET_STATE_ACTIVE= 2 }; typedef enum PSI_socket_state PSI_socket_state; /** Operation performed on an instrumented socket. */ enum PSI_socket_operation { /** Socket creation, as in @c socket() or @c socketpair(). */ PSI_SOCKET_CREATE= 0, /** Socket connection, as in @c connect(), @c listen() and @c accept(). */ PSI_SOCKET_CONNECT= 1, /** Socket bind, as in @c bind(), @c getsockname() and @c getpeername(). */ PSI_SOCKET_BIND= 2, /** Socket close, as in @c shutdown(). */ PSI_SOCKET_CLOSE= 3, /** Socket send, @c send(). */ PSI_SOCKET_SEND= 4, /** Socket receive, @c recv(). */ PSI_SOCKET_RECV= 5, /** Socket send, @c sendto(). */ PSI_SOCKET_SENDTO= 6, /** Socket receive, @c recvfrom). */ PSI_SOCKET_RECVFROM= 7, /** Socket send, @c sendmsg(). */ PSI_SOCKET_SENDMSG= 8, /** Socket receive, @c recvmsg(). */ PSI_SOCKET_RECVMSG= 9, /** Socket seek, such as @c fseek() or @c seek(). */ PSI_SOCKET_SEEK= 10, /** Socket options, as in @c getsockopt() and @c setsockopt(). */ PSI_SOCKET_OPT= 11, /** Socket status, as in @c sockatmark() and @c isfdtype(). */ PSI_SOCKET_STAT= 12, /** Socket shutdown, as in @c shutdown(). */ PSI_SOCKET_SHUTDOWN= 13, /** Socket select, as in @c select() and @c poll(). */ PSI_SOCKET_SELECT= 14 }; typedef enum PSI_socket_operation PSI_socket_operation; #endif /** Instrumented mutex key. To instrument a mutex, a mutex key must be obtained using @c register_mutex. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_mutex_key; /** Instrumented rwlock key. To instrument a rwlock, a rwlock key must be obtained using @c register_rwlock. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_rwlock_key; /** Instrumented cond key. To instrument a condition, a condition key must be obtained using @c register_cond. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_cond_key; /** Instrumented thread key. To instrument a thread, a thread key must be obtained using @c register_thread. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_thread_key; /** Instrumented file key. To instrument a file, a file key must be obtained using @c register_file. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_file_key; /** Instrumented stage key. To instrument a stage, a stage key must be obtained using @c register_stage. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_stage_key; /** Instrumented statement key. To instrument a statement, a statement key must be obtained using @c register_statement. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_statement_key; /** Instrumented socket key. To instrument a socket, a socket key must be obtained using @c register_socket. Using a zero key always disable the instrumentation. */ typedef unsigned int PSI_socket_key; #ifdef HAVE_PSI_1 /** @defgroup Group_PSI_v1 Application Binary Interface, version 1 @ingroup Instrumentation_interface @{ */ /** Mutex information. @since PSI_VERSION_1 This structure is used to register an instrumented mutex. */ struct PSI_mutex_info_v1 { /** Pointer to the key assigned to the registered mutex. */ PSI_mutex_key *m_key; /** The name of the mutex to register. */ const char *m_name; /** The flags of the mutex to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_mutex_info_v1 PSI_mutex_info_v1; /** Rwlock information. @since PSI_VERSION_1 This structure is used to register an instrumented rwlock. */ struct PSI_rwlock_info_v1 { /** Pointer to the key assigned to the registered rwlock. */ PSI_rwlock_key *m_key; /** The name of the rwlock to register. */ const char *m_name; /** The flags of the rwlock to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_rwlock_info_v1 PSI_rwlock_info_v1; /** Condition information. @since PSI_VERSION_1 This structure is used to register an instrumented cond. */ struct PSI_cond_info_v1 { /** Pointer to the key assigned to the registered cond. */ PSI_cond_key *m_key; /** The name of the cond to register. */ const char *m_name; /** The flags of the cond to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_cond_info_v1 PSI_cond_info_v1; /** Thread instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented thread. */ struct PSI_thread_info_v1 { /** Pointer to the key assigned to the registered thread. */ PSI_thread_key *m_key; /** The name of the thread instrument to register. */ const char *m_name; /** The flags of the thread to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_thread_info_v1 PSI_thread_info_v1; /** File instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented file. */ struct PSI_file_info_v1 { /** Pointer to the key assigned to the registered file. */ PSI_file_key *m_key; /** The name of the file instrument to register. */ const char *m_name; /** The flags of the file instrument to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_file_info_v1 PSI_file_info_v1; /** Stage instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented stage. */ struct PSI_stage_info_v1 { /** The registered stage key. */ PSI_stage_key m_key; /** The name of the stage instrument to register. */ const char *m_name; /** The flags of the stage instrument to register. */ int m_flags; }; typedef struct PSI_stage_info_v1 PSI_stage_info_v1; /** Statement instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented statement. */ struct PSI_statement_info_v1 { /** The registered statement key. */ PSI_statement_key m_key; /** The name of the statement instrument to register. */ const char *m_name; /** The flags of the statement instrument to register. */ int m_flags; }; typedef struct PSI_statement_info_v1 PSI_statement_info_v1; /** Socket instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented socket. */ struct PSI_socket_info_v1 { /** Pointer to the key assigned to the registered socket. */ PSI_socket_key *m_key; /** The name of the socket instrument to register. */ const char *m_name; /** The flags of the socket instrument to register. @sa PSI_FLAG_GLOBAL */ int m_flags; }; typedef struct PSI_socket_info_v1 PSI_socket_info_v1; /** State data storage for @c start_idle_wait_v1_t. This structure provide temporary storage to an idle locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_idle_wait_v1_t. */ struct PSI_idle_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state_v1; /** State data storage for @c start_mutex_wait_v1_t. This structure provide temporary storage to a mutex locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_mutex_wait_v1_t */ struct PSI_mutex_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current operation. */ enum PSI_mutex_operation m_operation; /** Current mutex. */ struct PSI_mutex *m_mutex; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state_v1; /** State data storage for @c start_rwlock_rdwait_v1_t, @c start_rwlock_wrwait_v1_t. This structure provide temporary storage to a rwlock locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_rwlock_rdwait_v1_t @sa start_rwlock_wrwait_v1_t */ struct PSI_rwlock_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current operation. */ enum PSI_rwlock_operation m_operation; /** Current rwlock. */ struct PSI_rwlock *m_rwlock; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state_v1; /** State data storage for @c start_cond_wait_v1_t. This structure provide temporary storage to a condition locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_cond_wait_v1_t */ struct PSI_cond_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current operation. */ enum PSI_cond_operation m_operation; /** Current condition. */ struct PSI_cond *m_cond; /** Current mutex. */ struct PSI_mutex *m_mutex; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state_v1; /** State data storage for @c get_thread_file_name_locker_v1_t. This structure provide temporary storage to a file locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa get_thread_file_name_locker_v1_t @sa get_thread_file_stream_locker_v1_t @sa get_thread_file_descriptor_locker_v1_t */ struct PSI_file_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current operation. */ enum PSI_file_operation m_operation; /** Current file. */ struct PSI_file *m_file; /** Current file name. */ const char *m_name; /** Current file class. */ void *m_class; /** Current thread. */ struct PSI_thread *m_thread; /** Operation number of bytes. */ size_t m_number_of_bytes; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_file_locker_state_v1 PSI_file_locker_state_v1; /** State data storage for @c start_metadata_wait_v1_t. This structure provide temporary storage to a metadata locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_metadata_wait_v1_t */ struct PSI_metadata_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current metadata lock. */ struct PSI_metadata_lock *m_metadata_lock; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_wait; }; typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state_v1; /* Duplicate of NAME_LEN, to avoid dependency on mysql_com.h */ #define PSI_SCHEMA_NAME_LEN (64 * 3) /** State data storage for @c get_thread_statement_locker_v1_t, @c get_thread_statement_locker_v1_t. This structure provide temporary storage to a statement locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa get_thread_statement_locker_v1_t */ struct PSI_statement_locker_state_v1 { /** Discarded flag. */ my_bool m_discarded; /** In prepare flag. */ my_bool m_in_prepare; /** Metric, no index used flag. */ uchar m_no_index_used; /** Metric, no good index used flag. */ uchar m_no_good_index_used; /** Internal state. */ uint m_flags; /** Instrumentation class. */ void *m_class; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_statement; /** Locked time. */ ulonglong m_lock_time; /** Rows sent. */ ulonglong m_rows_sent; /** Rows examined. */ ulonglong m_rows_examined; /** Metric, temporary tables created on disk. */ ulong m_created_tmp_disk_tables; /** Metric, temporary tables created. */ ulong m_created_tmp_tables; /** Metric, number of select full join. */ ulong m_select_full_join; /** Metric, number of select full range join. */ ulong m_select_full_range_join; /** Metric, number of select range. */ ulong m_select_range; /** Metric, number of select range check. */ ulong m_select_range_check; /** Metric, number of select scan. */ ulong m_select_scan; /** Metric, number of sort merge passes. */ ulong m_sort_merge_passes; /** Metric, number of sort merge. */ ulong m_sort_range; /** Metric, number of sort rows. */ ulong m_sort_rows; /** Metric, number of sort scans. */ ulong m_sort_scan; /** Statement digest. */ const struct sql_digest_storage *m_digest; /** Current schema name. */ char m_schema_name[PSI_SCHEMA_NAME_LEN]; /** Length in bytes of @c m_schema_name. */ uint m_schema_name_length; /** Statement character set number. */ uint m_cs_number; PSI_sp_share *m_parent_sp_share; PSI_prepared_stmt *m_parent_prepared_stmt; }; typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state_v1; /** State data storage for @c get_thread_transaction_locker_v1_t, @c get_thread_transaction_locker_v1_t. This structure provide temporary storage to a transaction locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa get_thread_transaction_locker_v1_t */ struct PSI_transaction_locker_state_v1 { /** Internal state. */ uint m_flags; /** Instrumentation class. */ void *m_class; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Internal data. */ void *m_transaction; /** True if read-only transaction, false if read-write. */ my_bool m_read_only; /** True if transaction is autocommit. */ my_bool m_autocommit; /** Number of statements. */ ulong m_statement_count; /** Total number of savepoints. */ ulong m_savepoint_count; /** Number of rollback_to_savepoint. */ ulong m_rollback_to_savepoint_count; /** Number of release_savepoint. */ ulong m_release_savepoint_count; }; typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state_v1; /** State data storage for @c start_socket_wait_v1_t. This structure provide temporary storage to a socket locker. The content of this structure is considered opaque, the fields are only hints of what an implementation of the psi interface can use. This memory is provided by the instrumented code for performance reasons. @sa start_socket_wait_v1_t */ struct PSI_socket_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current socket. */ struct PSI_socket *m_socket; /** Current thread. */ struct PSI_thread *m_thread; /** Operation number of bytes. */ size_t m_number_of_bytes; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Current operation. */ enum PSI_socket_operation m_operation; /** Source file. */ const char* m_src_file; /** Source line number. */ int m_src_line; /** Internal data. */ void *m_wait; }; typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state_v1; struct PSI_sp_locker_state_v1 { /** Internal state. */ uint m_flags; /** Current thread. */ struct PSI_thread *m_thread; /** Timer start. */ ulonglong m_timer_start; /** Timer function. */ ulonglong (*m_timer)(void); /** Stored Procedure share. */ PSI_sp_share* m_sp_share; }; typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state_v1; /* Using typedef to make reuse between PSI_v1 and PSI_v2 easier later. */ /** Mutex registration API. @param category a category name (typically a plugin name) @param info an array of mutex info to register @param count the size of the info array */ typedef void (*register_mutex_v1_t) (const char *category, struct PSI_mutex_info_v1 *info, int count); /** Rwlock registration API. @param category a category name (typically a plugin name) @param info an array of rwlock info to register @param count the size of the info array */ typedef void (*register_rwlock_v1_t) (const char *category, struct PSI_rwlock_info_v1 *info, int count); /** Cond registration API. @param category a category name (typically a plugin name) @param info an array of cond info to register @param count the size of the info array */ typedef void (*register_cond_v1_t) (const char *category, struct PSI_cond_info_v1 *info, int count); /** Thread registration API. @param category a category name (typically a plugin name) @param info an array of thread info to register @param count the size of the info array */ typedef void (*register_thread_v1_t) (const char *category, struct PSI_thread_info_v1 *info, int count); /** File registration API. @param category a category name (typically a plugin name) @param info an array of file info to register @param count the size of the info array */ typedef void (*register_file_v1_t) (const char *category, struct PSI_file_info_v1 *info, int count); /** Stage registration API. @param category a category name @param info an array of stage info to register @param count the size of the info array */ typedef void (*register_stage_v1_t) (const char *category, struct PSI_stage_info_v1 **info, int count); /** Statement registration API. @param category a category name @param info an array of stage info to register @param count the size of the info array */ typedef void (*register_statement_v1_t) (const char *category, struct PSI_statement_info_v1 *info, int count); /** Socket registration API. @param category a category name (typically a plugin name) @param info an array of socket info to register @param count the size of the info array */ typedef void (*register_socket_v1_t) (const char *category, struct PSI_socket_info_v1 *info, int count); /** Mutex instrumentation initialisation API. @param key the registered mutex key @param identity the address of the mutex itself @return an instrumented mutex */ typedef struct PSI_mutex* (*init_mutex_v1_t) (PSI_mutex_key key, void *identity); /** Mutex instrumentation destruction API. @param mutex the mutex to destroy */ typedef void (*destroy_mutex_v1_t)(struct PSI_mutex *mutex); /** Rwlock instrumentation initialisation API. @param key the registered rwlock key @param identity the address of the rwlock itself @return an instrumented rwlock */ typedef struct PSI_rwlock* (*init_rwlock_v1_t) (PSI_rwlock_key key, void *identity); /** Rwlock instrumentation destruction API. @param rwlock the rwlock to destroy */ typedef void (*destroy_rwlock_v1_t)(struct PSI_rwlock *rwlock); /** Cond instrumentation initialisation API. @param key the registered key @param identity the address of the rwlock itself @return an instrumented cond */ typedef struct PSI_cond* (*init_cond_v1_t) (PSI_cond_key key, void *identity); /** Cond instrumentation destruction API. @param cond the rcond to destroy */ typedef void (*destroy_cond_v1_t)(struct PSI_cond *cond); /** Socket instrumentation initialisation API. @param key the registered mutex key @param socket descriptor @param addr the socket ip address @param addr_len length of socket ip address @return an instrumented socket */ typedef struct PSI_socket* (*init_socket_v1_t) (PSI_socket_key key, const my_socket *fd, const struct sockaddr *addr, socklen_t addr_len); /** socket instrumentation destruction API. @param socket the socket to destroy */ typedef void (*destroy_socket_v1_t)(struct PSI_socket *socket); /** Acquire a table share instrumentation. @param temporary True for temporary tables @param share The SQL layer table share @return a table share instrumentation, or NULL */ typedef struct PSI_table_share* (*get_table_share_v1_t) (my_bool temporary, struct TABLE_SHARE *share); /** Release a table share. @param info the table share to release */ typedef void (*release_table_share_v1_t)(struct PSI_table_share *share); /** Drop a table share. @param temporary True for temporary tables @param schema_name the table schema name @param schema_name_length the table schema name length @param table_name the table name @param table_name_length the table name length */ typedef void (*drop_table_share_v1_t) (my_bool temporary, const char *schema_name, int schema_name_length, const char *table_name, int table_name_length); /** Open an instrumentation table handle. @param share the table to open @param identity table handle identity @return a table handle, or NULL */ typedef struct PSI_table* (*open_table_v1_t) (struct PSI_table_share *share, const void *identity); /** Unbind a table handle from the current thread. This operation happens when an opened table is added to the open table cache. @param table the table to unbind */ typedef void (*unbind_table_v1_t) (struct PSI_table *table); /** Rebind a table handle to the current thread. This operation happens when a table from the open table cache is reused for a thread. @param table the table to unbind */ typedef PSI_table* (*rebind_table_v1_t) (PSI_table_share *share, const void *identity, PSI_table *table); /** Close an instrumentation table handle. Note that the table handle is invalid after this call. @param table the table handle to close */ typedef void (*close_table_v1_t)(struct TABLE_SHARE *server_share, struct PSI_table *table); /** Create a file instrumentation for a created file. This method does not create the file itself, but is used to notify the instrumentation interface that a file was just created. @param key the file instrumentation key for this file @param name the file name @param file the file handle */ typedef void (*create_file_v1_t)(PSI_file_key key, const char *name, File file); /** Spawn a thread. This method creates a new thread, with instrumentation. @param key the instrumentation key for this thread @param thread the resulting thread @param attr the thread attributes @param start_routine the thread start routine @param arg the thread start routine argument */ typedef int (*spawn_thread_v1_t)(PSI_thread_key key, pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg); /** Create instrumentation for a thread. @param key the registered key @param identity an address typical of the thread @return an instrumented thread */ typedef struct PSI_thread* (*new_thread_v1_t) (PSI_thread_key key, const void *identity, ulonglong thread_id); /** Assign a THD to an instrumented thread. @param thread the instrumented thread @param THD the sql layer THD to assign */ typedef void (*set_thread_THD_v1_t)(struct PSI_thread *thread, THD *thd); /** Assign an id to an instrumented thread. @param thread the instrumented thread @param id the id to assign */ typedef void (*set_thread_id_v1_t)(struct PSI_thread *thread, ulonglong id); /** Assign the current operating system thread id to an instrumented thread. The operating system task id is obtained from @c gettid() @param thread the instrumented thread */ typedef void (*set_thread_os_id_v1_t)(struct PSI_thread *thread); /** Get the instrumentation for the running thread. For this function to return a result, the thread instrumentation must have been attached to the running thread using @c set_thread() @return the instrumentation for the running thread */ typedef struct PSI_thread* (*get_thread_v1_t)(void); /** Assign a user name to the instrumented thread. @param user the user name @param user_len the user name length */ typedef void (*set_thread_user_v1_t)(const char *user, int user_len); /** Assign a user name and host name to the instrumented thread. @param user the user name @param user_len the user name length @param host the host name @param host_len the host name length */ typedef void (*set_thread_account_v1_t)(const char *user, int user_len, const char *host, int host_len); /** Assign a current database to the instrumented thread. @param db the database name @param db_len the database name length */ typedef void (*set_thread_db_v1_t)(const char* db, int db_len); /** Assign a current command to the instrumented thread. @param command the current command */ typedef void (*set_thread_command_v1_t)(int command); /** Assign a connection type to the instrumented thread. @param conn_type the connection type */ typedef void (*set_connection_type_v1_t)(opaque_vio_type conn_type); /** Assign a start time to the instrumented thread. @param start_time the thread start time */ typedef void (*set_thread_start_time_v1_t)(time_t start_time); /** Assign a state to the instrumented thread. @param state the thread state */ typedef void (*set_thread_state_v1_t)(const char* state); /** Assign a process info to the instrumented thread. @param info the process into string @param info_len the process into string length */ typedef void (*set_thread_info_v1_t)(const char* info, uint info_len); /** Attach a thread instrumentation to the running thread. In case of thread pools, this method should be called when a worker thread picks a work item and runs it. Also, this method should be called if the instrumented code does not keep the pointer returned by @c new_thread() and relies on @c get_thread() instead. @param thread the thread instrumentation */ typedef void (*set_thread_v1_t)(struct PSI_thread *thread); /** Assign the remote (peer) port to the instrumented thread. @param thread pointer to the thread instrumentation @param port the remote port */ typedef void (*set_thread_peer_port_v1_t)(PSI_thread *thread, unsigned int port); /** Delete the current thread instrumentation. */ typedef void (*delete_current_thread_v1_t)(void); /** Delete a thread instrumentation. */ typedef void (*delete_thread_v1_t)(struct PSI_thread *thread); /** Get a file instrumentation locker, for opening or creating a file. @param state data storage for the locker @param key the file instrumentation key @param op the operation to perform @param name the file name @param identity a pointer representative of this file. @return a file locker, or NULL */ typedef struct PSI_file_locker* (*get_thread_file_name_locker_v1_t) (struct PSI_file_locker_state_v1 *state, PSI_file_key key, enum PSI_file_operation op, const char *name, const void *identity); /** Get a file stream instrumentation locker. @param state data storage for the locker @param file the file stream to access @param op the operation to perform @return a file locker, or NULL */ typedef struct PSI_file_locker* (*get_thread_file_stream_locker_v1_t) (struct PSI_file_locker_state_v1 *state, struct PSI_file *file, enum PSI_file_operation op); /** Get a file instrumentation locker. @param state data storage for the locker @param file the file descriptor to access @param op the operation to perform @return a file locker, or NULL */ typedef struct PSI_file_locker* (*get_thread_file_descriptor_locker_v1_t) (struct PSI_file_locker_state_v1 *state, File file, enum PSI_file_operation op); /** Record a mutex instrumentation unlock event. @param mutex the mutex instrumentation */ typedef void (*unlock_mutex_v1_t) (struct PSI_mutex *mutex); /** Record a rwlock instrumentation unlock event. @param rwlock the rwlock instrumentation */ typedef void (*unlock_rwlock_v1_t) (struct PSI_rwlock *rwlock); /** Record a condition instrumentation signal event. @param cond the cond instrumentation */ typedef void (*signal_cond_v1_t) (struct PSI_cond *cond); /** Record a condition instrumentation broadcast event. @param cond the cond instrumentation */ typedef void (*broadcast_cond_v1_t) (struct PSI_cond *cond); /** Record an idle instrumentation wait start event. @param state data storage for the locker @param file the source file name @param line the source line number @return an idle locker, or NULL */ typedef struct PSI_idle_locker* (*start_idle_wait_v1_t) (struct PSI_idle_locker_state_v1 *state, const char *src_file, uint src_line); /** Record an idle instrumentation wait end event. @param locker a thread locker for the running thread */ typedef void (*end_idle_wait_v1_t) (struct PSI_idle_locker *locker); /** Record a mutex instrumentation wait start event. @param state data storage for the locker @param mutex the instrumented mutex to lock @param op the operation to perform @param file the source file name @param line the source line number @return a mutex locker, or NULL */ typedef struct PSI_mutex_locker* (*start_mutex_wait_v1_t) (struct PSI_mutex_locker_state_v1 *state, struct PSI_mutex *mutex, enum PSI_mutex_operation op, const char *src_file, uint src_line); /** Record a mutex instrumentation wait end event. @param locker a thread locker for the running thread @param rc the wait operation return code */ typedef void (*end_mutex_wait_v1_t) (struct PSI_mutex_locker *locker, int rc); /** Record a rwlock instrumentation read wait start event. @param locker a thread locker for the running thread @param must must block: 1 for lock, 0 for trylock */ typedef struct PSI_rwlock_locker* (*start_rwlock_rdwait_v1_t) (struct PSI_rwlock_locker_state_v1 *state, struct PSI_rwlock *rwlock, enum PSI_rwlock_operation op, const char *src_file, uint src_line); /** Record a rwlock instrumentation read wait end event. @param locker a thread locker for the running thread @param rc the wait operation return code */ typedef void (*end_rwlock_rdwait_v1_t) (struct PSI_rwlock_locker *locker, int rc); /** Record a rwlock instrumentation write wait start event. @param locker a thread locker for the running thread @param must must block: 1 for lock, 0 for trylock */ typedef struct PSI_rwlock_locker* (*start_rwlock_wrwait_v1_t) (struct PSI_rwlock_locker_state_v1 *state, struct PSI_rwlock *rwlock, enum PSI_rwlock_operation op, const char *src_file, uint src_line); /** Record a rwlock instrumentation write wait end event. @param locker a thread locker for the running thread @param rc the wait operation return code */ typedef void (*end_rwlock_wrwait_v1_t) (struct PSI_rwlock_locker *locker, int rc); /** Record a condition instrumentation wait start event. @param locker a thread locker for the running thread @param must must block: 1 for wait, 0 for timedwait */ typedef struct PSI_cond_locker* (*start_cond_wait_v1_t) (struct PSI_cond_locker_state_v1 *state, struct PSI_cond *cond, struct PSI_mutex *mutex, enum PSI_cond_operation op, const char *src_file, uint src_line); /** Record a condition instrumentation wait end event. @param locker a thread locker for the running thread @param rc the wait operation return code */ typedef void (*end_cond_wait_v1_t) (struct PSI_cond_locker *locker, int rc); /** Record a table instrumentation io wait start event. @param locker a table locker for the running thread @param file the source file name @param line the source line number */ typedef struct PSI_table_locker* (*start_table_io_wait_v1_t) (struct PSI_table_locker_state *state, struct PSI_table *table, enum PSI_table_io_operation op, uint index, const char *src_file, uint src_line); /** Record a table instrumentation io wait end event. @param locker a table locker for the running thread @param numrows the number of rows involved in io */ typedef void (*end_table_io_wait_v1_t) (struct PSI_table_locker *locker, ulonglong numrows); /** Record a table instrumentation lock wait start event. @param locker a table locker for the running thread @param file the source file name @param line the source line number */ typedef struct PSI_table_locker* (*start_table_lock_wait_v1_t) (struct PSI_table_locker_state *state, struct PSI_table *table, enum PSI_table_lock_operation op, ulong flags, const char *src_file, uint src_line); /** Record a table instrumentation lock wait end event. @param locker a table locker for the running thread */ typedef void (*end_table_lock_wait_v1_t)(struct PSI_table_locker *locker); typedef void (*unlock_table_v1_t)(struct PSI_table *table); /** Start a file instrumentation open operation. @param locker the file locker @param op the operation to perform @param src_file the source file name @param src_line the source line number */ typedef void (*start_file_open_wait_v1_t) (struct PSI_file_locker *locker, const char *src_file, uint src_line); /** End a file instrumentation open operation, for file streams. @param locker the file locker. @param result the opened file (NULL indicates failure, non NULL success). @return an instrumented file handle */ typedef struct PSI_file* (*end_file_open_wait_v1_t) (struct PSI_file_locker *locker, void *result); /** End a file instrumentation open operation, for non stream files. @param locker the file locker. @param file the file number assigned by open() or create() for this file. */ typedef void (*end_file_open_wait_and_bind_to_descriptor_v1_t) (struct PSI_file_locker *locker, File file); /** End a file instrumentation open operation, for non stream temporary files. @param locker the file locker. @param file the file number assigned by open() or create() for this file. @param filename the file name generated during temporary file creation. */ typedef void (*end_temp_file_open_wait_and_bind_to_descriptor_v1_t) (struct PSI_file_locker *locker, File file, const char *filename); /** Record a file instrumentation start event. @param locker a file locker for the running thread @param op file operation to be performed @param count the number of bytes requested, or 0 if not applicable @param src_file the source file name @param src_line the source line number */ typedef void (*start_file_wait_v1_t) (struct PSI_file_locker *locker, size_t count, const char *src_file, uint src_line); /** Record a file instrumentation end event. Note that for file close operations, the instrumented file handle associated with the file (which was provided to obtain a locker) is invalid after this call. @param locker a file locker for the running thread @param count the number of bytes actually used in the operation, or 0 if not applicable, or -1 if the operation failed @sa get_thread_file_name_locker @sa get_thread_file_stream_locker @sa get_thread_file_descriptor_locker */ typedef void (*end_file_wait_v1_t) (struct PSI_file_locker *locker, size_t count); /** Start a file instrumentation close operation. @param locker the file locker @param op the operation to perform @param src_file the source file name @param src_line the source line number */ typedef void (*start_file_close_wait_v1_t) (struct PSI_file_locker *locker, const char *src_file, uint src_line); /** End a file instrumentation close operation. @param locker the file locker. @param rc the close operation return code (0 for success). @return an instrumented file handle */ typedef void (*end_file_close_wait_v1_t) (struct PSI_file_locker *locker, int rc); /** Rename a file instrumentation close operation. @param locker the file locker. @param old_name name of the file to be renamed. @param new_name name of the file after rename. @param rc the rename operation return code (0 for success). */ typedef void (*end_file_rename_wait_v1_t) (struct PSI_file_locker *locker, const char *old_name, const char *new_name, int rc); /** Start a new stage, and implicitly end the previous stage. @param key the key of the new stage @param src_file the source file name @param src_line the source line number @return the new stage progress */ typedef PSI_stage_progress* (*start_stage_v1_t) (PSI_stage_key key, const char *src_file, int src_line); typedef PSI_stage_progress* (*get_current_stage_progress_v1_t)(void); /** End the current stage. */ typedef void (*end_stage_v1_t) (void); /** Get a statement instrumentation locker. @param state data storage for the locker @param key the statement instrumentation key @param charset client character set @return a statement locker, or NULL */ typedef struct PSI_statement_locker* (*get_thread_statement_locker_v1_t) (struct PSI_statement_locker_state_v1 *state, PSI_statement_key key, const void *charset, PSI_sp_share *sp_share); /** Refine a statement locker to a more specific key. Note that only events declared mutable can be refined. @param the statement locker for the current event @param key the new key for the event @sa PSI_FLAG_MUTABLE */ typedef struct PSI_statement_locker* (*refine_statement_v1_t) (struct PSI_statement_locker *locker, PSI_statement_key key); /** Start a new statement event. @param locker the statement locker for this event @param db the active database name for this statement @param db_length the active database name length for this statement @param src_file source file name @param src_line source line number */ typedef void (*start_statement_v1_t) (struct PSI_statement_locker *locker, const char *db, uint db_length, const char *src_file, uint src_line); /** Set the statement text for a statement event. @param locker the current statement locker @param text the statement text @param text_len the statement text length */ typedef void (*set_statement_text_v1_t) (struct PSI_statement_locker *locker, const char *text, uint text_len); /** Set a statement event lock time. @param locker the statement locker @param lock_time the locked time, in microseconds */ typedef void (*set_statement_lock_time_t) (struct PSI_statement_locker *locker, ulonglong lock_time); /** Set a statement event rows sent metric. @param locker the statement locker @param count the number of rows sent */ typedef void (*set_statement_rows_sent_t) (struct PSI_statement_locker *locker, ulonglong count); /** Set a statement event rows examined metric. @param locker the statement locker @param count the number of rows examined */ typedef void (*set_statement_rows_examined_t) (struct PSI_statement_locker *locker, ulonglong count); /** Increment a statement event "created tmp disk tables" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_created_tmp_disk_tables_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "created tmp tables" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_created_tmp_tables_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "select full join" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_select_full_join_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "select full range join" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_select_full_range_join_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "select range join" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_select_range_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "select range check" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_select_range_check_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "select scan" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_select_scan_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "sort merge passes" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_sort_merge_passes_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "sort range" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_sort_range_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "sort rows" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_sort_rows_t) (struct PSI_statement_locker *locker, ulong count); /** Increment a statement event "sort scan" metric. @param locker the statement locker @param count the metric increment value */ typedef void (*inc_statement_sort_scan_t) (struct PSI_statement_locker *locker, ulong count); /** Set a statement event "no index used" metric. @param locker the statement locker @param count the metric value */ typedef void (*set_statement_no_index_used_t) (struct PSI_statement_locker *locker); /** Set a statement event "no good index used" metric. @param locker the statement locker @param count the metric value */ typedef void (*set_statement_no_good_index_used_t) (struct PSI_statement_locker *locker); /** End a statement event. @param locker the statement locker @param stmt_da the statement diagnostics area. @sa Diagnostics_area */ typedef void (*end_statement_v1_t) (struct PSI_statement_locker *locker, void *stmt_da); /** Get a transaction instrumentation locker. @param state data storage for the locker @param xid the xid for this transaction @param trxid the InnoDB transaction id @param iso_level isolation level for this transaction @param read_only true if transaction access mode is read-only @param autocommit true if transaction is autocommit @return a transaction locker, or NULL */ typedef struct PSI_transaction_locker* (*get_thread_transaction_locker_v1_t) (struct PSI_transaction_locker_state_v1 *state, const void *xid, ulonglong trxid, int isolation_level, my_bool read_only, my_bool autocommit); /** Start a new transaction event. @param locker the transaction locker for this event @param src_file source file name @param src_line source line number */ typedef void (*start_transaction_v1_t) (struct PSI_transaction_locker *locker, const char *src_file, uint src_line); /** Set the transaction xid. @param locker the transaction locker for this event @param xid the id of the XA transaction #param xa_state is the state of the XA transaction */ typedef void (*set_transaction_xid_v1_t) (struct PSI_transaction_locker *locker, const void *xid, int xa_state); /** Set the state of the XA transaction. @param locker the transaction locker for this event @param xa_state the new state of the xa transaction */ typedef void (*set_transaction_xa_state_v1_t) (struct PSI_transaction_locker *locker, int xa_state); /** Set the transaction gtid. @param locker the transaction locker for this event @param sid the source id for the transaction, mapped from sidno @param gtid_spec the gtid specifier for the transaction */ typedef void (*set_transaction_gtid_v1_t) (struct PSI_transaction_locker *locker, const void *sid, const void *gtid_spec); /** Set the transaction trx_id. @param locker the transaction locker for this event @param trxid the storage engine transaction ID */ typedef void (*set_transaction_trxid_v1_t) (struct PSI_transaction_locker *locker, const ulonglong *trxid); /** Increment a transaction event savepoint count. @param locker the transaction locker @param count the increment value */ typedef void (*inc_transaction_savepoints_v1_t) (struct PSI_transaction_locker *locker, ulong count); /** Increment a transaction event rollback to savepoint count. @param locker the transaction locker @param count the increment value */ typedef void (*inc_transaction_rollback_to_savepoint_v1_t) (struct PSI_transaction_locker *locker, ulong count); /** Increment a transaction event release savepoint count. @param locker the transaction locker @param count the increment value */ typedef void (*inc_transaction_release_savepoint_v1_t) (struct PSI_transaction_locker *locker, ulong count); /** Commit or rollback the transaction. @param locker the transaction locker for this event @param commit true if transaction was committed, false if rolled back */ typedef void (*end_transaction_v1_t) (struct PSI_transaction_locker *locker, my_bool commit); /** Record a socket instrumentation start event. @param locker a socket locker for the running thread @param op socket operation to be performed @param count the number of bytes requested, or 0 if not applicable @param src_file the source file name @param src_line the source line number */ typedef struct PSI_socket_locker* (*start_socket_wait_v1_t) (struct PSI_socket_locker_state_v1 *state, struct PSI_socket *socket, enum PSI_socket_operation op, size_t count, const char *src_file, uint src_line); /** Record a socket instrumentation end event. Note that for socket close operations, the instrumented socket handle associated with the socket (which was provided to obtain a locker) is invalid after this call. @param locker a socket locker for the running thread @param count the number of bytes actually used in the operation, or 0 if not applicable, or -1 if the operation failed @sa get_thread_socket_locker */ typedef void (*end_socket_wait_v1_t) (struct PSI_socket_locker *locker, size_t count); /** Set the socket state for an instrumented socket. @param socket the instrumented socket @param state socket state */ typedef void (*set_socket_state_v1_t)(struct PSI_socket *socket, enum PSI_socket_state state); /** Set the socket info for an instrumented socket. @param socket the instrumented socket @param fd the socket descriptor @param addr the socket ip address @param addr_len length of socket ip address @param thread_id associated thread id */ typedef void (*set_socket_info_v1_t)(struct PSI_socket *socket, const my_socket *fd, const struct sockaddr *addr, socklen_t addr_len); /** Bind a socket to the thread that owns it. @param socket instrumented socket */ typedef void (*set_socket_thread_owner_v1_t)(struct PSI_socket *socket); /** Get a prepare statement. @param locker a statement locker for the running thread. */ typedef PSI_prepared_stmt* (*create_prepared_stmt_v1_t) (void *identity, uint stmt_id, PSI_statement_locker *locker, const char *stmt_name, size_t stmt_name_length); /** destroy a prepare statement. @param prepared_stmt prepared statement. */ typedef void (*destroy_prepared_stmt_v1_t) (PSI_prepared_stmt *prepared_stmt); /** repreare a prepare statement. @param prepared_stmt prepared statement. */ typedef void (*reprepare_prepared_stmt_v1_t) (PSI_prepared_stmt *prepared_stmt); /** Record a prepare statement instrumentation execute event. @param locker a statement locker for the running thread. @param prepared_stmt prepared statement. */ typedef void (*execute_prepared_stmt_v1_t) (PSI_statement_locker *locker, PSI_prepared_stmt* prepared_stmt); /** Set the statement text for a prepared statement event. @param prepared_stmt prepared statement. @param text the prepared statement text @param text_len the prepared statement text length */ typedef void (*set_prepared_stmt_text_v1_t)(PSI_prepared_stmt *prepared_stmt, const char *text, uint text_len); /** Get a digest locker for the current statement. @param locker a statement locker for the running thread */ typedef struct PSI_digest_locker * (*digest_start_v1_t) (struct PSI_statement_locker *locker); /** Add a token to the current digest instrumentation. @param locker a digest locker for the current statement @param token the lexical token to add @param yylval the lexical token attributes */ typedef void (*digest_end_v1_t) (struct PSI_digest_locker *locker, const struct sql_digest_storage *digest); typedef PSI_sp_locker* (*start_sp_v1_t) (struct PSI_sp_locker_state_v1 *state, struct PSI_sp_share* sp_share); typedef void (*end_sp_v1_t) (struct PSI_sp_locker *locker); typedef void (*drop_sp_v1_t) (uint object_type, const char *schema_name, uint schema_name_length, const char *object_name, uint object_name_length); /** Acquire a sp share instrumentation. @param type of stored program @param schema name of stored program @param name of stored program @return a stored program share instrumentation, or NULL */ typedef struct PSI_sp_share* (*get_sp_share_v1_t) (uint object_type, const char *schema_name, uint schema_name_length, const char *object_name, uint object_name_length); /** Release a stored program share. @param info the stored program share to release */ typedef void (*release_sp_share_v1_t)(struct PSI_sp_share *share); typedef PSI_metadata_lock* (*create_metadata_lock_v1_t) (void *identity, const MDL_key *key, opaque_mdl_type mdl_type, opaque_mdl_duration mdl_duration, opaque_mdl_status mdl_status, const char *src_file, uint src_line); typedef void (*set_metadata_lock_status_v1_t)(PSI_metadata_lock *lock, opaque_mdl_status mdl_status); typedef void (*destroy_metadata_lock_v1_t)(PSI_metadata_lock *lock); typedef struct PSI_metadata_locker* (*start_metadata_wait_v1_t) (struct PSI_metadata_locker_state_v1 *state, struct PSI_metadata_lock *mdl, const char *src_file, uint src_line); typedef void (*end_metadata_wait_v1_t) (struct PSI_metadata_locker *locker, int rc); /** Stores an array of connection attributes @param buffer char array of length encoded connection attributes in network format @param length length of the data in buffer @param from_cs charset in which @c buffer is encoded @return state @retval non_0 attributes truncated @retval 0 stored the attribute */ typedef int (*set_thread_connect_attrs_v1_t)(const char *buffer, uint length, const void *from_cs); /** Performance Schema Interface, version 1. @since PSI_VERSION_1 */ struct PSI_v1 { /** @sa register_mutex_v1_t. */ register_mutex_v1_t register_mutex; /** @sa register_rwlock_v1_t. */ register_rwlock_v1_t register_rwlock; /** @sa register_cond_v1_t. */ register_cond_v1_t register_cond; /** @sa register_thread_v1_t. */ register_thread_v1_t register_thread; /** @sa register_file_v1_t. */ register_file_v1_t register_file; /** @sa register_stage_v1_t. */ register_stage_v1_t register_stage; /** @sa register_statement_v1_t. */ register_statement_v1_t register_statement; /** @sa register_socket_v1_t. */ register_socket_v1_t register_socket; /** @sa init_mutex_v1_t. */ init_mutex_v1_t init_mutex; /** @sa destroy_mutex_v1_t. */ destroy_mutex_v1_t destroy_mutex; /** @sa init_rwlock_v1_t. */ init_rwlock_v1_t init_rwlock; /** @sa destroy_rwlock_v1_t. */ destroy_rwlock_v1_t destroy_rwlock; /** @sa init_cond_v1_t. */ init_cond_v1_t init_cond; /** @sa destroy_cond_v1_t. */ destroy_cond_v1_t destroy_cond; /** @sa init_socket_v1_t. */ init_socket_v1_t init_socket; /** @sa destroy_socket_v1_t. */ destroy_socket_v1_t destroy_socket; /** @sa get_table_share_v1_t. */ get_table_share_v1_t get_table_share; /** @sa release_table_share_v1_t. */ release_table_share_v1_t release_table_share; /** @sa drop_table_share_v1_t. */ drop_table_share_v1_t drop_table_share; /** @sa open_table_v1_t. */ open_table_v1_t open_table; /** @sa unbind_table_v1_t. */ unbind_table_v1_t unbind_table; /** @sa rebind_table_v1_t. */ rebind_table_v1_t rebind_table; /** @sa close_table_v1_t. */ close_table_v1_t close_table; /** @sa create_file_v1_t. */ create_file_v1_t create_file; /** @sa spawn_thread_v1_t. */ spawn_thread_v1_t spawn_thread; /** @sa new_thread_v1_t. */ new_thread_v1_t new_thread; /** @sa set_thread_id_v1_t. */ set_thread_id_v1_t set_thread_id; /** @sa set_thread_THD_v1_t. */ set_thread_THD_v1_t set_thread_THD; /** @sa set_thread_os_id_v1_t. */ set_thread_os_id_v1_t set_thread_os_id; /** @sa get_thread_v1_t. */ get_thread_v1_t get_thread; /** @sa set_thread_user_v1_t. */ set_thread_user_v1_t set_thread_user; /** @sa set_thread_account_v1_t. */ set_thread_account_v1_t set_thread_account; /** @sa set_thread_db_v1_t. */ set_thread_db_v1_t set_thread_db; /** @sa set_thread_command_v1_t. */ set_thread_command_v1_t set_thread_command; /** @sa set_connection_type_v1_t. */ set_connection_type_v1_t set_connection_type; /** @sa set_thread_start_time_v1_t. */ set_thread_start_time_v1_t set_thread_start_time; /** @sa set_thread_state_v1_t. */ set_thread_state_v1_t set_thread_state; /** @sa set_thread_info_v1_t. */ set_thread_info_v1_t set_thread_info; /** @sa set_thread_v1_t. */ set_thread_v1_t set_thread; /** @sa delete_current_thread_v1_t. */ delete_current_thread_v1_t delete_current_thread; /** @sa delete_thread_v1_t. */ delete_thread_v1_t delete_thread; /** @sa get_thread_file_name_locker_v1_t. */ get_thread_file_name_locker_v1_t get_thread_file_name_locker; /** @sa get_thread_file_stream_locker_v1_t. */ get_thread_file_stream_locker_v1_t get_thread_file_stream_locker; /** @sa get_thread_file_descriptor_locker_v1_t. */ get_thread_file_descriptor_locker_v1_t get_thread_file_descriptor_locker; /** @sa unlock_mutex_v1_t. */ unlock_mutex_v1_t unlock_mutex; /** @sa unlock_rwlock_v1_t. */ unlock_rwlock_v1_t unlock_rwlock; /** @sa signal_cond_v1_t. */ signal_cond_v1_t signal_cond; /** @sa broadcast_cond_v1_t. */ broadcast_cond_v1_t broadcast_cond; /** @sa start_idle_wait_v1_t. */ start_idle_wait_v1_t start_idle_wait; /** @sa end_idle_wait_v1_t. */ end_idle_wait_v1_t end_idle_wait; /** @sa start_mutex_wait_v1_t. */ start_mutex_wait_v1_t start_mutex_wait; /** @sa end_mutex_wait_v1_t. */ end_mutex_wait_v1_t end_mutex_wait; /** @sa start_rwlock_rdwait_v1_t. */ start_rwlock_rdwait_v1_t start_rwlock_rdwait; /** @sa end_rwlock_rdwait_v1_t. */ end_rwlock_rdwait_v1_t end_rwlock_rdwait; /** @sa start_rwlock_wrwait_v1_t. */ start_rwlock_wrwait_v1_t start_rwlock_wrwait; /** @sa end_rwlock_wrwait_v1_t. */ end_rwlock_wrwait_v1_t end_rwlock_wrwait; /** @sa start_cond_wait_v1_t. */ start_cond_wait_v1_t start_cond_wait; /** @sa end_cond_wait_v1_t. */ end_cond_wait_v1_t end_cond_wait; /** @sa start_table_io_wait_v1_t. */ start_table_io_wait_v1_t start_table_io_wait; /** @sa end_table_io_wait_v1_t. */ end_table_io_wait_v1_t end_table_io_wait; /** @sa start_table_lock_wait_v1_t. */ start_table_lock_wait_v1_t start_table_lock_wait; /** @sa end_table_lock_wait_v1_t. */ end_table_lock_wait_v1_t end_table_lock_wait; /** @sa start_file_open_wait_v1_t. */ start_file_open_wait_v1_t start_file_open_wait; /** @sa end_file_open_wait_v1_t. */ end_file_open_wait_v1_t end_file_open_wait; /** @sa end_file_open_wait_and_bind_to_descriptor_v1_t. */ end_file_open_wait_and_bind_to_descriptor_v1_t end_file_open_wait_and_bind_to_descriptor; /** @sa end_temp_file_open_wait_and_bind_to_descriptor_v1_t. */ end_temp_file_open_wait_and_bind_to_descriptor_v1_t end_temp_file_open_wait_and_bind_to_descriptor; /** @sa start_file_wait_v1_t. */ start_file_wait_v1_t start_file_wait; /** @sa end_file_wait_v1_t. */ end_file_wait_v1_t end_file_wait; /** @sa start_file_close_wait_v1_t. */ start_file_close_wait_v1_t start_file_close_wait; /** @sa end_file_close_wait_v1_t. */ end_file_close_wait_v1_t end_file_close_wait; /** @sa rename_file_close_wait_v1_t. */ end_file_rename_wait_v1_t end_file_rename_wait; /** @sa start_stage_v1_t. */ start_stage_v1_t start_stage; /** @sa get_current_stage_progress_v1_t. */ get_current_stage_progress_v1_t get_current_stage_progress; /** @sa end_stage_v1_t. */ end_stage_v1_t end_stage; /** @sa get_thread_statement_locker_v1_t. */ get_thread_statement_locker_v1_t get_thread_statement_locker; /** @sa refine_statement_v1_t. */ refine_statement_v1_t refine_statement; /** @sa start_statement_v1_t. */ start_statement_v1_t start_statement; /** @sa set_statement_text_v1_t. */ set_statement_text_v1_t set_statement_text; /** @sa set_statement_lock_time_t. */ set_statement_lock_time_t set_statement_lock_time; /** @sa set_statement_rows_sent_t. */ set_statement_rows_sent_t set_statement_rows_sent; /** @sa set_statement_rows_examined_t. */ set_statement_rows_examined_t set_statement_rows_examined; /** @sa inc_statement_created_tmp_disk_tables. */ inc_statement_created_tmp_disk_tables_t inc_statement_created_tmp_disk_tables; /** @sa inc_statement_created_tmp_tables. */ inc_statement_created_tmp_tables_t inc_statement_created_tmp_tables; /** @sa inc_statement_select_full_join. */ inc_statement_select_full_join_t inc_statement_select_full_join; /** @sa inc_statement_select_full_range_join. */ inc_statement_select_full_range_join_t inc_statement_select_full_range_join; /** @sa inc_statement_select_range. */ inc_statement_select_range_t inc_statement_select_range; /** @sa inc_statement_select_range_check. */ inc_statement_select_range_check_t inc_statement_select_range_check; /** @sa inc_statement_select_scan. */ inc_statement_select_scan_t inc_statement_select_scan; /** @sa inc_statement_sort_merge_passes. */ inc_statement_sort_merge_passes_t inc_statement_sort_merge_passes; /** @sa inc_statement_sort_range. */ inc_statement_sort_range_t inc_statement_sort_range; /** @sa inc_statement_sort_rows. */ inc_statement_sort_rows_t inc_statement_sort_rows; /** @sa inc_statement_sort_scan. */ inc_statement_sort_scan_t inc_statement_sort_scan; /** @sa set_statement_no_index_used. */ set_statement_no_index_used_t set_statement_no_index_used; /** @sa set_statement_no_good_index_used. */ set_statement_no_good_index_used_t set_statement_no_good_index_used; /** @sa end_statement_v1_t. */ end_statement_v1_t end_statement; /** @sa get_thread_transaction_locker_v1_t. */ get_thread_transaction_locker_v1_t get_thread_transaction_locker; /** @sa start_transaction_v1_t. */ start_transaction_v1_t start_transaction; /** @sa set_transaction_xid_v1_t. */ set_transaction_xid_v1_t set_transaction_xid; /** @sa set_transaction_xa_state_v1_t. */ set_transaction_xa_state_v1_t set_transaction_xa_state; /** @sa set_transaction_gtid_v1_t. */ set_transaction_gtid_v1_t set_transaction_gtid; /** @sa set_transaction_trxid_v1_t. */ set_transaction_trxid_v1_t set_transaction_trxid; /** @sa inc_transaction_savepoints_v1_t. */ inc_transaction_savepoints_v1_t inc_transaction_savepoints; /** @sa inc_transaction_rollback_to_savepoint_v1_t. */ inc_transaction_rollback_to_savepoint_v1_t inc_transaction_rollback_to_savepoint; /** @sa inc_transaction_release_savepoint_v1_t. */ inc_transaction_release_savepoint_v1_t inc_transaction_release_savepoint; /** @sa end_transaction_v1_t. */ end_transaction_v1_t end_transaction; /** @sa start_socket_wait_v1_t. */ start_socket_wait_v1_t start_socket_wait; /** @sa end_socket_wait_v1_t. */ end_socket_wait_v1_t end_socket_wait; /** @sa set_socket_state_v1_t. */ set_socket_state_v1_t set_socket_state; /** @sa set_socket_info_v1_t. */ set_socket_info_v1_t set_socket_info; /** @sa set_socket_thread_owner_v1_t. */ set_socket_thread_owner_v1_t set_socket_thread_owner; /** @sa create_prepared_stmt_v1_t. */ create_prepared_stmt_v1_t create_prepared_stmt; /** @sa destroy_prepared_stmt_v1_t. */ destroy_prepared_stmt_v1_t destroy_prepared_stmt; /** @sa reprepare_prepared_stmt_v1_t. */ reprepare_prepared_stmt_v1_t reprepare_prepared_stmt; /** @sa execute_prepared_stmt_v1_t. */ execute_prepared_stmt_v1_t execute_prepared_stmt; /** @sa set_prepared_stmt_text_v1_t. */ set_prepared_stmt_text_v1_t set_prepared_stmt_text; /** @sa digest_start_v1_t. */ digest_start_v1_t digest_start; /** @sa digest_end_v1_t. */ digest_end_v1_t digest_end; /** @sa set_thread_connect_attrs_v1_t. */ set_thread_connect_attrs_v1_t set_thread_connect_attrs; /** @sa start_sp_v1_t. */ start_sp_v1_t start_sp; /** @sa start_sp_v1_t. */ end_sp_v1_t end_sp; /** @sa drop_sp_v1_t. */ drop_sp_v1_t drop_sp; /** @sa get_sp_share_v1_t. */ get_sp_share_v1_t get_sp_share; /** @sa release_sp_share_v1_t. */ release_sp_share_v1_t release_sp_share; /** @sa register_memory_v1_t. */ register_memory_v1_t register_memory; /** @sa memory_alloc_v1_t. */ memory_alloc_v1_t memory_alloc; /** @sa memory_realloc_v1_t. */ memory_realloc_v1_t memory_realloc; /** @sa memory_claim_v1_t. */ memory_claim_v1_t memory_claim; /** @sa memory_free_v1_t. */ memory_free_v1_t memory_free; unlock_table_v1_t unlock_table; create_metadata_lock_v1_t create_metadata_lock; set_metadata_lock_status_v1_t set_metadata_lock_status; destroy_metadata_lock_v1_t destroy_metadata_lock; start_metadata_wait_v1_t start_metadata_wait; end_metadata_wait_v1_t end_metadata_wait; set_thread_peer_port_v1_t set_thread_peer_port; }; /** @} (end of group Group_PSI_v1) */ #endif /* HAVE_PSI_1 */ #ifdef USE_PSI_2 #define HAVE_PSI_2 #endif #ifdef HAVE_PSI_2 /** @defgroup Group_PSI_v2 Application Binary Interface, version 2 @ingroup Instrumentation_interface @{ */ /** Performance Schema Interface, version 2. This is a placeholder, this interface is not defined yet. @since PSI_VERSION_2 */ struct PSI_v2 { /** Placeholder */ int placeholder; /* ... extended interface ... */ }; /** Placeholder */ struct PSI_mutex_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_rwlock_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_cond_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_thread_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_file_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_stage_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_statement_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_transaction_info_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_idle_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_mutex_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_rwlock_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_cond_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_file_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_statement_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_transaction_locker_state_v2 { /** Placeholder */ int placeholder; }; /** Placeholder */ struct PSI_socket_locker_state_v2 { /** Placeholder */ int placeholder; }; struct PSI_metadata_locker_state_v2 { int placeholder; }; /** @} (end of group Group_PSI_v2) */ #endif /* HAVE_PSI_2 */ /** @typedef PSI The instrumentation interface for the current version. @sa PSI_CURRENT_VERSION */ /** @typedef PSI_mutex_info The mutex information structure for the current version. */ /** @typedef PSI_rwlock_info The rwlock information structure for the current version. */ /** @typedef PSI_cond_info The cond information structure for the current version. */ /** @typedef PSI_thread_info The thread information structure for the current version. */ /** @typedef PSI_file_info The file information structure for the current version. */ /* Export the required version */ #ifdef USE_PSI_1 typedef struct PSI_v1 PSI; typedef struct PSI_mutex_info_v1 PSI_mutex_info; typedef struct PSI_rwlock_info_v1 PSI_rwlock_info; typedef struct PSI_cond_info_v1 PSI_cond_info; typedef struct PSI_thread_info_v1 PSI_thread_info; typedef struct PSI_file_info_v1 PSI_file_info; typedef struct PSI_stage_info_v1 PSI_stage_info; typedef struct PSI_statement_info_v1 PSI_statement_info; typedef struct PSI_transaction_info_v1 PSI_transaction_info; typedef struct PSI_socket_info_v1 PSI_socket_info; typedef struct PSI_idle_locker_state_v1 PSI_idle_locker_state; typedef struct PSI_mutex_locker_state_v1 PSI_mutex_locker_state; typedef struct PSI_rwlock_locker_state_v1 PSI_rwlock_locker_state; typedef struct PSI_cond_locker_state_v1 PSI_cond_locker_state; typedef struct PSI_file_locker_state_v1 PSI_file_locker_state; typedef struct PSI_statement_locker_state_v1 PSI_statement_locker_state; typedef struct PSI_transaction_locker_state_v1 PSI_transaction_locker_state; typedef struct PSI_socket_locker_state_v1 PSI_socket_locker_state; typedef struct PSI_sp_locker_state_v1 PSI_sp_locker_state; typedef struct PSI_metadata_locker_state_v1 PSI_metadata_locker_state; #endif #ifdef USE_PSI_2 typedef struct PSI_v2 PSI; typedef struct PSI_mutex_info_v2 PSI_mutex_info; typedef struct PSI_rwlock_info_v2 PSI_rwlock_info; typedef struct PSI_cond_info_v2 PSI_cond_info; typedef struct PSI_thread_info_v2 PSI_thread_info; typedef struct PSI_file_info_v2 PSI_file_info; typedef struct PSI_stage_info_v2 PSI_stage_info; typedef struct PSI_statement_info_v2 PSI_statement_info; typedef struct PSI_transaction_info_v2 PSI_transaction_info; typedef struct PSI_socket_info_v2 PSI_socket_info; typedef struct PSI_idle_locker_state_v2 PSI_idle_locker_state; typedef struct PSI_mutex_locker_state_v2 PSI_mutex_locker_state; typedef struct PSI_rwlock_locker_state_v2 PSI_rwlock_locker_state; typedef struct PSI_cond_locker_state_v2 PSI_cond_locker_state; typedef struct PSI_file_locker_state_v2 PSI_file_locker_state; typedef struct PSI_statement_locker_state_v2 PSI_statement_locker_state; typedef struct PSI_transaction_locker_state_v2 PSI_transaction_locker_state; typedef struct PSI_socket_locker_state_v2 PSI_socket_locker_state; typedef struct PSI_sp_locker_state_v2 PSI_sp_locker_state; typedef struct PSI_metadata_locker_state_v2 PSI_metadata_locker_state; #endif #ifndef HAVE_PSI_INTERFACE /** Dummy structure, used to declare PSI_server when no instrumentation is available. The content does not matter, since PSI_server will be NULL. */ struct PSI_none { int opaque; }; typedef struct PSI_none PSI; /** Stage instrument information. @since PSI_VERSION_1 This structure is used to register an instrumented stage. */ struct PSI_stage_info_none { /** Unused stage key. */ unsigned int m_key; /** The name of the stage instrument. */ const char *m_name; /** Unused stage flags. */ int m_flags; }; /** The stage instrumentation has to co exist with the legacy THD::set_proc_info instrumentation. To avoid duplication of the instrumentation in the server, the common PSI_stage_info structure is used, so we export it here, even when not building with HAVE_PSI_INTERFACE. */ typedef struct PSI_stage_info_none PSI_stage_info; typedef struct PSI_stage_info_none PSI_statement_info; typedef struct PSI_stage_info_none PSI_sp_locker_state; typedef struct PSI_stage_info_none PSI_metadata_locker_state; typedef struct PSI_stage_info_none PSI_metadata_locker; #endif /* HAVE_PSI_INTERFACE */ extern MYSQL_PLUGIN_IMPORT PSI *PSI_server; /* Allow to override PSI_XXX_CALL at compile time with more efficient implementations, if available. If nothing better is available, make a dynamic call using the PSI_server function pointer. */ #define PSI_DYNAMIC_CALL(M) PSI_server->M /** @} */ C_MODE_END #endif /* MYSQL_PERFORMANCE_SCHEMA_INTERFACE_H */ PKe[؅psi/mysql_statement.hnu[/* Copyright (c) 2010, 2023, Oracle and/or its affiliates. Copyright (c) 2017, 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License, version 2.0, as published by the Free Software Foundation. This program is also distributed with certain software (including but not limited to OpenSSL) that is licensed under separate terms, as designated in a particular file or component or in included license documentation. The authors of MySQL hereby grant you an additional permission to link the program and your derivative works with the separately licensed software that they have included with MySQL. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License, version 2.0, for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef MYSQL_STATEMENT_H #define MYSQL_STATEMENT_H /** @file mysql/psi/mysql_statement.h Instrumentation helpers for statements. */ #include "mysql/psi/psi.h" class Diagnostics_area; typedef const struct charset_info_st CHARSET_INFO; #ifndef PSI_STATEMENT_CALL #define PSI_STATEMENT_CALL(M) PSI_DYNAMIC_CALL(M) #endif #ifndef PSI_DIGEST_CALL #define PSI_DIGEST_CALL(M) PSI_DYNAMIC_CALL(M) #endif /** @defgroup Statement_instrumentation Statement Instrumentation @ingroup Instrumentation_interface @{ */ /** @def mysql_statement_register(P1, P2, P3) Statement registration. */ #ifdef HAVE_PSI_STATEMENT_INTERFACE #define mysql_statement_register(P1, P2, P3) \ inline_mysql_statement_register(P1, P2, P3) #else #define mysql_statement_register(P1, P2, P3) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE #define MYSQL_DIGEST_START(LOCKER) \ inline_mysql_digest_start(LOCKER) #else #define MYSQL_DIGEST_START(LOCKER) \ NULL #endif #ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE #define MYSQL_DIGEST_END(LOCKER, DIGEST) \ inline_mysql_digest_end(LOCKER, DIGEST) #else #define MYSQL_DIGEST_END(LOCKER, DIGEST) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \ inline_mysql_start_statement(STATE, K, DB, DB_LEN, CS, SPS, __FILE__, __LINE__) #else #define MYSQL_START_STATEMENT(STATE, K, DB, DB_LEN, CS, SPS) \ NULL #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_REFINE_STATEMENT(LOCKER, K) \ inline_mysql_refine_statement(LOCKER, K) #else #define MYSQL_REFINE_STATEMENT(LOCKER, K) \ NULL #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \ inline_mysql_set_statement_text(LOCKER, P1, P2) #else #define MYSQL_SET_STATEMENT_TEXT(LOCKER, P1, P2) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \ inline_mysql_set_statement_lock_time(LOCKER, P1) #else #define MYSQL_SET_STATEMENT_LOCK_TIME(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \ inline_mysql_set_statement_rows_sent(LOCKER, P1) #else #define MYSQL_SET_STATEMENT_ROWS_SENT(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \ inline_mysql_set_statement_rows_examined(LOCKER, P1) #else #define MYSQL_SET_STATEMENT_ROWS_EXAMINED(LOCKER, P1) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE #define MYSQL_END_STATEMENT(LOCKER, DA) \ inline_mysql_end_statement(LOCKER, DA) #else #define MYSQL_END_STATEMENT(LOCKER, DA) \ do {} while (0) #endif #ifdef HAVE_PSI_STATEMENT_INTERFACE static inline void inline_mysql_statement_register( const char *category, PSI_statement_info *info, int count) { PSI_STATEMENT_CALL(register_statement)(category, info, count); } #ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE static inline struct PSI_digest_locker * inline_mysql_digest_start(PSI_statement_locker *locker) { PSI_digest_locker* digest_locker= NULL; if (psi_likely(locker != NULL)) digest_locker= PSI_DIGEST_CALL(digest_start)(locker); return digest_locker; } #endif #ifdef HAVE_PSI_STATEMENT_DIGEST_INTERFACE static inline void inline_mysql_digest_end(PSI_digest_locker *locker, const sql_digest_storage *digest) { if (psi_likely(locker != NULL)) PSI_DIGEST_CALL(digest_end)(locker, digest); } #endif static inline struct PSI_statement_locker * inline_mysql_start_statement(PSI_statement_locker_state *state, PSI_statement_key key, const char *db, size_t db_len, CHARSET_INFO *charset, PSI_sp_share *sp_share, const char *src_file, uint src_line) { PSI_statement_locker *locker; locker= PSI_STATEMENT_CALL(get_thread_statement_locker)(state, key, charset, sp_share); if (psi_likely(locker != NULL)) PSI_STATEMENT_CALL(start_statement)(locker, db, (uint)db_len, src_file, src_line); return locker; } static inline struct PSI_statement_locker * inline_mysql_refine_statement(PSI_statement_locker *locker, PSI_statement_key key) { if (psi_likely(locker != NULL)) { locker= PSI_STATEMENT_CALL(refine_statement)(locker, key); } return locker; } static inline void inline_mysql_set_statement_text(PSI_statement_locker *locker, const char *text, uint text_len) { if (psi_likely(locker != NULL)) { PSI_STATEMENT_CALL(set_statement_text)(locker, text, text_len); } } static inline void inline_mysql_set_statement_lock_time(PSI_statement_locker *locker, ulonglong count) { if (psi_likely(locker != NULL)) { PSI_STATEMENT_CALL(set_statement_lock_time)(locker, count); } } static inline void inline_mysql_set_statement_rows_sent(PSI_statement_locker *locker, ulonglong count) { if (psi_likely(locker != NULL)) { PSI_STATEMENT_CALL(set_statement_rows_sent)(locker, count); } } static inline void inline_mysql_set_statement_rows_examined(PSI_statement_locker *locker, ulonglong count) { if (psi_likely(locker != NULL)) { PSI_STATEMENT_CALL(set_statement_rows_examined)(locker, count); } } static inline void inline_mysql_end_statement(struct PSI_statement_locker *locker, Diagnostics_area *stmt_da) { PSI_STAGE_CALL(end_stage)(); if (psi_likely(locker != NULL)) PSI_STATEMENT_CALL(end_statement)(locker, stmt_da); } #endif /** @} (end of group Statement_instrumentation) */ #endif PKe[e/QQplugin_encryption.hnu[#ifndef MYSQL_PLUGIN_ENCRYPTION_INCLUDED /* Copyright (C) 2014, 2015 Sergei Golubchik and MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file Encryption Plugin API. This file defines the API for server plugins that manage encryption keys for MariaDB on-disk data encryption. */ #define MYSQL_PLUGIN_ENCRYPTION_INCLUDED #include #ifdef __cplusplus extern "C" { #endif #define MariaDB_ENCRYPTION_INTERFACE_VERSION 0x0300 /** Encryption plugin descriptor */ struct st_mariadb_encryption { int interface_version; /**< version plugin uses */ /*********** KEY MANAGEMENT ********************************************/ /** function returning latest key version for a given key id @return a version or ENCRYPTION_KEY_VERSION_INVALID to indicate an error. */ unsigned int (*get_latest_key_version)(unsigned int key_id); /** function returning a key for a key version @param version the requested key version @param key the key will be stored there. Can be NULL - in which case no key will be returned @param key_length in: key buffer size out: the actual length of the key This method can be used to query the key length - the required buffer size - by passing key==NULL. If the buffer size is less than the key length the content of the key buffer is undefined (the plugin is free to partially fill it with the key data or leave it untouched). @return 0 on success, or ENCRYPTION_KEY_VERSION_INVALID, ENCRYPTION_KEY_BUFFER_TOO_SMALL or any other non-zero number for errors */ unsigned int (*get_key)(unsigned int key_id, unsigned int version, unsigned char *key, unsigned int *key_length); /*********** ENCRYPTION ************************************************/ /* the caller uses encryption as follows: 1. create the encryption context object of the crypt_ctx_size() bytes. 2. initialize it with crypt_ctx_init(). 3. repeat crypt_ctx_update() until there are no more data to encrypt. 4. write the remaining output bytes and destroy the context object with crypt_ctx_finish(). */ /** returns the size of the encryption context object in bytes */ unsigned int (*crypt_ctx_size)(unsigned int key_id, unsigned int key_version); /** initializes the encryption context object. */ int (*crypt_ctx_init)(void *ctx, const unsigned char* key, unsigned int klen, const unsigned char* iv, unsigned int ivlen, int flags, unsigned int key_id, unsigned int key_version); /** processes (encrypts or decrypts) a chunk of data writes the output to th dst buffer. note that it might write more bytes that were in the input. or less. or none at all. */ int (*crypt_ctx_update)(void *ctx, const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen); /** writes the remaining output bytes and destroys the encryption context crypt_ctx_update might've cached part of the output in the context, this method will flush these data out. */ int (*crypt_ctx_finish)(void *ctx, unsigned char* dst, unsigned int* dlen); /** returns the length of the encrypted data it returns the exact length, given only the source length. which means, this API only supports encryption algorithms where the length of the encrypted data only depends on the length of the input (a.k.a. compression is not supported). */ unsigned int (*encrypted_length)(unsigned int slen, unsigned int key_id, unsigned int key_version); }; #ifdef __cplusplus } #endif #endif PKe[W:  auth_dialog_client.hnu[#ifndef MYSQL_AUTH_DIALOG_CLIENT_INCLUDED /* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file Definitions needed to use Dialog client authentication plugin */ struct st_mysql; #define MYSQL_AUTH_DIALOG_CLIENT_INCLUDED /** type of the mysql_authentication_dialog_ask function @param mysql mysql @param type type of the input 1 - ordinary string input 2 - password string @param prompt prompt @param buf a buffer to store the use input @param buf_len the length of the buffer @retval a pointer to the user input string. It may be equal to 'buf' or to 'mysql->password'. In all other cases it is assumed to be an allocated string, and the "dialog" plugin will free() it. */ typedef char *(*mysql_authentication_dialog_ask_t)(struct st_mysql *mysql, int type, const char *prompt, char *buf, int buf_len); /** first byte of the question string is the question "type". It can be an "ordinary" or a "password" question. The last bit set marks a last question in the authentication exchange. */ #define ORDINARY_QUESTION "\2" #define LAST_QUESTION "\3" #define PASSWORD_QUESTION "\4" #define LAST_PASSWORD "\5" #endif PKe[W  service_progress_report.hnu[#ifndef MYSQL_SERVICE_PROGRESS_REPORT_INCLUDED /* Copyright (C) 2011 Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service allows plugins to report progress of long running operations to the server. The progress report is visible in SHOW PROCESSLIST, INFORMATION_SCHEMA.PROCESSLIST, and is sent to the client if requested. The functions are documented at https://mariadb.com/kb/en/progress-reporting/#how-to-add-support-for-progress-reporting-to-a-storage-engine */ #ifdef __cplusplus extern "C" { #endif #define thd_proc_info(thd, msg) set_thd_proc_info(thd, msg, \ __func__, __FILE__, __LINE__) extern struct progress_report_service_st { void (*thd_progress_init_func)(MYSQL_THD thd, unsigned int max_stage); void (*thd_progress_report_func)(MYSQL_THD thd, unsigned long long progress, unsigned long long max_progress); void (*thd_progress_next_stage_func)(MYSQL_THD thd); void (*thd_progress_end_func)(MYSQL_THD thd); const char *(*set_thd_proc_info_func)(MYSQL_THD, const char *info, const char *func, const char *file, unsigned int line); } *progress_report_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_progress_init(thd,max_stage) (progress_report_service->thd_progress_init_func((thd),(max_stage))) #define thd_progress_report(thd, progress, max_progress) (progress_report_service->thd_progress_report_func((thd), (progress), (max_progress))) #define thd_progress_next_stage(thd) (progress_report_service->thd_progress_next_stage_func(thd)) #define thd_progress_end(thd) (progress_report_service->thd_progress_end_func(thd)) #define set_thd_proc_info(thd,info,func,file,line) (progress_report_service->set_thd_proc_info_func((thd),(info),(func),(file),(line))) #else /** Report progress for long running operations @param thd User thread connection handle @param progress Where we are now @param max_progress Progress will continue up to this */ void thd_progress_init(MYSQL_THD thd, unsigned int max_stage); void thd_progress_report(MYSQL_THD thd, unsigned long long progress, unsigned long long max_progress); void thd_progress_next_stage(MYSQL_THD thd); void thd_progress_end(MYSQL_THD thd); const char *set_thd_proc_info(MYSQL_THD, const char * info, const char *func, const char *file, unsigned int line); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_PROGRESS_REPORT_INCLUDED #endif PKe[SzKservice_thd_alloc.hnu[#ifndef MYSQL_SERVICE_THD_ALLOC_INCLUDED /* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service provides functions to allocate memory in a connection local memory pool. The memory allocated there will be automatically freed at the end of the statement, don't use it for allocations that should live longer than that. For short living allocations this is more efficient than using my_malloc and friends, and automatic "garbage collection" allows not to think about memory leaks. The pool is best for small to medium objects, don't use it for large allocations - they are better served with my_malloc. */ #ifndef MYSQL_ABI_CHECK #include #endif #ifdef __cplusplus extern "C" { #endif struct st_mysql_lex_string { char *str; size_t length; }; typedef struct st_mysql_lex_string MYSQL_LEX_STRING; struct st_mysql_const_lex_string { const char *str; size_t length; }; typedef struct st_mysql_const_lex_string MYSQL_CONST_LEX_STRING; extern struct thd_alloc_service_st { void *(*thd_alloc_func)(MYSQL_THD, size_t); void *(*thd_calloc_func)(MYSQL_THD, size_t); char *(*thd_strdup_func)(MYSQL_THD, const char *); char *(*thd_strmake_func)(MYSQL_THD, const char *, size_t); void *(*thd_memdup_func)(MYSQL_THD, const void*, size_t); MYSQL_CONST_LEX_STRING *(*thd_make_lex_string_func)(MYSQL_THD, MYSQL_CONST_LEX_STRING *, const char *, size_t, int); } *thd_alloc_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_alloc(thd,size) (thd_alloc_service->thd_alloc_func((thd), (size))) #define thd_calloc(thd,size) (thd_alloc_service->thd_calloc_func((thd), (size))) #define thd_strdup(thd,str) (thd_alloc_service->thd_strdup_func((thd), (str))) #define thd_strmake(thd,str,size) \ (thd_alloc_service->thd_strmake_func((thd), (str), (size))) #define thd_memdup(thd,str,size) \ (thd_alloc_service->thd_memdup_func((thd), (str), (size))) #define thd_make_lex_string(thd, lex_str, str, size, allocate_lex_string) \ (thd_alloc_service->thd_make_lex_string_func((thd), (lex_str), (str), \ (size), (allocate_lex_string))) #else /** Allocate memory in the connection's local memory pool @details When properly used in place of @c my_malloc(), this can significantly improve concurrency. Don't use this or related functions to allocate large chunks of memory. Use for temporary storage only. The memory will be freed automatically at the end of the statement; no explicit code is required to prevent memory leaks. @see alloc_root() */ void *thd_alloc(MYSQL_THD thd, size_t size); /** @see thd_alloc() */ void *thd_calloc(MYSQL_THD thd, size_t size); /** @see thd_alloc() */ char *thd_strdup(MYSQL_THD thd, const char *str); /** @see thd_alloc() */ char *thd_strmake(MYSQL_THD thd, const char *str, size_t size); /** @see thd_alloc() */ void *thd_memdup(MYSQL_THD thd, const void* str, size_t size); /** Create a LEX_STRING in this connection's local memory pool @param thd user thread connection handle @param lex_str pointer to LEX_STRING object to be initialized @param str initializer to be copied into lex_str @param size length of str, in bytes @param allocate_lex_string flag: if TRUE, allocate new LEX_STRING object, instead of using lex_str value @return NULL on failure, or pointer to the LEX_STRING object @see thd_alloc() */ MYSQL_CONST_LEX_STRING *thd_make_lex_string(MYSQL_THD thd, MYSQL_CONST_LEX_STRING *lex_str, const char *str, size_t size, int allocate_lex_string); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_ALLOC_INCLUDED #endif PKe[lservice_encryption.hnu[#ifndef MYSQL_SERVICE_ENCRYPTION_INCLUDED /* Copyright (c) 2015, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file encryption service Functions to support data encryption and encryption key management. They are normally implemented in an encryption plugin, so this service connects encryption *consumers* (e.g. storage engines) to the encryption *provider* (encryption plugin). */ #ifndef MYSQL_ABI_CHECK #include #ifdef _WIN32 #ifndef __cplusplus #define inline __inline #endif #endif #endif #ifdef __cplusplus extern "C" { #endif /* returned from encryption_key_get_latest_version() */ #define ENCRYPTION_KEY_VERSION_INVALID (~(unsigned int)0) #define ENCRYPTION_KEY_NOT_ENCRYPTED (0) #define ENCRYPTION_KEY_SYSTEM_DATA 1 #define ENCRYPTION_KEY_TEMPORARY_DATA 2 /* returned from encryption_key_get() */ #define ENCRYPTION_KEY_BUFFER_TOO_SMALL (100) #define ENCRYPTION_FLAG_DECRYPT 0 #define ENCRYPTION_FLAG_ENCRYPT 1 #define ENCRYPTION_FLAG_NOPAD 2 struct encryption_service_st { unsigned int (*encryption_key_get_latest_version_func)(unsigned int key_id); unsigned int (*encryption_key_get_func)(unsigned int key_id, unsigned int key_version, unsigned char* buffer, unsigned int* length); unsigned int (*encryption_ctx_size_func)(unsigned int key_id, unsigned int key_version); int (*encryption_ctx_init_func)(void *ctx, const unsigned char* key, unsigned int klen, const unsigned char* iv, unsigned int ivlen, int flags, unsigned int key_id, unsigned int key_version); int (*encryption_ctx_update_func)(void *ctx, const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen); int (*encryption_ctx_finish_func)(void *ctx, unsigned char* dst, unsigned int* dlen); unsigned int (*encryption_encrypted_length_func)(unsigned int slen, unsigned int key_id, unsigned int key_version); }; #ifdef MYSQL_DYNAMIC_PLUGIN extern struct encryption_service_st *encryption_service; #define encryption_key_get_latest_version(KI) encryption_service->encryption_key_get_latest_version_func(KI) #define encryption_key_get(KI,KV,K,S) encryption_service->encryption_key_get_func((KI),(KV),(K),(S)) #define encryption_ctx_size(KI,KV) encryption_service->encryption_ctx_size_func((KI),(KV)) #define encryption_ctx_init(CTX,K,KL,IV,IVL,F,KI,KV) encryption_service->encryption_ctx_init_func((CTX),(K),(KL),(IV),(IVL),(F),(KI),(KV)) #define encryption_ctx_update(CTX,S,SL,D,DL) encryption_service->encryption_ctx_update_func((CTX),(S),(SL),(D),(DL)) #define encryption_ctx_finish(CTX,D,DL) encryption_service->encryption_ctx_finish_func((CTX),(D),(DL)) #define encryption_encrypted_length(SL,KI,KV) encryption_service->encryption_encrypted_length_func((SL),(KI),(KV)) #else extern struct encryption_service_st encryption_handler; #define encryption_key_get_latest_version(KI) encryption_handler.encryption_key_get_latest_version_func(KI) #define encryption_key_get(KI,KV,K,S) encryption_handler.encryption_key_get_func((KI),(KV),(K),(S)) #define encryption_ctx_size(KI,KV) encryption_handler.encryption_ctx_size_func((KI),(KV)) #define encryption_ctx_init(CTX,K,KL,IV,IVL,F,KI,KV) encryption_handler.encryption_ctx_init_func((CTX),(K),(KL),(IV),(IVL),(F),(KI),(KV)) #define encryption_ctx_update(CTX,S,SL,D,DL) encryption_handler.encryption_ctx_update_func((CTX),(S),(SL),(D),(DL)) #define encryption_ctx_finish(CTX,D,DL) encryption_handler.encryption_ctx_finish_func((CTX),(D),(DL)) #define encryption_encrypted_length(SL,KI,KV) encryption_handler.encryption_encrypted_length_func((SL),(KI),(KV)) #endif static inline unsigned int encryption_key_id_exists(unsigned int id) { return encryption_key_get_latest_version(id) != ENCRYPTION_KEY_VERSION_INVALID; } static inline unsigned int encryption_key_version_exists(unsigned int id, unsigned int version) { unsigned int unused; return encryption_key_get(id, version, NULL, &unused) != ENCRYPTION_KEY_VERSION_INVALID; } static inline int encryption_crypt(const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen, const unsigned char* key, unsigned int klen, const unsigned char* iv, unsigned int ivlen, int flags, unsigned int key_id, unsigned int key_version) { void *ctx= alloca(encryption_ctx_size(key_id, key_version)); int res1, res2; unsigned int d1, d2; if ((res1= encryption_ctx_init(ctx, key, klen, iv, ivlen, flags, key_id, key_version))) return res1; res1= encryption_ctx_update(ctx, src, slen, dst, &d1); res2= encryption_ctx_finish(ctx, dst + d1, &d2); *dlen= d1 + d2; return res1 ? res1 : res2; } #ifdef __cplusplus } #endif #define MYSQL_SERVICE_ENCRYPTION_INCLUDED #endif PKe[wplugin_audit.hnu[/* Copyright (c) 2007, 2013, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifndef _my_audit_h #define _my_audit_h /************************************************************************* API for Audit plugin. (MYSQL_AUDIT_PLUGIN) */ #include "plugin.h" #ifdef __cplusplus extern "C" { #endif #define MYSQL_AUDIT_CLASS_MASK_SIZE 1 #define MYSQL_AUDIT_INTERFACE_VERSION 0x0302 /************************************************************************* AUDIT CLASS : GENERAL LOG events occurs before emitting to the general query log. ERROR events occur before transmitting errors to the user. RESULT events occur after transmitting a resultset to the user. STATUS events occur after transmitting a resultset or errors to the user. */ #define MYSQL_AUDIT_GENERAL_CLASS 0 #define MYSQL_AUDIT_GENERAL_CLASSMASK (1 << MYSQL_AUDIT_GENERAL_CLASS) #define MYSQL_AUDIT_GENERAL_LOG 0 #define MYSQL_AUDIT_GENERAL_ERROR 1 #define MYSQL_AUDIT_GENERAL_RESULT 2 #define MYSQL_AUDIT_GENERAL_STATUS 3 struct mysql_event_general { unsigned int event_subclass; int general_error_code; unsigned long general_thread_id; const char *general_user; unsigned int general_user_length; const char *general_command; unsigned int general_command_length; const char *general_query; unsigned int general_query_length; const struct charset_info_st *general_charset; unsigned long long general_time; unsigned long long general_rows; /* Added in version 0x302 */ unsigned long long query_id; MYSQL_CONST_LEX_STRING database; }; /* AUDIT CLASS : CONNECTION CONNECT occurs after authentication phase is completed. DISCONNECT occurs after connection is terminated. CHANGE_USER occurs after COM_CHANGE_USER RPC is completed. */ #define MYSQL_AUDIT_CONNECTION_CLASS 1 #define MYSQL_AUDIT_CONNECTION_CLASSMASK (1 << MYSQL_AUDIT_CONNECTION_CLASS) #define MYSQL_AUDIT_CONNECTION_CONNECT 0 #define MYSQL_AUDIT_CONNECTION_DISCONNECT 1 #define MYSQL_AUDIT_CONNECTION_CHANGE_USER 2 struct mysql_event_connection { unsigned int event_subclass; int status; unsigned long thread_id; const char *user; unsigned int user_length; const char *priv_user; unsigned int priv_user_length; const char *external_user; unsigned int external_user_length; const char *proxy_user; unsigned int proxy_user_length; const char *host; unsigned int host_length; const char *ip; unsigned int ip_length; MYSQL_CONST_LEX_STRING database; }; /* AUDIT CLASS : TABLE LOCK occurs when a connection "locks" (this does not necessarily mean a table lock and also happens for row-locking engines) the table at the beginning of a statement. This event is generated at the beginning of every statement for every affected table, unless there's a LOCK TABLES statement in effect (in which case it is generated once for LOCK TABLES and then is suppressed until the tables are unlocked). CREATE/DROP/RENAME occur when a table is created, dropped, or renamed. */ #define MYSQL_AUDIT_TABLE_CLASS 15 #define MYSQL_AUDIT_TABLE_CLASSMASK (1 << MYSQL_AUDIT_TABLE_CLASS) #define MYSQL_AUDIT_TABLE_LOCK 0 #define MYSQL_AUDIT_TABLE_CREATE 1 #define MYSQL_AUDIT_TABLE_DROP 2 #define MYSQL_AUDIT_TABLE_RENAME 3 #define MYSQL_AUDIT_TABLE_ALTER 4 struct mysql_event_table { unsigned int event_subclass; unsigned long thread_id; const char *user; const char *priv_user; const char *priv_host; const char *external_user; const char *proxy_user; const char *host; const char *ip; MYSQL_CONST_LEX_STRING database; MYSQL_CONST_LEX_STRING table; /* for MYSQL_AUDIT_TABLE_RENAME */ MYSQL_CONST_LEX_STRING new_database; MYSQL_CONST_LEX_STRING new_table; /* for MYSQL_AUDIT_TABLE_LOCK, true if read-only, false if read/write */ int read_only; /* Added in version 0x302 */ unsigned long long query_id; }; /************************************************************************* Here we define the descriptor structure, that is referred from st_mysql_plugin. release_thd() event occurs when the event class consumer is to be disassociated from the specified THD. This would typically occur before some operation which may require sleeping - such as when waiting for the next query from the client. event_notify() is invoked whenever an event occurs which is of any class for which the plugin has interest. The second argument indicates the specific event class and the third argument is data as required for that class. class_mask is an array of bits used to indicate what event classes that this plugin wants to receive. */ struct st_mysql_audit { int interface_version; void (*release_thd)(MYSQL_THD); void (*event_notify)(MYSQL_THD, unsigned int, const void *); unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE]; }; #ifdef __cplusplus } #endif #endif PKe[ service_print_check_msg.hnu[/* Copyright (c) 2019, MariaDB Corporation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #pragma once /** @file include/mysql/service_print_check_msg.h This service provides functions to write messages for check or repair */ #ifdef __cplusplus extern "C" { #endif extern struct print_check_msg_service_st { void (*print_check_msg)(MYSQL_THD, const char *db_name, const char *table_name, const char *op, const char *msg_type, const char *message, my_bool print_to_log); } *print_check_msg_service; #ifdef MYSQL_DYNAMIC_PLUGIN # define print_check_msg_context(_THD) print_check_msg_service->print_check_msg #else extern void print_check_msg(MYSQL_THD, const char *db_name, const char *table_name, const char *op, const char *msg_type, const char *message, my_bool print_to_log); #endif #ifdef __cplusplus } #endif PKe[FRplugin_auth_common.hnu[#ifndef MYSQL_PLUGIN_AUTH_COMMON_INCLUDED /* Copyright (C) 2010 Sergei Golubchik and Monty Program Ab Copyright (c) 2010, Oracle and/or its affiliates. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ #ifdef _WIN32 #include #endif /** @file This file defines constants and data structures that are the same for both client- and server-side authentication plugins. */ #define MYSQL_PLUGIN_AUTH_COMMON_INCLUDED /** the max allowed length for a user name */ #define MYSQL_USERNAME_LENGTH 512 /** return values of the plugin authenticate_user() method. */ /** Authentication failed, plugin internal error. An error occurred in the authentication plugin itself. These errors are reported in table performance_schema.host_cache, column COUNT_AUTH_PLUGIN_ERRORS. */ #define CR_AUTH_PLUGIN_ERROR 3 /** Authentication failed, client server handshake. An error occurred during the client server handshake. These errors are reported in table performance_schema.host_cache, column COUNT_HANDSHAKE_ERRORS. */ #define CR_AUTH_HANDSHAKE 2 /** Authentication failed, user credentials. For example, wrong passwords. These errors are reported in table performance_schema.host_cache, column COUNT_AUTHENTICATION_ERRORS. */ #define CR_AUTH_USER_CREDENTIALS 1 /** Authentication failed. Additionally, all other CR_xxx values (libmysql error code) can be used too. The client plugin may set the error code and the error message directly in the MYSQL structure and return CR_ERROR. If a CR_xxx specific error code was returned, an error message in the MYSQL structure will be overwritten. If CR_ERROR is returned without setting the error in MYSQL, CR_UNKNOWN_ERROR will be user. */ #define CR_ERROR 0 /** Authentication (client part) was successful. It does not mean that the authentication as a whole was successful, usually it only means that the client was able to send the user name and the password to the server. If CR_OK is returned, the libmysql reads the next packet expecting it to be one of OK, ERROR, or CHANGE_PLUGIN packets. */ #define CR_OK -1 /** Authentication was successful. It means that the client has done its part successfully and also that a plugin has read the last packet (one of OK, ERROR, CHANGE_PLUGIN). In this case, libmysql will not read a packet from the server, but it will use the data at mysql->net.read_pos. A plugin may return this value if the number of roundtrips in the authentication protocol is not known in advance, and the client plugin needs to read one packet more to determine if the authentication is finished or not. */ #define CR_OK_HANDSHAKE_COMPLETE -2 typedef struct st_plugin_vio_info { enum { MYSQL_VIO_INVALID, MYSQL_VIO_TCP, MYSQL_VIO_SOCKET, MYSQL_VIO_PIPE, MYSQL_VIO_MEMORY } protocol; int socket; /**< it's set, if the protocol is SOCKET or TCP */ #ifdef _WIN32 HANDLE handle; /**< it's set, if the protocol is PIPE or MEMORY */ #endif } MYSQL_PLUGIN_VIO_INFO; /** Provides plugin access to communication channel */ typedef struct st_plugin_vio { /** Plugin provides a pointer reference and this function sets it to the contents of any incoming packet. Returns the packet length, or -1 if the plugin should terminate. */ int (*read_packet)(struct st_plugin_vio *vio, unsigned char **buf); /** Plugin provides a buffer with data and the length and this function sends it as a packet. Returns 0 on success, 1 on failure. */ int (*write_packet)(struct st_plugin_vio *vio, const unsigned char *packet, int packet_len); /** Fills in a st_plugin_vio_info structure, providing the information about the connection. */ void (*info)(struct st_plugin_vio *vio, struct st_plugin_vio_info *info); } MYSQL_PLUGIN_VIO; #endif PKe[5>service_my_snprintf.hnu[#ifndef MYSQL_SERVICE_MY_SNPRINTF_INCLUDED /* Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file my_snprintf service Portable and limited vsnprintf() implementation. This is a portable, limited vsnprintf() implementation, with some extra features. "Portable" means that it'll produce identical result on all platforms (for example, on Windows and Linux system printf %e formats the exponent differently, on different systems %p either prints leading 0x or not, %s may accept null pointer or crash on it). "Limited" means that it does not support all the C89 features. But it supports few extensions, not in any standard. my_vsnprintf(to, n, fmt, ap) @param[out] to A buffer to store the result in @param[in] n Store up to n-1 characters, followed by an end 0 @param[in] fmt printf-like format string @param[in] ap Arguments @return a number of bytes written to a buffer *excluding* terminating '\0' @post The syntax of a format string is generally the same: % where everything but the format is optional. Three one-character flags are recognized: '0' has the standard zero-padding semantics; '-' is parsed, but silently ignored; '`' (backtick) is only supported for strings (%s) and means that the string will be quoted according to MySQL identifier quoting rules. Both and can be specified as numbers or '*'. If an asterisk is used, an argument of type int is consumed. can be 'l', 'll', or 'z'. Supported formats are 's' (null pointer is accepted, printed as "(null)"), 'b' (extension, see below), 'c', 'd', 'i', 'u', 'x', 'o', 'X', 'p' (works as 0x%x), 'f', 'g', 'M' (extension, see below), 'T' (extension, see below). Standard syntax for positional arguments $n is supported. Extensions: Flag '`' (backtick): see above. Format 'b': binary buffer, prints exactly bytes from the argument, without stopping at '\0'. Format 'M': takes one integer, prints this integer, space, double quote error message, double quote. In other words printf("%M", n) === printf("%d \"%s\"", n, strerror(n)) Format 'T': takes string and print it like s but if the strints should be truncated puts "..." at the end. */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #include #endif extern struct my_snprintf_service_st { size_t (*my_snprintf_type)(char*, size_t, const char*, ...); size_t (*my_vsnprintf_type)(char *, size_t, const char*, va_list); } *my_snprintf_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_vsnprintf my_snprintf_service->my_vsnprintf_type #define my_snprintf my_snprintf_service->my_snprintf_type #else size_t my_snprintf(char* to, size_t n, const char* fmt, ...); size_t my_vsnprintf(char *to, size_t n, const char* fmt, va_list ap); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_MY_SNPRINTF_INCLUDED #endif PKe[u?rrservice_sha1.hnu[#ifndef MYSQL_SERVICE_SHA1_INCLUDED /* Copyright (c) 2013, 2014, Monty Program Ab This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file my sha1 service Functions to calculate SHA1 hash from a memory buffer */ #ifdef __cplusplus extern "C" { #endif #ifndef MYSQL_ABI_CHECK #include #endif #define MY_SHA1_HASH_SIZE 20 /* Hash size in bytes */ extern struct my_sha1_service_st { void (*my_sha1_type)(unsigned char*, const char*, size_t); void (*my_sha1_multi_type)(unsigned char*, ...); size_t (*my_sha1_context_size_type)(); void (*my_sha1_init_type)(void *); void (*my_sha1_input_type)(void *, const unsigned char *, size_t); void (*my_sha1_result_type)(void *, unsigned char *); } *my_sha1_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_sha1(A,B,C) my_sha1_service->my_sha1_type(A,B,C) #define my_sha1_multi my_sha1_service->my_sha1_multi_type #define my_sha1_context_size() my_sha1_service->my_sha1_context_size_type() #define my_sha1_init(A) my_sha1_service->my_sha1_init_type(A) #define my_sha1_input(A,B,C) my_sha1_service->my_sha1_input_type(A,B,C) #define my_sha1_result(A,B) my_sha1_service->my_sha1_result_type(A,B) #else void my_sha1(unsigned char*, const char*, size_t); void my_sha1_multi(unsigned char*, ...); size_t my_sha1_context_size(); void my_sha1_init(void *context); void my_sha1_input(void *context, const unsigned char *buf, size_t len); void my_sha1_result(void *context, unsigned char *digest); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_SHA1_INCLUDED #endif PKe[<"service_encryption_scheme.hnu[#ifndef MYSQL_SERVICE_ENCRYPTION_SCHEME_INCLUDED /* Copyright (c) 2015, MariaDB This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file encryption scheme service A higher-level access to encryption service. This is a helper service that storage engines use to encrypt tables on disk. It requests keys from the plugin, generates temporary or local keys from the global (as returned by the plugin) keys, etc. To use the service: * st_encryption_scheme object is created per space. A "space" can be a table space in XtraDB/InnoDB, a file in Aria, etc. The whole space is encrypted with the one key id. * The service does not take the key and the IV as parameters for encryption or decryption. Instead it takes two 32-bit integers and one 64-bit integer (and requests the key from an encryption plugin, if needed). * The service requests the global key from the encryption plugin automatically as needed. Three last keys are cached in the st_encryption_scheme. Number of key requests (number of cache misses) are counted in st_encryption_scheme::keyserver_requests * If an st_encryption_scheme can be used concurrently by different threads, it needs to be able to lock itself when accessing the key cache. Set the st_encryption_scheme::locker appropriately. If non-zero, it will be invoked by encrypt/decrypt functions to lock and unlock the scheme when needed. * Implementation details (in particular, key derivation) are defined by the scheme type. Currently only schema type 1 is supported. In the schema type 1, every "space" (table space in XtraDB/InnoDB, file in Aria) is encrypted with a different space-local key: * Every space has a 16-byte unique identifier (typically it's generated randomly and stored in the space). The caller should put it into st_encryption_scheme::iv. * Space-local key is generated by encrypting this identifier with the global encryption key (of the given id and version) using AES_ECB. * Encryption/decryption parameters for a page are typically the 4-byte space id, 4-byte page position (offset, page number, etc), and the 8-byte LSN. This guarantees that they'll be different for any two pages (of the same or different tablespaces) and also that they'll change for the same page when it's modified. They don't need to be secret (they create the IV, not the encryption key). */ #ifdef __cplusplus extern "C" { #endif #define ENCRYPTION_SCHEME_KEY_INVALID -1 #define ENCRYPTION_SCHEME_BLOCK_LENGTH 16 struct st_encryption_scheme_key { unsigned int version; unsigned char key[ENCRYPTION_SCHEME_BLOCK_LENGTH]; }; struct st_encryption_scheme { unsigned char iv[ENCRYPTION_SCHEME_BLOCK_LENGTH]; struct st_encryption_scheme_key key[3]; unsigned int keyserver_requests; unsigned int key_id; unsigned int type; void (*locker)(struct st_encryption_scheme *self, int release); }; extern struct encryption_scheme_service_st { int (*encryption_scheme_encrypt_func) (const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen, struct st_encryption_scheme *scheme, unsigned int key_version, unsigned int i32_1, unsigned int i32_2, unsigned long long i64); int (*encryption_scheme_decrypt_func) (const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen, struct st_encryption_scheme *scheme, unsigned int key_version, unsigned int i32_1, unsigned int i32_2, unsigned long long i64); } *encryption_scheme_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define encryption_scheme_encrypt(S,SL,D,DL,SCH,KV,I32,J32,I64) encryption_scheme_service->encryption_scheme_encrypt_func(S,SL,D,DL,SCH,KV,I32,J32,I64) #define encryption_scheme_decrypt(S,SL,D,DL,SCH,KV,I32,J32,I64) encryption_scheme_service->encryption_scheme_decrypt_func(S,SL,D,DL,SCH,KV,I32,J32,I64) #else int encryption_scheme_encrypt(const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen, struct st_encryption_scheme *scheme, unsigned int key_version, unsigned int i32_1, unsigned int i32_2, unsigned long long i64); int encryption_scheme_decrypt(const unsigned char* src, unsigned int slen, unsigned char* dst, unsigned int* dlen, struct st_encryption_scheme *scheme, unsigned int key_version, unsigned int i32_1, unsigned int i32_2, unsigned long long i64); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_ENCRYPTION_SCHEME_INCLUDED #endif PKe[?service_json.hnu[/* Copyright (C) 2018 MariaDB Corporation This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #ifndef MYSQL_SERVICE_JSON #define MYSQL_SERVICE_JSON /** @file json service Exports JSON parsing methods for plugins to use. Functions of the service: json_type - returns the type of the JSON argument, and the parsed value if it's scalar (not object or array) json_get_array_item - expects JSON array as an argument, and returns the type of the element at index `n_item`. Returns JSV_NOTHING type if the array is shorter than n_item and the actual length of the array in value_len. If successful, then `value` up till `value[value_len]` contains the array element at the desired index (n_item). json_get_object_key - expects JSON object as an argument, searches for a key in the object, return it's type and stores its value in `value`. JSV_NOTHING if no such key found, the number of keys in v_len. json_get_object_nkey - expects JSON object as an argument. finds n_key's key in the object, returns it's name, type and value. JSV_NOTHING if object has less keys than n_key. */ #ifdef __cplusplus extern "C" { #endif enum json_types { JSV_BAD_JSON=-1, JSV_NOTHING=0, JSV_OBJECT=1, JSV_ARRAY=2, JSV_STRING=3, JSV_NUMBER=4, JSV_TRUE=5, JSV_FALSE=6, JSV_NULL=7 }; extern struct json_service_st { enum json_types (*json_type)(const char *js, const char *js_end, const char **value, int *value_len); enum json_types (*json_get_array_item)(const char *js, const char *js_end, int n_item, const char **value, int *value_len); enum json_types (*json_get_object_key)(const char *js, const char *js_end, const char *key, const char **value, int *value_len); enum json_types (*json_get_object_nkey)(const char *js,const char *js_end, int nkey, const char **keyname, const char **keyname_end, const char **value, int *value_len); int (*json_escape_string)(const char *str,const char *str_end, char *json, char *json_end); int (*json_unescape_json)(const char *json_str, const char *json_end, char *res, char *res_end); } *json_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define json_type json_service->json_type #define json_get_array_item json_service->json_get_array_item #define json_get_object_key json_service->json_get_object_key #define json_get_object_nkey json_service->json_get_object_nkey #define json_escape_string json_service->json_escape_string #define json_unescape_json json_service->json_unescape_json #else enum json_types json_type(const char *js, const char *js_end, const char **value, int *value_len); enum json_types json_get_array_item(const char *js, const char *js_end, int n_item, const char **value, int *value_len); enum json_types json_get_object_key(const char *js, const char *js_end, const char *key, const char **value, int *value_len); enum json_types json_get_object_nkey(const char *js,const char *js_end, int nkey, const char **keyname, const char **keyname_end, const char **value, int *value_len); int json_escape_string(const char *str,const char *str_end, char *json, char *json_end); int json_unescape_json(const char *json_str, const char *json_end, char *res, char *res_end); #endif /*MYSQL_DYNAMIC_PLUGIN*/ #ifdef __cplusplus } #endif #endif /*MYSQL_SERVICE_JSON */ PKe[d ffservice_thd_specifics.hnu[#ifndef MYSQL_SERVICE_THD_SPECIFICS_INCLUDED /* Copyright (c) 2009, 2010, Oracle and/or its affiliates. All rights reserved. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file THD specific for plugin(s) This API provides pthread_getspecific like functionality to plugin authors. This is a functional alternative to the declarative MYSQL_THDVAR A plugin should at init call thd_key_create that create a key that will have storage in each THD. The key should be used by all threads and can be used concurrently from all threads. A plugin should at deinit call thd_key_delete. Alternatively, a plugin can use thd_key_create_from_var(K,V) to create a key that corresponds to a named MYSQL_THDVAR variable. This API is also safe when using pool-of-threads in which case pthread_getspecific is not, because the actual OS thread may change. @note Normally one should prefer MYSQL_THDVAR declarative API. The benefits are: - It supports typed variables (int, char*, enum, etc), not only void*. - The memory allocated for MYSQL_THDVAR is free'd automatically (if PLUGIN_VAR_MEMALLOC is specified). - Continuous loading and unloading of the same plugin does not allocate memory for same variables over and over again. An example of using MYSQL_THDVAR for a thd local storage: MYSQL_THDVAR_STR(my_tls, PLUGIN_VAR_MEMALLOC | PLUGIN_VAR_NOSYSVAR | PLUGIN_VAR_NOCMDOPT, "thd local storage example", 0, 0, 0); */ #ifdef __cplusplus extern "C" { #endif typedef int MYSQL_THD_KEY_T; extern struct thd_specifics_service_st { int (*thd_key_create_func)(MYSQL_THD_KEY_T *key); void (*thd_key_delete_func)(MYSQL_THD_KEY_T *key); void *(*thd_getspecific_func)(MYSQL_THD thd, MYSQL_THD_KEY_T key); int (*thd_setspecific_func)(MYSQL_THD thd, MYSQL_THD_KEY_T key, void *value); } *thd_specifics_service; #define thd_key_create_from_var(K, V) do { *(K)= MYSQL_SYSVAR_NAME(V).offset; } while(0) #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_key_create(K) (thd_specifics_service->thd_key_create_func(K)) #define thd_key_delete(K) (thd_specifics_service->thd_key_delete_func(K)) #define thd_getspecific(T, K) (thd_specifics_service->thd_getspecific_func(T, K)) #define thd_setspecific(T, K, V) (thd_specifics_service->thd_setspecific_func(T, K, V)) #else /** * create THD specific storage * @return 0 on success * else errno is returned */ int thd_key_create(MYSQL_THD_KEY_T *key); /** * delete THD specific storage */ void thd_key_delete(MYSQL_THD_KEY_T *key); /** * get/set thd specific storage * - first time this is called from a thread it will return 0 * - this call is thread-safe in that different threads may call this * simultaneously if operating on different THDs. * - this call acquires no mutexes and is implemented as an array lookup */ void* thd_getspecific(MYSQL_THD thd, MYSQL_THD_KEY_T key); int thd_setspecific(MYSQL_THD thd, MYSQL_THD_KEY_T key, void *value); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_SPECIFICS_INCLUDED #endif PKe[2b #endif /* Allow multiple chunks 'AAA= AA== AA==', binlog uses this */ #define MY_BASE64_DECODE_ALLOW_MULTIPLE_CHUNKS 1 extern struct base64_service_st { int (*base64_needed_encoded_length_ptr)(int length_of_data); int (*base64_encode_max_arg_length_ptr)(void); int (*base64_needed_decoded_length_ptr)(int length_of_encoded_data); int (*base64_decode_max_arg_length_ptr)(); int (*base64_encode_ptr)(const void *src, size_t src_len, char *dst); int (*base64_decode_ptr)(const char *src, size_t src_len, void *dst, const char **end_ptr, int flags); } *base64_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define my_base64_needed_encoded_length(A) base64_service->base64_needed_encoded_length_ptr(A) #define my_base64_encode_max_arg_length() base64_service->base64_encode_max_arg_length_ptr() #define my_base64_needed_decoded_length(A) base64_service->base64_needed_decoded_length_ptr(A) #define my_base64_decode_max_arg_length() base64_service->base64_decode_max_arg_length_ptr() #define my_base64_encode(A,B,C) base64_service->base64_encode_ptr(A,B,C) #define my_base64_decode(A,B,C,D,E) base64_service->base64_decode_ptr(A,B,C,D,E) #else /* Calculate how much memory needed for dst of my_base64_encode() */ int my_base64_needed_encoded_length(int length_of_data); /* Maximum length my_base64_encode_needed_length() can accept with no overflow. */ int my_base64_encode_max_arg_length(void); /* Calculate how much memory needed for dst of my_base64_decode() */ int my_base64_needed_decoded_length(int length_of_encoded_data); /* Maximum length my_base64_decode_needed_length() can accept with no overflow. */ int my_base64_decode_max_arg_length(); /* Encode data as a my_base64 string */ int my_base64_encode(const void *src, size_t src_len, char *dst); /* Decode a my_base64 string into data */ int my_base64_decode(const char *src, size_t src_len, void *dst, const char **end_ptr, int flags); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_BASE64_INCLUDED #endif PKe[ע service_thd_autoinc.hnu[#ifndef MYSQL_SERVICE_THD_AUTOINC_INCLUDED /* Copyright (C) 2013 MariaDB Foundation. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; version 2 of the License. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */ /** @file This service provides access to the auto_increment related system variables: @@auto_increment_offset @@auto_increment_increment */ #ifdef __cplusplus extern "C" { #endif extern struct thd_autoinc_service_st { void (*thd_get_autoinc_func)(const MYSQL_THD thd, unsigned long* off, unsigned long* inc); } *thd_autoinc_service; #ifdef MYSQL_DYNAMIC_PLUGIN #define thd_get_autoinc(thd, off, inc) \ (thd_autoinc_service->thd_get_autoinc_func((thd), (off), (inc))) #else /** Return autoincrement system variables @param IN thd user thread connection handle @param OUT off the value of @@SESSION.auto_increment_offset @param OUT inc the value of @@SESSION.auto_increment_increment */ void thd_get_autoinc(const MYSQL_THD thd, unsigned long* off, unsigned long* inc); #endif #ifdef __cplusplus } #endif #define MYSQL_SERVICE_THD_AUTOINC_INCLUDED #endif PKAh[( ]jmaria_add_gis_sp_bootstrap.sqlnu[-- Copyright (C) 2014 MariaDB Ab. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 of the License. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA # This part creates stored procedures required by the OpenGIS standards. # script is prepared to be run with the --bootstrap server option SET sql_mode=''; DROP PROCEDURE IF EXISTS AddGeometryColumn; DROP PROCEDURE IF EXISTS DropGeometryColumn; CREATE DEFINER=`mariadb.sys`@`localhost` PROCEDURE AddGeometryColumn(catalog varchar(64), t_schema varchar(64), t_name varchar(64), geometry_column varchar(64), t_srid int) SQL SECURITY INVOKER begin set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' ADD ', geometry_column,' GEOMETRY REF_SYSTEM_ID=', t_srid); PREPARE ls from @qwe; execute ls; deallocate prepare ls; end ; CREATE DEFINER=`mariadb.sys`@`localhost` PROCEDURE DropGeometryColumn(catalog varchar(64), t_schema varchar(64), t_name varchar(64), geometry_column varchar(64)) SQL SECURITY INVOKER begin set @qwe= concat('ALTER TABLE ', t_schema, '.', t_name, ' DROP ', geometry_column); PREPARE ls from @qwe; execute ls; deallocate prepare ls; end ; PKAh[,jjspanish/errmsg.sysnu[`o =8,6FIHV-243/9:57FP9,7<;(,2G,9FG'Up]="EA'$,$/&F?:&$->%!'+&KJM4Slw,&%=]V^p'7 T7-`1.1VQ4-%">3&)#P+*EF&38 G7(tL{?5T$wVC_dC%oAa-S8? .4D8H:@=_':|ELq(2Dt33C!#%%h,B%**Ic(Hb[bp_yHM:IF[cf8dn7:ZZ.?&EYE-D]TY3I4@#2be)<=/2A71(&25Er=A  {#6H`941P9SX>_)^K_')y?&%P3pi:,8S%.1P*K,= #,`/.8J$"-*&?-7N6$CLMEWZO&'O2<@`e_J;A: 1Z68&H=[8@81:7?(T<<8O4@6:]R8(;hMjLb9>;LR1;L.l?V+cS@NRV`4qarRK!6';2ZY`EE[[GV|a&_6O4:6A1>O:X:&<fWhVHRZUXq8L4/@UIOJ\@Ac77Y3F(*B?cmAP,-7'0^II>&#/.<^fHFK!0([* +/%,U]h5}f.M/4 nu C2*>/KD-JbLBFF3ND=47.:0:F6GI9-8k155dp45#4HG@h9@ADr  .ID=65::'K19-h`2<4/J_MC_nqlDF3:B$n`cHGM*<buDL(F(FFWNc{?d?AA3W/qEQq@JCF5*3iZB iK0D?Ki9A J~jEXQwCnU.#)XVZAAKL H':OH;KKtG.&(/t9HQD?rvP)w'^qkP]oq$!M6Cd&(6-,KB'?]]FB);*/u-;S|\Yfpg&j+IA>IS580H/89:C>iwm^I]`17I@,6DxJ%I_y2)#%"!$Ph4+@C47'*2=3RL1%C<>ET5_\*\17xH)#F`S|3=K552-Qifp2>**611(9*:3=c;T9a+?24CJ7@cKSHPH0@Y.<+<-8529K(`UG3DU=SW<RpE_:LIT2Nc);PY]W.2V;D=S<CC:8P:6+ME,4$!yPN'NR7G;R\c(:CBE2m#G0tj+:;*-7Jf74NJ.*2r?TST*ED:R$o~-F5F)-M>jL$![{-xYKIA-.{226/W\FXhashchkisamchkNOSÍNo puedo crear el fichero/archivo '%-.200s' (Error: %M)No puedo crear la tabla %`s.%`s (Error: %M)No puedo crear la base de datos '%-.192s' (Error: %M)No puedo crear la base de datos '%-.192s'; la base de datos ya existeNo puedo eliminar la base de datos '%-.192s'; la base de datos no existeError eliminando la base de datos (no puedo borrar '%-.192s', error %M)Error eliminando la base de datos (No puedo borrar el directorio '%-.192s', error %M)Error en el borrado de '%-.192s' (Error: %M)No puedo leer el registro en la tabla del sistemaNo puedo obtener el estado de '%-.200s' (Error: %M)No puedo obtener directorio de trabajo (Error: %M)No puedo bloquear fichero/archivo: (Error: %M)No puedo abrir el fichero/archivo: '%-.200s' (Error: %M)No puedo hallar el fichero/archivo: '%-.200s' (Error: %M)No puedo leer el directorio de '%-.192s' (Error: %M)No puedo cambiar al directorio a '%-.192s' (Error: %M)El registro ha cambiado desde la ultima lectura de la tabla '%-.192s'Disco lleno (%s). Esperando a que alguien libere algo de espacio... (Error: %M)No puedo escribir, clave duplicada en la tabla '%-.192s'Error en el cierre de '%-.192s' (Error: %M)Error leyendo el fichero/archivo '%-.200s' (Error: %M)Error en el renombrado de '%-.210s' a '%-.210s' (Error: %M)Error escribiendo el fichero/archivo '%-.200s' (Error: %M)'%-.192s' esta bloqueado contra cambiosOrdenación canceladaLa vista '%-.192s' no existe para '%-.192s'Obtenido error %M desde el motor de almacenaje %sEl motor de almacenaje %s de la tabla %`s.%`s no contiene esta opciónNo puedo encontrar el registro en '%-.192s'Información incorrecta en el fichero/archivo: '%-.200s'El índice para la tabla: '%-.200s' está corrupto; intente repararloClave antigua de fichero/archivo para la tabla '%-.192s'; ¡repárela!La tabla '%-.192s' es de sólo lecturaMemoria insuficiente. Reinicie el servidor e inténtelo otra vez (necesita %d bytes)Memoria de ordenación insuficiente. Considere el incrementar el tamaño del búfer de ordenación del servidorInesperado fin de fichero/archivo mientras leíamos el fichero/archivo '%-.192s' (Error: %M)Demasiadas conexionesMemoria agotadaNo puedo obtener el nombre de equipo de la dirección de vd.Mal apretón de manos (handshake)Acceso denegado para usuario: '%s'@'%s' a la base de datos '%-.192s'Acceso denegado para usuario: '%s'@'%s' (Usando contraseña: %s)Base de datos no seleccionadaComando desconocidoLa columna '%-.192s' no puede ser nulaBase de datos '%-.192s' desconocidaLa tabla '%-.192s' ya existeTabla '%-.100T' no reconocidaLa columna: '%-.192s' en %-.192s es ambiguaDesconexión de servidor en procesoNo se reconoce la columna '%-.192s' en %-.192s'%-.192s' no se encuentra en GROUP BYNo puedo agrupar por '%-.192s'La sentencia tiene funciones de suma y columnas en la misma sentenciaEl contador de columnas no coincide con el contador de valoresEl nombre del identificador '%-.100T' es demasiado grandeNombre duplicado de columna '%-.192s'Nombre duplicado de clave '%-.192s'Entrada duplicada '%-.192T' para la clave %dEspecificador de columna incorrecto para la columna '%-.192s'%s cerca de '%-.80T' en la línea %dLa consulta (query) estaba vaciaLa tabla/alias: '%-.192s' no es únicaValor por defecto inválido para '%-.192s'Múltiples claves primarias definidasDemasiadas claves primarias declaradas. Se permite un máximo de %d clavesDemasiadas partes de clave declaradas. Se permite un máximo de %d partesDeclaración de clave demasiado larga. La máxima longitud de clave es de %dLa columna de clave '%-.192s' no existe en la tablaLa columna BLOB %`s no se puede usar en la especificación de clave en la tabla %sLongitud de columna demasiado grande para la columna '%-.192s' (máximo = %lu). Use BLOB o TEXT en su lugarDefinición incorrecta de tabla; sólo puede haber una columna automática y ésta debe de ser definida como una claveNo pude borrar el dominio gtid. Motivo: %s.%s (iniciado por: %s): Apagado normal%s: Obtenida señal %d. ¡Abortando!%s: Apagado completado%s: Forzando a cerrar el hilo (thread) %ld usuario: '%-.48s'No puedo crear IP socketLa tabla '%-.192s' no tiene un índice como el usado en CREATE INDEX. Crea de nuevo la tablaLos separadores de argumentos del campo no son los especificados. Compruebe el manualNo se pueden usar longitudes fijas de filas con BLOBs. Por favor, use 'campos terminados por'El fichero/archivo '%-.128s' debe de estar en el directorio de la base de datos o debe de ser legible por todosEl fichero/archivo '%-.200s' ya existeRegistros: %ld Borrados: %ld Saltados: %ld Avisos: %ldRegistros: %ld Duplicados: %ldPrefijo incorrecto de clave; la parte utilizada de la clave no es una cadena, la longitud usada es mayor que la parte de la clave o el motor de almacenaje no soporta claves con prefijo únicoNo se pueden borrar todas las columnas con ALTER TABLE. Use DROP TABLE para hacerloNo puedo eliminar %s %`-.192s; compruebe que ya existeRegistros: %ld Duplicados: %ld Avisos: %ldTable '%-.192s' is specified twice, both as a target for '%s' and as a separate source for dataIdentificador del hilo (thread): %lu desconocidoNo eres el propietario del hilo (thread) %lldNo se están usando tablasDemasiadas cadenas para la columna %-.192s y SETNo puedo generar un único fichero/archivo de historial (log) llamado %-.200s.(1-999)La tabla '%-.192s' ha sido bloqueada con un READ lock y no puede ser actualizadaLa tabla '%-.192s' no fue bloqueada con LOCK TABLESNunca debería vd de ver estoNombre incorrecto de base de datos '%-.100T'Nombre incorrecto de tabla '%-.100s'El SELECT debería de examinar más de MAX_JOIN_SIZE filas; revise su WHERE y utilice SET SQL_BIG_SELECTS=1 o SET MAX_JOIN_SIZE=# si el SELECT está okError desconocidoProcedimiento desconocido %-.192sContador de parámetros incorrecto para procedimiento %-.192sParámetros incorrectos para procedimiento %-.192sTabla desconocida '%-.192s' en %-.32sColumna '%-.192s' especificada dos vecesInválido uso de función de grupoLa tabla '%-.192s' usa una extensión que no existe en esta versión de MariaDBUna tabla debe de tener al menos 1 columnaLa tabla '%-.192s' está llenaJuego desconocido de caracteres: '%-.64s'Demasiadas tablas. MariaDB solamente puede usar %d tablas en un joinDemasiadas columnasTamaño de fila muy grande. El máximo tamaño de fila para el tipo de tabla usada, sin contar BLOBs, es de %ld. Esto incluye sobrecarga de almacenaje, revise el manual. Tiene que cambiar algunas columnas a TEXT o BLOBsDesbordamiento de la pila de hilos (threads): Usado: %ld de una pila de %ld. Considere el incrementar la variable de sistema thread_stackDependencia cruzada hallada en OUTER JOIN. Examina tus condiciones ONEl manejador de tabla no soporta NULL en índice suministrado. Por favor, cambie la columna '%-.192s' para que sea NOT NULL o utilice otro manejadorNo puedo cargar la función '%-.192s'No puedo inicializar la función '%-.192s'; %-.80sNo existen rutas autorizadas para biblioteca compartidaLa función '%-.192s' ya existeNo puedo abrir la biblioteca compartida '%-.192s' (error: %d, %-.128s)No puedo encontrar el símbolo '%-.128s' en bibliotecaLa función '%-.192s' no está definidaEl equipo '%-.64s' está bloqueado debido a muchos errores de conexión; desbloquea con 'mariadb-admin flush-hosts'El equipo '%-.64s' no está autorizado a conectar con este servidor MariaDBEstá usando MariaDB como un usuario anónimo y lo usuarios anónimos no tienen permiso para cambiar las propiedades de usuarioVd debe de tener privilegios para actualizar tablas en la base de datos mysql para poder cambiar las contraseñas de otrosNo puedo encontrar una fila coincidente en la tabla de usuarioLíneas coincidentes: %ld Cambiadas: %ld Avisos: %ldNo puedo crear un nuevo hilo (thread) (error %M). Si no está falto de memoria disponible, vd puede consultar el manual para un posible error dependiente del SOEl número de columnas no se corresponde con el número de valores en la línea %luNo puedo reabrir la tabla: '%-.192sUso inválido del valor NULLObtenido error '%s' de regexpLa mezcla de columnas GROUP (MIN(),MAX(),COUNT()...) con columnas no GROUP es ilegal si no exite la cláusula GROUP BYNo existe tal concesión (grant) definida para usuario '%-.48s' en el equipo '%-.64s'%-.100T comando denegado a usuario '%s'@'%s' para la tabla %`s.%`s%-.32s comando denegado a el usuario '%s'@'%s' para la columna '%-.192s' en la tabla '%-.192s'Comando GRANT/REVOKE ilegal; por favor, consulte el manual para ver los permisos que se pueden usarEl argumento de GRANT para el equipo o usuario es demasiado grandeLa tabla '%-.192s.%-.192s' no existeNo existe tal concesión (grant) definida para el usuario '%-.48s' en el equipo '%-.64s' en la tabla '%-.192s'El comando usado no está permitido con esta versión de MariaDBExiste un error en su sintaxis SQL; revise el manual que se corresponde con su versión del servidor MariaDB para averiguar la sintaxis correcta a utilizarEl hilo (thread) de inserción retardada no pudo obtener bloqueo requerido para la tabla %-.192sDemasiados hilos (threads) retardados en usoConexión %ld abortada para la base de datos: '%-.192s' usuario: '%-.48s' (%-.64s)Obtenido un paquete mayor de 'max_allowed_packet' bytesObtenido un error de lectura desde la tubería de la conexiónObtenido un error de fcntl()Obtenidos paquetes desordenadosNo pude descomprimir paquete de comunicaciónObtenido un error leyendo paquetes de comunicaciónObtenido tiempo agotado (timeout) leyendo paquetes de comunicaciónObtenido un error escribiendo paquetes de comunicaciónObtenido tiempo agotado (timeout) escribiendo paquetes de comunicaciónLa cadena resultante es mayor de max_allowed_packet bytesEl motor de almacenaje %s no soporta columnas de tipo BLOB/TEXTEl motor de almacenaje %s no soporta columnas AUTO_INCREMENTINSERT DELAYED no puede ser usado con la tabla '%-.192s' porque esta bloqueada con LOCK TABLESNombre Incorrecto de columna '%-.100s'El motor de almacenaje %s no puede indizar la columna %`sIncapaz de abrir la tabla subyacente por estar definida de forma diferente o por no ser del tipo no-MyISAM o por no existirNo puedo grabar, debido a restricción única, en la tabla '%-.192s'Columna BLOB/TEXT '%-.192s', usada en especificación de clave, sin tamañoTodas las partes de una PRIMARY KEY deben de ser NOT NULL; si necesita NULL en una clave, use UNIQUE en su lugarResultado compuesto de más de una filaEste tipo de tabla necesita de una clave primariaEsta versión de MariaDB no ha sido compilada con soporte para RAIDEstá usando modo de actualización segura y ha intentado actualizar una tabla sin un WHERE que use una columna KEYLa clave '%-.192s' no existe en la tabla '%-.192s'No puedo abrir tablaEl motor de almacenaje para la tabla no soporta %sNo tiene el permiso para ejecutar este comando en una transacciónObtenido error %M durante COMMITObtenido error %M durante ROLLBACKObtenido error %M durante FLUSH_LOGSObtenido error %M durante CHECKPOINTAbortada conexión %lld a la base de datos: '%-.192s' usuario: '%-.48s' equipo: '%-.64s'%-.64s (%-.64s)Nunca lo debería vd de verBinlog cerrado, no puedo hacer RESET MASTERFallo reconstruyendo el índice del volcado de la tabla '%-.192s'Error del maestro (master): '%-.64s'Error de red leyendo del maestro (master)Error de red grabando en maestro (master)No puedo encontrar índice FULLTEXT coincidente con la lista de columnasNo puedo ejecutar el comando dado porque tiene tablas activas bloqueadas o una transacción activaVariable de sistema '%-.*s' desconocidaLa tabla '%-.192s' está marcada como estropeada y debe de ser reparadaLa tabla '%-.192s' está marcada como estropeada y la última reparación (¿automática?) fallóAlgunas tablas no transaccionales ya cambiadas no puedieron ser retrocedidas (rolled back)Transacción multi-sentencia requirió de más de 'max_binlog_cache_size' bytes de almacenamientoEsta operación no puede ser realizada con el esclavo '%2$*1$s' en marcha; primero ejecute STOP SLAVE '%2$*1$s'Esta operación requiere de un esclavo funcionando; configure el esclavo y haga el START SLAVEEl servidor no está configurado como esclavo; arréglelo en el fichero/archivo de configuración o con CHANGE MASTER TONo pude inicializar estructura info de maestro (master) para '%.*s'; se pueden ver más mensajes de error en el historial (log) de errores de MariaDBNo puedo crear el hilo (thread) esclavo; verifique recursos del sistemaEl usuario %-.64s ya tiene más de 'max_user_connections' conexiones activasSólo puede usar expresiones constantes en esta sentenciaTiempo de espera de bloqueo excedido; intente rearrancar la transacciónEl número total de bloqueos excede el tamaño de bloqueo de la tablaNo se pueden adquirir bloqueos de actualización durante una transacción READ UNCOMMITTEDDROP DATABASE no permitido mientras un hilo (thread) está ejerciendo un bloqueo de lectura globalCREATE DATABASE no permitido mientras un hilo (thread) está manteniendo un bloqueo de lectura globalArgumentos incorrectos para %s'%s'@'%s' no está permitido para crear nuevos usuariosDefinición incorrecta de la tabla; todas las tablas MERGE deben de estar en la misma base de datosEncontrado estancamiento (deadlock) al intentar obtener el bloqueo; intente volver a comenzar la transacciónEl motor de almacenaje %s no soporta índices FULLTEXTNo puedo añadir restricción de clave foránea para `%s`No puedo añadir o actualizar una fila hija: ha fallado una restrición de clave foráneaNo puedo borrar o actualizar una fila padre: ha fallado una restrición de clave foráneaError conectando al maestro (master): %-.128sError ejecutando consulta (query) en maestro (master): %-.128sError al ejecutar comando %s: %-.128sUso incorrecto de %s y %sLas sentencias SELECT usadas tienen un número diferente de columnasNo puedo ejecutar la consulta (query) porque vd tiene un conflicto de bloqueo de lecturaDesactivada la mezcla de tablas transaccionales y no transaccionalesOpción '%s' usada dos veces en la sentenciaEl usuario '%-.64s' ha excedido el recurso '%s' (valor actual: %ld)Acceso denegado. Usted necesita (al menos un(os)) privilegio(s) %-.128s para esta operaciónLa variable '%-.64s' es una variable de SESSION y no puede ser usada con SET GLOBALLa variable '%-.64s' es una variable GLOBAL y debería de ser configurada con SET GLOBALLa variable '%-.64s' no tiene un valor por defectoLa variable '%-.64s' no puede ser configurada para el valor de '%-.200T'Tipo de argumento incorrecto para variable '%-.64s'La variable '%-.64s' solamente puede ser configurada, no leídaIncorrecto uso/colocación de '%s'Esta versión de MariaDB no soporta todavía '%s'Obtenido error fatal %d del maestro (master) al leer datos del historial (log) binario: '%-.320s'El hilo (thread) SQL esclavo ha ignorado la consulta (query) debido a las reglas de replicar-*-tablaLa variable '%-.192s' es una variable %sDefinición de clave foránea incorrecta para '%-.192s': %sLa referencia de clave y la referencia de tabla no coincidenEl operando debería de contener %d columna(s)La subconsulta (subquery) devuelve más de 1 filaManejador desconocido de sentencia preparada (%.*s) dado para %sO la Base de datos de Ayuda está corrupta o no existeReferencia cíclica en subconsultas (subqueries)Convirtiendo la columna '%s' de %s a %sReferencia '%-.64s' no soportada (%s)Cada tabla derivada debe de tener su propio aliasLa selección %u fué reducida durante optimizaciónLa tabla '%-.192s' de uno de los SELECT no puede ser usada en %-.32sEl cliente no soporta protocolo de autenticación requerido por el servidor; considere mejorar el cliente MariaDBTodas las partes de un índice SPATIAL deben de ser NOT NULLEl COTEJO (COLLATION) '%s' no es válido para CHARACTER SET '%s'El esclavo ya está funcionandoEl esclavo ya fué paradoTamaño demasiado grande para datos descomprimidos; el máximo tamaño es %d. (probablemente, el tamaño de datos descomprimidos fué corrompido)ZLIB: No hay suficiente memoriaZLIB: No hay suficiente espacio en el búfer de salida (probablemente, el tamaño de datos descomprimidos fué corrompido)ZLIB: Dato de entrada corruptoLa fila %u ha sido cortada por %s)La fila %lu no contiene datos para todas las columnasLa fila %lu fué truncada; contenía más datos que columnas de entradaColumna puesta a valor por defecto; NULL suministrado para columna NOT NULL '%s' en la fila %luValor fuera de rango para la columna '%s' en la fila %luDatos truncados para la columna '%s' en la fila %luUsando motor de almacenaje %s para la tabla '%s'Mezcla ilegal de cotejos (collations) (%s,%s) y (%s,%s) para la operación '%s'No puedo eliminar uno o más de los usuarios solicitadosNo puedo revocar todos los privilegios para uno o más de los usuarios solicitadosMezcla ilegal de cotejos (collations) (%s,%s), (%s,%s), (%s,%s) para la operación '%s'Mezcla ilegal de cotejos (collations) para la operación '%s'La variable '%-.64s' no es un componente variable (No puede ser usada como XXXX.variable_name)Cotejo (Collation) desconocido: '%-.64s'Los parámetros SSL en CHANGE MASTER son ignorados porque este esclavo MariaDB fue compilado sin soporte SSL; pueden ser usados después cuando el esclavo MariaDB con SSL sea arrancadoEl servidor se está ejecutando en modo --secure-auth, pero '%s'@'%s' tiene una contraseña con formato antiguo; por favor cambie la contraseña al nuevo formatoEl campo o la referencia '%-.192s%s%-.192s%s%-.192s' de SELECT #%d se resolvió en SELECT #%dParámetro incorrecto o combinación de parámetros para START SLAVE UNTILSe recomienda usar --skip-slave-start al hacer réplica paso a paso con START SLAVE UNTIL; en caso contrario, obtendrá problemas si tiene lugar un rearranque inesperado del esclavo mariadbUn hilo (thread) SQL no ha de ser arrancado de esa manera HASTA que las opciones sean ignordasNombre de índice incorrecto '%-.100s'Nombre de catálogo incorrecto '%-.100s'La caché de consulta (query) ha fallado al poner el tamaño %llu; el nuevo tamaño de caché de consulta (query) es %luLa columna '%-.192s' no puede format parte de índice FULLTEXTCaché de clave desconocida '%-.100s'MariaDB ha sido arrancada en modo --skip-name-resolve; vd necesita reinicializarla sin esta opción para que esta concesión funcioneMotor de almacenaje '%s' desconocido'%s' está obsoleto y será quitado en una entrega futura, use '%s' en su lugarLa tabla destino %-.100s del %s no es actualizableLa característica '%s' fue deshabilitada; usted necesita construir MariaDB con '%s' para tener eso funcionandoEl servidor MariaDB se está ejecutando con la opción %s por lo que no se puede ejecutar esta sentenciaLa columna '%-.100s' tiene valor duplicado '%-.64s' en %sTruncado incorrecto %-.32T valor: '%-.128T'Definición incorrecta de tabla; solamente puede haber una columna TIMESTAMP con CURRENT_TIMESTAMP en DEFAULT o en cláusula ON UPDATECláusula ON UPDATE inválida para la columna '%-.192s'Este comando no se encuentra soportado para protocolo de sentencia preparada, aúnObtenido error %d '%-.200s' desde %sObtenido error temporal %d '%-.200s' desde %sZona temporal desconocida o incorrecta: '%-.64s'Valor inválido de SELLO TEMPORAL (TIMESTAMP) en la columna '%s' de la fila %luCadena de carácter %s inválida: '%.64T'El resultado de %s() ha sido mayor que max_allowed_packet (%ld) - truncadoDeclaraciones conflictivas: '%s%s' y '%s%s'No puedo crear una %s desde dentro de otra rutina almacenada%s %s ya existe%s %s no existeNo pude ELIMINAR (DROP) %s %sNo pude CREAR %s %s%s sin etiqueta coincidente: %sRedefiniendo etiqueta %sEtiqueta-Final %s sin coincidenciaRefiriéndose a variable %s sin inicializarEl PROCEDIMIENTO (PROCEDURE) %s no puede devolver un conjunto de resultados en el contexto dadoRETURN sólo se permite dentro de una FUNCIÓN%s no permitido en procedimientos almacenadosEl historial (log) de actualización se encuentra obsoleto y reemplazado por el historial (log) binario; SET SQL_LOG_UPDATE ha sido ignorado. Esta opción será quitada en MariaDB 5.6El historial (log) de actualización se encuentra obsoleto y reemplazado por el historial binario; SET SQL_LOG_UPDATE ha sido traducido a SET SQL_LOG_BIN. Esta opción será quitada en MariaDB 5.6Se ha interrumpido la ejecución de la consulta (query)Número incorrecto de argumentos para %s %s; se esperaba %u, se obtuvo %uCONDICIÓN no definida: %sNo se hallado RETURN en FUNCIÓN %sLa FUNCIÓN %s termina sin RETURNLa sentencia de cursor debe de ser un SELECTEl SELECT de cursor no debe de tener INTOCURSOR indefinido: %sCursor ya abiertoCursor no abiertoVariable sin declarar: %sIncorrecto número de variables FETCHNo hay datos - cero filas logradas, seleccionadas o procesadasParámetro duplicado: %sVariable duplicada: %sCondición duplicada: %sCursor duplicado: %sFallo en ALTER %s %sValor de Subconsulta (subquery) no soportado%s no permitido en función almacenada o en disparadorDeclaración de variable o condición tras declaración de cursor o manejadorDeclaración de cursor tras declaración de manejadorCaso no hallado para sentencia CASEEl fichero/archivo de configuración '%-.192s' es demasiado grandeCabecera de tipo de fichero/archivo malformada en fichero/archivo '%-.192s'Inesperado fin de fichero/archivo mientras se analizaba comentario '%-.200s'Error mientras se analizaba parámetro '%-.192s' (línea: '%-.192s')Inesperado fin de fichero/archivo mientras se saltaba parámetro desconocido '%-.192s'ANALYZE/EXPLAIN/SHOW no puede ser emitdo; privilegios insuficientes para tabla subyacenteEl fichero/archivo '%-.192s' es de un tipo desconocido '%-.64s' en su cabecera'%-.192s.%-.192s' no es del tipo '%s'La columna '%-.192s' no es actualiableEl SELECT de la vista contiene una subconsulta (subquery) en la cláusula FROMEl SELECT de la vista contiene una cláusula '%s'El SELECT de la vista contiene una variable o un parámetroEl SELECT de la vista se refiere a una tabla temporal '%-.192s'El SELECT de la vista y la lista de campos de la vista tienen un contador diferente de columnasEl algoritmo de fusión de la vista no se puede usar aquí por ahora (se asume algoritmo indefinido)La vista que se está actualizando no tiene clave completa de la tabla subyacente que contieneLa vista '%-.192s.%-.192s' hace referencia a tabla(s) o columna(s) o función(es) inválida(s) o al definidor/invocador de vista le faltan derechos para usarlosNo puedo eliminar o alterar una %s desde dentro de otra rutina almacenadaGOTO no permitido en manejador de procedimiento almacenadoYa existe el disparador `%s`El disparador no existeEl disparador '%-.192s' es una vista, tabla temporal o secuenciaActualizar la fila %s no está permitido en disparador %sNo hay fila %s en disparador %sEl campo '%-.192s' no tiene un valor por defectoDivisión por 0Incorrecto %-.32s valor: '%-.128T' para columna `%.192s`.`%.192s`.`%.192s` en la fila %luHallado valor ilegal %s '%-.192T' durante el análisiCHECK OPTION en vista no actualizable %`-.192s.%`-.192sCHECK OPTION falló %`-.192s.%`-.192sComando %-.32s denegado para el usuario '%s'@'%s' para rutina '%-.192s'Falló la purga de viejos historiales (logs) de reenvío: %sEl valor calculado de la contraseña debería de ser un número hexadecimal de %d-dígitosHistorial (log) de destino no hallado en índice binlogError de E/S leyendo fichero/archivo índice de historial (log)La configuración del servidor no permite purgar binlogFallo en fseek()Error fatal durante la purga del historial (log)Se encuentra en uso un historial purgable, no lo purgaréError desconocido durante la purga del historial (log)Fallo inicializando la posición del historial de reenvío: %sNo está usando historial (log) binarioLa sintaxis '%-.64s' está reservada para propósitos internos del servidor MariaDBFalló WSAStartupNo puedo manejar procedimientos con grupos diferentes, aúnLa selección debe de tener un grupo con este procedimientoNo puedo usar la cláusula ORDER con este procedimientoEl historial (log) binario y la réplica prohibe cambiar el servidor global %sNo puedo mapear fichero/archivo: %-.200s, error: %MMagia equivocada en %-.64sSentencia preparada contiene demasiados marcadores de posiciónEl tamaño de trozo de clave '%-.192s' no puede ser 0Ha fallado la suma de comprobación del texto de la vistaNo puedo modificar más de una tabla base a través de una vista de unión '%-.192s.%-.192s'No puedo insertar dentro de vista de unión '%-.192s.%-.192s' sin lista de camposNo puedo borrar desde vista de unión '%-.192s.%-.192s'Ha fallado la operación %s para %.256sXAER_NOTA: XID desconocidoXAER_INVAL: Argumentos inválidos (o comando no soportado)XAER_RMFAIL: El comando no se puede ejecutar cuando la transacción global se encuentra en estado %.64sXAER_OUTSIDE: Algún trabajo se ha realizado fuera de la transacción globalXAER_RMERR: Ha ocurrido un error fatal en la rama de la transacción - revise la consitencia de sus datosXA_RBROLLBACK: La rama de la transacción ha sido retrocedida (rolled back)No existe tal concesión definida para el usuario '%-.48s' en equipo '%-.64s' en rutina '%-.192s'Fallo al conceder privilegios de EXECUTE y ALTER ROUTINEFallo al rescindir todos los privilegios de la rutina anuladaDatos demasiado largos para la columna '%s' en la fila %luMal SQLSTATE: '%s'%s: preparada para conexiones. Versión: '%s' conector: '%s' puerto: %d %sNo puedo cargar valor desde fichero/archivo con filas de tamaño fijo en variableNo está autorizado a crear un usuario con GRANTIncorrecto valor %-.32s: '%-.128T' para la función %-.32sHa cambiado la definición de la tabla, por favor reintente la transacciónManejador duplicado declarado en mismo bloqueEl argumento %d OUT o INOUT para la rutina %s no es una variable o pseudo-variable NEW en disparador BEFORENo autorizado a devolver un conjunto de resultados desde un %sNo puedo obtener objeto de geometría desde los datos que vd envía al campo GEOMETRYHa fallado una rutina y no tiene ni NO SQL ni READS SQL DATA en su declaración y el historial (log) binario se encuentra activado; si han sido actualizadas tablas no transaccionales, el fichero/archivo binario de historial (log) perderá sus cambiosEsta función no tiene ninguno de DETERMINISTIC, NO SQL o READS SQL DATA en su declaración y está activado el historial binario (vd *podría* querer usar la variable menos segura log_bin_trust_function_creators)No tiene el privilegio SUPER y está activado el historial binario (*podría* querer usar la variable menos segura log_bin_trust_function_creators)No puede ejecutar una sentencia preparada que tiene abierto un cursor asociado con ella. Renueve la sentencia para re-ejecutarlaLa sentencia (%lu) no tiene cursor abiertoComisión (commit) implícita o explícita no permitida en funciones almacenadas o en disparadoresEl campo de tabla subyacente de vista '%-.192s.%-.192s' no tiene valor por defectoNo autorizadas funciones almacenadas recursivas ni disparadoresEscala %llu demasiado grande especificada para '%-.192s'. El máximo es de %uPrecisión %llu demasiado grande especificada para '%-.192s'. El máximo es de %uPara flotante(M,D), doble(M,D) o decimal(M,D), M debe de ser >= D (columna '%-.192s')No puede combinar bloqueo de escritura de tablas de sistema con otras tablas o tipos de bloqueoNo puedo conectar a fuente foránea de datos: %.64sHubo un problema procesando la consulta (query) en la fuente foránea de datos. Error de fuente de datos: %-.64sLa fuente foránea de datos que intenta referenciar no existe. Error en fuente de datos: %-.64sNo puedo crear tabla federada. La cadena de conexión de la fuente de datos '%-.64s' no tiene el formato correctoLa cadena de conexón de la fuente de datos '%-.64s' no tiene el formato correctoNo puedo crear tabla federada. Error en fuente de datos foráneos: %-.64sDisparador en esquema equivocadoDesbordamiento en pila de hilos (threads): %ld bytes usados de una pila de %ld y son necesarios %ld bytes. Considere el incrementar la variable de sistema --thread_stack=#.El cuerpo de rutina para '%-.100s' es demasiado largoNo puedo eliminar keycache por defectoAncho a mostrar fuera de rango para '%-.192s' (máx = %lu)XAER_DUPID: El XID ya existeFunción Datetime: %-.32s desbordamiento de campoNo puedo actualizar tabla '%-.192s' en función almacenada/disparador porque ya está siendo usada por la sentencia que invocó esta función almacenada/disparadorLa definición de la tabla '%-.192s' previene la operación %-.192s en la tabla '%-.192s'La sentencia preparada contiene una llamada a rutina almacenada que se refiere a esa misma sentencia. No está permitido ejecutar una sentencia preparada de esta manera recursivaNo permitido usar auto acometida (autocommit) desde una función almacenada o disparadorDefinidor inválidoLa vista '%-.192s'.'%-.192s' no tiene información de definidor (formato viejo de tabla). Se usa el usuario actual como definidor. Por favor, ¡recrea la vista!Vd necesita el privilegio SUPER para la creación de la vista con definidor '%-.192s'@'%-.192s'El usuario especificado como definidor ('%-.64s'@'%-.64s') no existeVd no está autorizado a cambiar el esquema de '%-.192s' a '%-.192s'No puedo borrar o actualizar una fila padre: falla una restricción de clave foránea (%s)No puedo añadir o actualizar una fila hija: falla una restricción de clave foránea (%s)La variable '%-.64s' debe de ser entrecomillada con `...` o renombradaNo hay atributo de definidor para disparador '%-.192s'.'%-.192s'. El disparador será activado bajo la autorización del invocador, el cual puede tener insuficientes privilegios. Por favor, vuelva a crear el disparador'%-.192s' tiene un formato viejo, debería vd de volver a crear el/los objeto(s) '%s'El límite recursivo %d (según se indica mediante la variable max_sp_recursion_depth) se ha excedido para la rutina %.192sNo pude cargar la rutina %-.192s (código interno %d). Para más detalles, ejecute SHOW WARNINGSNombre incorrecto de rutina '%-.192s'Es necesaria una mejora. Por favor, ¡haga "REPAIR %s %`s" o vuelque/recargue para arreglarlo!AGGREGATE no está soportado en funciones almacenadasNo puedo crear más de max_prepared_stmt_count sentencias (valor en curso: %u)`%-.192s`.`%-.192s` contiene recursividad de vista"No hay campo agrupado '%-.192s' usado en cláusula %-.64sEl motor de almacenaje %s no soporta índices SPATIALLos disparadores no pueden ser creados en las tablas del sistemaSe quitan los espacios iniciales del nombre '%s'No pude leer valor de auto-incremento del motor de almacenajenombre de usuarionombre de equipoLa cadena '%-.70T' es demasiado larga para %s (no debería de ser mayor de %d)La tabla destino %-.100s de la %s no es insertable-dentroLa tabla '%-.64s' está definida de forma diferente o es del tipo no-MyISAM o no existeDemasiado alto el nivel de anidamiento para la selecciónEl nombre '%-.64s' ha pasado a ser ''El primer carácter de la cadena de los FIELDS TERMINATED es ambiguo; por favor, use FIELDS ENCLOSED BY no opcionales y no vacíosNo se puede crear el servidor externo '%s' porque ya existeEl nombre del servidor foráneo que intenta referenciar no existe. Error en fuentes de datos: %-.64sEl motor de almacenaje de la tabla '%-.64s' no soporta la opción de creación '%.64s'Error de sintaxis: %-.64s PARTITIONING requiere de la definición de VALUES %-.64s para cada particiónSólo %-.64s PARTITIONING puede usar VALUES %-.64s en la definición de la particiónMAXVALUE sólo se puede usar en la definición de la última particiónLas subparticiones sólo pueden ser particiones dispersas (hash) y mediante claveSe deben de definir subparticiones en todas las particiones si se está en una particiónDefinido un número equivocado de particiones, no coincide con configuración previaDefinido un número equivocado de subparticiones, no coincide con configuración previaLas expresiones constantes, al azar o dependientes de zona en función de (sub)particionado no están permitidasLas expresiones incluidas en %s deben de ser constantesCampo en la lista de campos para función de partición no hallado en tablaLista de campos sólo se permite en particiones KEYLa información de partición en el fichero/archivo frm no es consistente con lo que se puede grabar en un fichero/archivo frmLa función %-.192s devueve un tipo equivocadoPara las particiones %-.64s, se debe de definir cada particiónEl valor VALUES LESS THAN debe de ser estrictamente incremental para cada particiónEl valor VALUES debe de ser del mismo tipo que la función de particiónDefinición múltiple de la misma constante en el particionamiento de la listaEl particionado no puede ser usado de forma autónoma en consulta (query)La mezcla de manejadores en las particiones no está autorizada en esta versión de MariaDBPara el motor de particionado es necesario definir todas %-.64sDefinidas demasiadas particiones (incluyendo las subparticiones)Sólo es posible mezclar particionado RANGE/LIST con particionado HASH/KEY para el subparticionadoNo pude crear fichero/archivo de manejador específicoNo se autoriza campo BLOB en la función de particiónUn %-.192s debe de incluir todas las columnas en la función de particionado de la tablaEl número de %-.64s = 0 no es un valor autorizadoLa gestión de particiones en una tabla no particionada no es posibleLas tablas particionadas no soportan %sError en lista de particiones para %-.64sNo puedo quitar todas las particiones, use DROP TABLE en su lugarCOALESCE PARTITION sólo se puede usar en particiones HASH/KEYREORGANIZE PARTITION sólo se puede usar para reorganizar particiones no para cambiar sus númerosREORGANIZE PARTITION sin parámetros sólo se puede usar en tablas auto-particionadas usando HASH PARTITIONs%-.64s PARTITION sólo puede ser usada en particiones RANGE/LISTIntentando añadir particion(es) usando un número equivocado de subparticionesSe debe de añadir una partición, al menosSe debe de fusionar una partición, al menosHay más particiones a reorganizar que las que existenNombre de partición duplicado %-.192sNo se autoriza a apagar binlog con este comandoPara reorganizar un conjunto de particiones, éstas deben de estar ordenadas consecutivamenteEl reorganizar un rango de particiones no puede cambiar los rangos totales excepto para la última partición donde se puede extender el rangoFunción de partición no soportada en esta versión para este manejadorEl estado de una partición no se puede definir desde CREATE/ALTER TABLEEl manejador %-.64s sólo soporta enteros de 32 bit en VALUESEnchufe (plugin) '%-.192s' no cargadoIncorrecto %-.32s valor: '%-.128T'La tabla no tiene partición para valor %-.64sNo se permite especificar %s más de unva vezNo pude crear %sNo pude eliminar %sEl manejador no soporta autoextensión de espacios de tablaSe ha especificado de forma incorrecta un parámetro de medida o el número o en la forma 10MEl número de medida es correcto pero no permitimos que la parte del dígito tenga más de 2 billonesNo pude alterar: %sHa fallado el grabar una fila en historial (log) binario basado en filaLa definición de tabla en maestro (master) y esclavo no coincide: %sLa ejecución esclava con --log-slave-updates debe de usar un historial (log) binario basado en fila para que pueda replicar eventos de historial (log) binario basados en filaEl evento '%-.192s' ya existeNo pude almacenar evento %s. Código de error %M desde motor de almacenajeEvento desconocido '%-.192s'No pude alterar evento '%-.192s'No pude eliminar %sO INTERVAL no es positivo o es demasiado grandeO ENDS es inválido o anterior a STARTSEl tiempo de ejecución de evento se encuentra en el pasado. El evento ha sido desactivadoNo puede abrir mysql.eventNo se ha suministrado expresión datetimeNo lo debería vd de ver nuncaNo lo debería vd de ver nuncaNo pude borrar el evento desde mysql.eventError durante compilación de cuerpo de eventoMismo nombre de evento viejo y nuevoDatos demasiado largos para la columna '%s'No puedo eliminar índice '%-.192s': necesario en una restricción de clave foráneaLa sintaxis '%s' está obsoleta y será quitada en MariaDB %s. Por favor, use %s en su lugarNo puede hacer bloqueo de escritura en una tabla de historial (log). Sólo es posible acceso de lecturaNo puede usar bloqueos con tablas de historial (log)Nunca debería vd de ver estoEl contador de columnas de mysql.%s está equivocado. Se esperaba %d, hallado %d. Creado con MariaDB %d, ahora ejecuando %d. Por favor, use mariadb-upgrade para solucionar este errorNo puedo conmutar fuera del formato de historial (log) binario basado en fila cuando la sesión ha abierto tablas temporalesNo puedo cambiar el formato de historial (log) binario dentro de funciones almacenadas o disparadoresNunca debería vd de ver estoNo puedo crear tabla temporal con particionesLa constante de partición está fuera del dominio de función de particiónEsta función de partición no está permitidaError en historial (log) DDLNo autorizado a usar valor NULL en VALUES LESS THANNombre incorrecto de particiónNo se pueden cambiar las característias de transacción mientras que una transacción se ecuentre en procesoALTER TABLE causa resecuenciado de auto_incremento resultando en entrada duplicada '%-.192T' para la clave '%-.192s'Error en organizador interno %dError durante arranque/parada del organizador. Código de error %MNo se puede usar el motor en tablas particionadasNo puedo activar historial (log) '%-.64s'El servidor no ha sido construido con réplica basada en filaHa fallado la decodificación de cadena base64Se prohiben sentencias de EVENT DDL cuando se encuentra presente el cuerpoNo puedo proceder porque el organizado de eventos está desactivadoSólo se permiten enteros como número aquíNo se puede usar el motor de almacenaje %s para tablas de historial (log)No puede '%s' una tabla de historial (log) cuando se encuentra activado el llevar historial (log)No puedo renombrar '%s'. Si se encuentra activo el llevar historial (log), el renombrar a/desde tabla de historial (log) debe de renombrar dos tablas: la tabla de historial (log) a una tabla archivo y otra tabla de vuelta a '%s'Contador de parámetro incorrecto en la llamada a función nativa '%-.192s'Parámetros incorrectos en la llamada a función nativa '%-.192s'Parámetros incorrectos en la llamada a función almacenada '%-.192s'Esta función '%-.192s' tiene el mismo nombre que una función nativaEntrada duplicada '%-.64T' para la clave '%-.192s'Demasiados ficheros/archivos abiertos. Por favor, ejecute el comando otra vezEl tiempo de jecución del evento se encuentra en el pasado y está configurado ON COMPLETION NOT PRESERVE. El evento fue eliminado inmediatamente tras su creaciónEl tiempo de jecución del evento se encuentra en el pasado y está configurado ON COMPLETION NOT PRESERVE. El evento no fue cambiado. Especifique un tiempo del futuroHa ocurrido un incidente %s en el maestro (master). Mensaje: %-.64sLa tabla no tiene partición para algunos valores existentesSe ha grabado una sentencia no segura en historial (log) binario usando el formato de sentencia desde BINLOG_FORMAT = STATEMENT. %sError fatal: %sFallo de lectura en historial (log) de reenvío: %sFallo de grabación en historial (log) de reenvío: %sFallo al crear %sEl comando maestro (master) %s ha fallado: %sNo es posible llevar historial (log) binario. Mensaje: %sLa vista %`s.%`s no tiene contexto de creaciónEl contexto de creación de la vista %`s.%`s es inválidoEl contexto de creación de la rutina almacenada %`s.%`s es inválidoFichero/archivo TRG estropeado para la tabla %`s.%`s`Los disparadores para la tabla %`s.%`s no tienen contexto de creaciónEl contexto de creación del disparador de la tabla %`s.%`s es inválidoEl contexto de creación del evento %`s.%`s es inválidoNo puedo abrir tabla para disparador %`s.%`sNo puedo crear rutina alnacenada %`s. Revise los avisosNunca debería vd de ver estoLa sentencia BINLOG del tipo `%s` no ha sido precedida por una sentencia de descripción de formato BINLOGSe ha detectado un evento de réplica estropeadoReferencia inválida a columna (%-.64s) en LOAD DATANo ha sido hallado historial (log) %s siendo purgadoXA_RBTIMEOUT: Rama de transacción ha sido retrocedida (rolled back): transcurrido demasiado tiempoXA_RBDEADLOCK: Rama de transacción ha dido retrocedida (rolled back): se ha detectado estancamiento (deadlock)Sentencia preparada necesita volver a ser preparadaOpción DELAYED no soportada para la tabla '%-.192s'No existe conexión maestra '%.*s'Opción <%-.64s> ignoradaNo se pueden borrar los enchufes (plugins) internosEl enchufe (plugin) está ocupado y será desinstalado cuando se apague%s variable '%s' es de sólo lectura. Use SET %s para asignar el valorEl motor de almacenaje %s no soporta retroceso (rollback) para esta sentencia. Transacción retrocedida (rolled back) y debe de ser rearrancadaDatos inesperados de latido (heartbeat) de maestro (master): %sEl valor requerido para el período de latido o es negativo o excede al máximo permitido (%u segundos)Nunca debería vd de ver estoError al analizar función de conflicto. Mensaje: %-.64sHa fallado el grabar en tabla de excepciones. Mensaje: %-.128s"El comentario para tabla '%-.64s' es demasiado largo (máx = %u)El comentario para el campo '%-.64s' es demasiado largo (máx = %u)La FUNCTION %s no existe. Revise la sección de 'Function Name Parsing and Resolution' en el Manual de ReferenciaBase de datosTablaParticiónSubparticiónTemporariaRenombradoDemasiadas transacciones concurrentes activasLos argumentos con separador No ASCII no están completamente soportadosagotado tiempo de espera de punto de sincronización de depuraciónalcanzado límite de punto de sincronización de depuraciónDuplicado elemento de información de condición '%s'Condición de aviso definida por usuario sin manejarCondición de no hallado definida por usuario sin manejarCondición de excepción definida por usuario sin manejarRESIGNAL cuando el manejador no activoSIGNAL/RESIGNAL sólo pueden usar una CONDITION definida mediante SQLSTATEDatos truncados para elemento de condición '%s'Datos demasiados largos para elemento de condición '%s'Localización (locale) desconocida: '%-.64s'La id %d del servidor requerido choca con la opción de arranque del esclavo --replicate-same-server-idCaché de consulta (query) desactivada; configura query_cache_type a ON o DEMAND para activarlaNombre de campo de partición duplicado '%-.192s'Inconsistencia en uso de listas de columna para particionarValores de columna de partición de tipo incorrectoDemasiados campos en '%-.192s'No puedo usar MAXVALUE como valor en VALUES INNo puedo tener más de un valor para este tipo de particionamiento %-.64sExpresiones de fila en VALUES IN sólo permitidas para particionamiento de columna multi-campoEl campo '%-.192s' es de un tipo no permitido para este tipo de particionadoEl tamaño total de los campos de particionado es demasiado grandeNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que ambos motores de fila-incapaz y de sentencia-incapaz están involucradosNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que BINLOG_FORMAT = ROW y al menos una tabla utiliza motor de almacenaje limitado a historiales basados en sentenciaNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia no es segura, el motor de almacenaje está limitado a historial basado en sentencia y BINLOG_FORMAT = MIXED. %sNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia está en un formato de fila y al menos una tabla utiliza un motor de almacenaje limitado a historial basado en sentenciaNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que BINLOG_FORMAT = STATEMENT y al menos una tabla utilizan un motor de almacenaje limitado a historial basado en fila. %sNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia está en formato de fila y BINLOG_FORMAT = STATEMENTNo puedo ejecutar sentencia: imposible grabar historial (log) binario ya que hay más de un motor involucrado y al menos un motor usa auto-historialLa sentencia no es segura debido a usar una cláusula LIMIT. No es segura porque el conjunto incluido de filas no se puede predecirLa sentencia no es segura debido a usar una INSERT DELAYED. No es segura porque los momentos en que las filas han de insertarse no se pueden predecirLa sentencia no es segura debido a usar el historial (log) general, un historial (log) lento o tabla(s) de performance_schema. No es segura porque las tablas de sistema pueden diferir de las esclavasLa sentencia no es segura debido a invocar un disparador o una función almacenada que inserta una columna de AUTO_INCREMENT. No se puede llevar historial correcto de Los valores insertadosLa sentencia no es segura porque usa un UDF que puede no devolver el mismo valor en el esclavoLa sentencia no es segura porque usa una variable de sistema que puede tener un valor diferente en el esclavoLa sentencia no es segura porque usa una función de sistema que puede devolver un valor diferente en el esclavoLa sentencia no es segura porque accede a una tabla no transaccional tras acceder a una transaccional dentro de la misma transacción%s. Sentencia: %sLa columna %d de la tabla '%-.192s.%-.192s' no puede ser convertida desde el tipo '%-.50s' al tipo '%-.50s'No puedo crear tabla de conversión para la tabla '%-.192s.%-.192s'No puedo modificar @@session.binlog_format dentro de una transacciónLa ruta especificada para %.64T es demasiado larga'%s' está obsoleto y será quitada en una entrega futuraLa tabla nativa '%-.64s'.'%-.64s' tiene una estructura equivocadaUso inválido de performance_schemaLa tabla '%s'.'%s' fue saltada ya que su definición está siendo modificada por la sentencia DDL concurrenteNo puedo modificar @@session.binlog_direct_non_transactional_updates dentro de una transacciónNo puedo cambiar la bandera directa de binlog dentro de una función almacenada o de un disparadorUn índice SPATIAL sólo puede contener una columna de tipo geométricoEl comentario para el índice '%-.64s' es demasiado largo (máx = %lu)Se ha abortado la espera por un bloqueo debido a bloqueo exclusivo pendiente%s valor se encuentra fuera de rango '%s'Una variable de tipo basado en no entero en cláusula LIMITNo es segura la mezcla de motores de auto-historial (log) y de no auto-historial en una sentenciaLa sentencia accede a tabla no transaccional así como transaccional o tabla temporal y graba en cualquiera de ellasNo puedo modificar @@session.sql_log_bin dentro de una transacciónNo puedo cambiar sql_log_bin dentro de una función almacenada o disparadorNo pude leer desde fichero/archivo .parEl valor VALUES para la partición '%-.64s' debe de tener el tipo INTAcceso denegado para usuario: '%s'@'%s'SET PASSWORD is not applicable for users authenticating via %s pluginGRANT con IDENTIFIED WITH es ilegal porque el usuario %-.*s ya existeNo puedo truncar una tabla referenciada en una restricción de clave foránea (%.192s)El enchufe (plugin) '%s' está force_plus_permanent y no puede ser descargadoEl valor de requerimiento para el período de latido es menor de 1 milisegundo. El valor se vuelve a poner a 0, indicando que el latido será efectivamente desactivadoEl valor de requerimiento para el período de latido excede el valor de `slave_net_timeout` segundos. Un valor sensible para el período debería de ser menor que el 'tiempo agotado'Las sentencias Multi-fila requieren de más de 'max_binlog_stmt_cache_size' bytes para almacenaje.La actualización de clave primaria de o de partición no está permitida por estar la tabla actualizada como '%-.192s' y '%-.192s'Se requiere reconstrucción de la tabla. Por favor, ¡haga un "ALTER TABLE %`s FORCE" o volcado/recarga para solucionarlo!El valor de '%s' debería de ser no menor que el valor de '%s'El tamaño de índice de columna es demasiado grande. El tamaño máximo de columna es de %lu bytesEl disparador '%-.64s' tiene una error en su cuerpo: '%-.256s'El disparador desconocido tiene un error en su cuerpo: '%-.256s'El índice %s está estropeadoEl registro de historial (log) para deshacer es demasiado grandeINSERT IGNORE... SELECT es no seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoINSERT... SELECT... ON DUPLICATE KEY UPDATE no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son actualizadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoREPLACE... SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son sustituidas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoCREATE... IGNORE SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoCREATE... REPLACE SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son sustituidas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoUPDATE IGNORE no es seguro porque el orden en el que las filas son actualizadas determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoNunca debería vd de ver estoNunca debería vd de ver estoLas sentencias que graban en una tabla con columna de auto-incremento tras seleccionar desde otra tabla no son seguras porque el orden en el que las filas son recuperadas determina qué filas (si hay alguna) serán grabadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoCREATE TABLE... SELECT... en una tabla con columna de auto-incremento no es segura porque el orden en el que las filas son recuperadas por el SELECT determina qué filas (si hay alguna) serán insertadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavoINSERT... ON DUPLICATE KEY UPDATE en una tabla con más de una UNIQUE KEY no es seguraNunca debería vd de ver estoNot allowed for system-versioned table %`s.%`sINSERT dentro de campo con autoincremento que no es la primera parte en la clave primaria compuesta no es seguroNo puedo cargar desde %s.%s. La tabla está probablemente estropeadaEl valor requerido %lu para retraso en maestro (master) excede el máximo de %luSólo se permiten Format_description_log_event y eventos de fila en sentencias BINLOG (pero %s fue suministrado)Atributo no coincidente '%-.64s' entre la partición y la tablaLa tabla para intercambiar con la partición está particionada: '%-.64s'La tabla para intercambiar con la partición es temporal: '%-.64s'La tabla subparticionada utiliza subpartición en lugar de particiónPartición desconocida '%-.64s' en la tabla '%-.64s'Las tablas tienen diferentes definicionesHallada una fila que no coincide con la particiónLa opción binlog_cache_size (%lu) es mayor que max_binlog_cache_size (%lu); configurando binlog_cache_size igual a max_binlog_cache_sizeNo puedo usar acceso %-.64s en índice '%-.64s' debido al tipo o conversión de cotejo en campo '%-.64s'La tabla para intercambiar con la partición tiene referencias a clave foránea: '%-.64s'Valor de clave '%-.192s' no hallado en la tabla '%-.192s.%-.192s'Valor demasiado largo para '%s'Ha fallado la verificación de la suma de revisión de evento de réplica mientras se leía desde la redHa fallado la verificación de la suma de revisión de evento de réplica mientras se leía desde fichero/archivo de historial (log)La opción binlog_stmt_cache_size (%lu) es mayor que max_binlog_stmt_cache_size (%lu); configurando binlog_stmt_cache_size igual a max_binlog_stmt_cache_sizeNo puedo actualizar tabla '%-.192s' mientras '%-.192s' está siendo creadaCláusula PARTITION () en tabla no particionadaHallada una fila que no coincide con el conjunto dado de particiónNunca debería vd de ver estoFallo mientras cambiaba el tipo de repositorio de réplica: %sLa creación de algunas tablas temporales no se pudo retroceder (ROLLBACK)Algunas tablas temporales fueron eliminadas, pero estas operaciones no se pudieron retroceder (ROLLBACK)%s no se soporta en modo esclavo multi-hilo (thread). %sEl núermo de bases de datos modificadas excede el máximo de %d; los nombres de base de datos no serán incluidos en los metadatos de eventos de réplicaNo puedo ejecutar el grupo de eventos actual en modo paralelo. Encontrado evento %s, nombre de historial (log) de reenvío %s, posición %s que previene la ejecución de este grupo de eventos en modo paralelo. Motivo: %s%sEl índice FULLTEXT no está soportado para tablas particionadasNúmero inválido de condiciónEnviar contraseñas en texto plano sin SSL/TLS es extremadamente inseguroAlmacenar nombre de usuario de MariaDB o información de contraseña en el repositorio master.info no es seguro y por ello no se recomienda. Por favor, mira el manual de MariaDB para saber más acerca de este asunto y sus posibles alternativasLa restricción de clave foránea para tabla '%.192s', registro '%-.192s' llevaría a una entrada duplicada en la tabla '%.192s', clave '%.192s'La restricción de clave foránea para tabla '%.192s', registro '%-.192s' llevaría a una entrada duplicada en una tabla hijaConfigurar opciones de autenticación no es posible si sólo se ha arrancado el Hilo (thread) SQL EsclavoLa tabla no tiene índice FULLTEXT que soporte esta consulta (query)La variable de sistema %.200s no se puede poner en funciones almacenadas o disparadoresLa variable de sistema %.200s no se puede poner si hay una transacción en cursoLa variable de sistema @@SESSION.GTID_NEXT tiene el valor %.200s, el cual no está listado en @@SESSION.GTID_NEXT_LISTCuando @@SESSION.GTID_NEXT_LIST == NULL, la variable de sistema @@SESSION.GTID_NEXT no puede cambiar dentro de una transacciónLa sentencia 'SET %.200s' no puede invocar una función almacenadaLa variable de sistema @@SESSION.GTID_NEXT no puede ser 'AUTOMATIC' si la @@SESSION.GTID_NEXT_LIST es no-NULLSaltando transacción %.200s porque ya ha sido ejecutada y puesta en historial (log)GTID malformado pone especificación '%.200s'GTID malformado pone codificaciónGTID malformado especificación '%.200s'Imposible generar Identificador Global de Transacción: el componente entero alcanzó el máximo valor. Rearranque el servidor con un nuevo server_uuidLos parámetros MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE y RELAY_LOG_POS no pueden ser puestos cuando MASTER_AUTO_POSITION esté activoCHANGE MASTER TO MASTER_AUTO_POSITION = 1 sólo se puede ejecutar cuando GTID_MODE = ONNo puedo ejecutar sentencias con acometidas (commit) implícitas dentro de una transacción cuando GTID_NEXT != AUTOMATIC o GTID_NEXT_LIST != NULLGTID_MODE = ON o GTID_MODE = UPGRADE_STEP_2 requiere que ENFORCE_GTID_CONSISTENCY = 1GTID_MODE = ON o UPGRADE_STEP_1 o UPGRADE_STEP_2 requiere --log-bin y --log-slave-updatesGTID_NEXT no se puede poner a UUID:NUMBER cuando GTID_MODE = OFFGTID_NEXT no se puede poner como ANONYMOUS cuando GTID_MODE = ONGTID_NEXT_LIST no se puede poner como valor no-NULL cuando GTID_MODE = OFFHallado un Gtid_log_event o Previous_gtids_log_event cuando GTID_MODE = OFFCuando ENFORCE_GTID_CONSISTENCY = 1, las actualiaciones a tablas no transaccionales sólo se puede hacer o bien en sentencias autoacometidas o en transacciones de sentencias simples y nunca dentro de la misma sentencia como actualizaciones a tablas transaccionalesCREATE TABLE ... SELECT está prohibido si ENFORCE_GTID_CONSISTENCY = 1Cuando ENFORCE_GTID_CONSISTENCY = 1, las sentencias CREATE TEMPORARY TABLE y DROP TEMPORARY TABLE pueden ser ejecutadas sólo en contextos no-transaccionales y requieren que AUTOCOMMIT = 1El valor de GTID_MODE sólo puede cambiar un paso a la vez: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. También ten en cuenta que este valor debe de ser aumentado y disminuido simultaneamente en todos los servidores; mira el Manual para instrucciones.El esclavo se está conectando usando CHANGE MASTER TO MASTER_AUTO_POSITION = 1, pero el maestro (master) ha purgado los historiales (logs) binarios que contienen GTIDs requeridos por el esclavoGTID_NEXT no se puede cambiar por un cliente que posee un GTID. El cliente posee %s. La propiedad se libera con COMMIT o ROLLBACKNombre de formato %s desconocido: '%s'No puedo ejecutar sentencia en una transacción READ ONLYEl comentario para partición de tabla '%-.64s' es demasido largo (máx = %lu)El esclavo no está configurado o falló al inicializarse de forma adecuada. Vd debe de poner al menos --server-id para activar o bien un maestro (master) o un esclavo. Mensajes de error adicionales pueden ser hallados en historial (log) de errores de MariaDBActualmente InnoDB soporta la creación de un índice FULLTEXT a la vezNo puedo crear índice FULLTEXT en tabla temporaria InnoDBLa columna '%-.192s' es de tipo equivocado para un índice InnoDB FULLTEXTEl índice '%-.192s' es de tipo equivocado para un índice InnoDB FULLTEXTLa creación de índice '%-.192s' requirió más de 'innodb_online_alter_log_max_size' bytes de historial (log) de modificaciones. Por favor, pruebe otra vezALGORITHM desconocido '%s'Tipo de LOCK desconocido '%s'CHANGE MASTER no se puede ejecutar cuando se ha parado el esclavo con un error o matado en modo MTS. Considere el usar RESET SLAVE o START SLAVE UNTILNo puedo recuperar después de que SLAVE diera error en modo paralelo de ejecución. Mensajes de error adicionales se pueden hallar en el historial (log) de error de MariaDBNo puedo limpiar tablas de información de trabajador. Mensajes de error adicionales se pueden hallar en el historial (log) de error de MariaDBEl contador de columnas %s.%s está equivocado. Se esperaba %d, hallado %d. La tabla está probablemente estropeadaEl esclavo debe de reintentar silenciosamente la transacción en cursoNunca debería vd de ver estoEsquema no coincide (%s)Tabla %-.192s en espacio de tablas del sitemaError de Lectura de E/S: (%lu, %s) %sError de Escritura de E/S: (%lu, %s) %sEspacio de tabla falta para la tabla '%-.192s'Existe Espacio de tabla para la tabla '%-.192s'. Por favor, haga DISCARD del espacio de tabla antes de hacer IMPORTEl espacio de tabla ha sido descartado para la tabla %`sError interno: %-.192sALTER TABLE '%-.192s' IMPORT TABLESPACE ha fallado con error %lu : '%s'Índice corrupto: %sEl tipo de columna YEAR(%lu) está obsoleto. Creando columna YEAR(4) en su lugarYour password does not satisfy the current policy requirements (%s)Debe vd de poner SET PASSWORD antes de ejecutar esta sentenciaNo pude añadir la restricción de clave foránea. Falta índice para restricción '%s' en la tabla foránea '%s'No pude añadir la restricción de clave foránea. Falta índice para restricción '%s' en la tabla referenciada '%s'No pude añadir la restricción de clave foránea '%s' a las tablas del sistemaNo pude abrir la tabla referenciada '%s'No pude añadir restricción de clave foránea en la tabla '%s'. Opciones incorrectas en restricción FOREIGN KEY '%s'Duplicada restricción %s llamada '%s'El cálculo de contraseña no tiene el formato esperado. Revise si se está usando el algoritmo correcto de contraseña con la función PASSWORD()No puedo eliminar la columna '%-.192s': necesaria en restricción de clave foránea '%-.192s'No puedo eliminar la columna '%-.192s': necesaria en restriccón de clave foránea '%-.192s' de la tabla %-.192sLa columna '%-.192s' no puede ser NOT NULL: necesaria en restricción de clave foránea '%-.192s' SET NULLÍndice duplicado %`s. Éste está obsoleto y será quitado en entregas futurasNo puedo cambiar la columna '%-.192s': usada en una restricción de clave foránea '%-.192s'No puedo cambiar la columna '%-.192s': usada en restricción de clave foránea '%-.192s' de la tabla '%-.192s'No puedo borrar filas de la tabla que es padre en restricción de clave foránea '%-.192s' de la tabla '%-.192s'Paquete de comunicación malformadoEjecutando em modo sólo-lecturaCuando GTID_NEXT se pone a GTID, debe vd de ponerlo de nuevo de forma explícita tras un COMMIT o ROLLBACK. Si vd ve este mensaje de error en el hilo (thread) de SQL esclavo, indica que una tabla de la transacción en curso es transaccional en el maestro (master) y no transaccional en el esclavo. En una conexión cliente, indica que has ejecutado SET GTID_NEXT antes de una transacción y has olvidado poner GTID_NEXT a un identificador diferente o a 'AUTOMATIC' tras COMMIT o ROLLBACK. El GTID_NEXT actual es '%s'La variable de sistema %.200s no se puede poner en procedimentos almacenadosGTID_PURGED sólo se puede usar cuando GTID_MODE = ONGTID_PURGED sólo se puede poner cuando GTID_EXECUTED está vacíoGTID_PURGED sólo se puede poner cuando no hay trasacciones en curso (ni incluso en otros clientes)GTID_PURGED se cambió de '%s' a '%s'GTID_EXECUTED se cambió de '%s' a '%s'No puedo ejecutar sentencia: imposible escribir en historial (log) binario desde BINLOG_FORMAT = STATEMENT y en tablas replicadas y no replicadas%s no está soportado para esta operación. Pruebe %s%s no está soportado. Motivo: %s. Pruebe %sEl algoritmo de COPY requiere de un bloqueoLas operaciones específicas de partición aún no soportan LOCK/ALGORITHMLas columnas que participan en una clave foránea son renombradasNo puedo cambiar el tipo de la columnaEl añadir claves foráneas necesita de foreign_key_checks=OFFEl crear ídices únicos con IGNORE requiere del algoritmo COPY para quitar filas duplicadasEliminar una clave primaria no está permitido sin añadir también una nueva clave primariaPara añadir una columna auto-incrementable se requiere de un bloqueoNo puedo reemplazar FTS_DOC_ID oculta con una visible-por-usuarioNo puedo eliminar o renombrar FTS_DOC_IDLa creación de un índice Fulltext requiere de un bloqueosql_slave_skip_counter no se puede poner cuando el servidor se ejecuta con GTID_MODE = ON. En su lugar, para cada transacción que desees saltar, genera una transacción vacía con el mismo GTID que la transacciónEntrada duplicada para la clave '%-.192s'Nombre largo de base de datos e identificador para objeto resultó en que el tamaño de la ruta excedió de %d caracteres. Ruta: '%s'no puedo convertir NULL a DEFAULT no-constanteSu contraseña ha expirado. Para ingresar, vd debe de cambiarla usando un cliente que soporte contraseñas expiradasHallada una fila en partición equivocada %sNo puedo organizar evento %s, nombre de historial (log)-reenvío %s, posiciona %s a hilo (thread) de Trabajador porque su tamaño %lu excede %lu de slave_pending_jobs_size_maxNo puedo CREATE FULLTEXT INDEX WITH PARSER en tabla InnoDBEl fichero/archivo de historial (log) binario '%s' está lógicamente corrupto: %sel fchero %s no se ha purgado porque estaba siendo leído por hilo(s) (thread) %d, purgado sólo %d de %d ficheros/archivosel fichero/archivo %s no fue purgado porque es el fichero/archivo activo de historial (log)Valor de Auto-incremento en UPDATE está en conflicto con valores generados internamenteLos eventos de fila no son puestos en historial (log) para sentencias %s que modifican tablas BLACKHOLE en formato de fila. Tabla(s): '%-.192s'El esclavo falló al inicializar información de estructura del maestro (master) desde el repositorioEl esclavo falló al inicializar estructura de información de historial (log) de reenvío desde el repositorioAcceso denegado intentando cambiar a usuario '%-.48s'@'%-.64s' (usando contraseña: %s). DesconectandoInnoDB está en modo de sólo lecturaLa ejecución del comando STOP SLAVE está incompleta: El hilo (thread) de SQL esclavo recibió la señal de parada, hilo (thread) ocupado, el hilo (thread) SQL se parará una vez que se complete la tarea actualLa ejecución del comando STOP SLAVE está incompleta: El hilo (thread) de E/S esclavo recibió la señal de parada, hilo (thread) ocupado, el hilo (thread) de E/S se parará una vez que se complete la tarea actualLa operación no se puede realizar. Falta la tabla '%-.64s.%-.64s', está corrupta o contiene datos malosFallo al escribir fichero/archivo temporalFalló la mejora de nombre de índice. Por favor, use una copia del algoritmo de create index(alter table) para reconstruir el índice"You should never see itLa Función o expresión '%s' no se puede usar en la cláusula %s de %`sYou should never see itLa clave primaria no se puede definir sobre una columna generadaKey/Index no se puede definir en una columna virtual generadaNo puedo definir clave foránea con cláusula %s en una columna generadaEl valor especificado para columna generada '%s' en la tabla '%s' ha sido ignoradoEsto no está aún soportado para columnas generadasYou should never see itYou should never see itEl motor de almacenaje %s no soporta columnas generadasOpción desconocida '%-.64s'Valor incorrecto '%-.64T' para opción '%-.64s'Nunca debería vd de ver estoNunca debería vd de ver estoNunca debería vd de ver estoObtenido desbordamiento al convertir '%-.128s' a %-.32s. Valor truncadoValor truncado '%-.128s' al convertir a %-.32sEncontrado valor ilegal '%-.128s' al convertir a %-.32sEncontrado formato ilegal de cadena en columna dinámicaAlcanzado límite de implementación de columna dinámicaValor ilegal usado como argumento de función de columna dinámicaColumna dinámica contiene conjunto desconocido de caracteresAl menos una de las banderas de optimizer_switch 'in_to_exists' o 'materialization' debe de estar a 'on'Caché de consulta (query) desactivada (el comando ajustar o similar está en proceso); repite este comando más tardeLa caché de consulta (query) está desactivada de forma global y no puede activarla sólo para esta sesiónCláusula de vista '%-.192s'.'%-.192s' ORDER BY ignorada porque ya hay otra clásula ORDER BYLa conexión fue matadaNunca debería vd de ver estoNo puedo modificar @@session.skip_replication dentro de una transacciónNo puedo modificar @@session.skip_replication dentro de una función almacenada o disparadorQuery execution was interrupted. The query exceeded %s %llu. The query result may be incompleteLa tabla '%-.192s.%-.192s' no existe en el motorEl objetivo no está ejecutando un comando EXPLAINableLa conexión '%.*s' está en conflicto con la conexión existente '%.*s'Maestro (master) '%.*s': No puedo %s ESCLAVO '%.*s'ESCLAVO '%.*s' arrancadoESCLAVO '%.*s' paradoEl motor %s no pudo descubr la tabla %`-.192s.%`-.192s con '%s'Fallo inicializando estado de réplica GTIDNo pude analizar la lista GTIDNo pude actualizar estado gtid de esclavo de réplicaConflicto GTID %u-%u-%llu y %u-%u-%llu (duplicado id de dominio %u)No pude abrir %s.%sSe ha requerido que conectar esclavo arranque desde GTID %u-%u-%llu, el cual no está en el binlog del maestro (master)No pude cargar posición GTID de esclavo de réplica desde la tabla %s.%sEl especificado GTID %u-%u-%llu está en conflicto con el historial (log) binario el cual contiene un más reciente GTID %u-%u-%llu. Si se usa MASTER_GTID_POS=CURRENT_POS, la posición de binlog sobreescribirá el nuevo valor de @@gtid_slave_posEl valor especificado para @@gtid_slave_pos no contiene valor para dominio de réplica %u. Esto está en conflicto con el historial (log) binario el cual contiene un GTID %u-%u-%llu. Si se usa MASTER_GTID_POS=CURRENT_POS, la posición binlog sobreescribirá el nuevo valor de @@gtid_slave_posSTART SLAVE UNTIL master_gtid_pos requiere que esclavo esté usando GTIDSe ha intentado hacer binlog de GTID %u-%u-%llu lo cual crearía un número de secuencia fuera de orden con el existente GTID %u-%u-%llu y está activado gtid en modo estrictoAl binlog del maestro (master) le falta el GTID %u-%u-%llu requerido por el esclavo (incluso aunque existe un número posterior de secuencia) y está activado GTID en modo estrictoSe ha recibido un GTID inesperado desde el maestro (master) tras reconectar. Esto indica normalmente que el servidor maestro (master) ha sido reemplazado sin rearrancar los hilos (threads) del esclavo. %sNo puedo modificar @@session.gtid_domain_id o @@session.gtid_seq_no dentro de una transacciónNo puedo modificar @@session.gtid_domain_id o @@session.gtid_seq_no dentro de una función almacenada o de un disparadorSe ha requerido arrancar la conexión a esclavo desde GTID %u-%u-%llu, el cual no está en el binlog del maestro (master). Ya que el binlog del maestro (master) contiene GTIDs con números mayores de secuencia, es probable que indique que el esclavo diverge debido a ejecutar transacciones extra erróneasEsta operación no está permitida si cualquier GTID ha sido puesto en historial (log) binario. Ejecuta primero RESET MASTER para borrar el historial (log)Id desconocido de consulta (query): %lldDatos base64 malos en posición %uEspecificación inválida de rol %`sEl usuario en curso no es válidoNo puedo conceder rol '%s' a: %sNo puedo revocar rol '%s' desde: %sNo puedo cambiar @@slave_parallel_threads mientras otro cambio esté en procesoHa fallado la acometida (commit) debido a un fallo previo en acometida (commit) de la que depende ésta'%-.192s' es una vistaAl usar réplica paralela y GTID con múltiples dominios de réplica, no se puede usar @@sql_slave_skip_counter. En su lugar, poner @@gtid_slave_pos de forma explícita se puede usar para saltar tras una posición GTID dadaLa definición para la tabla %`s es demasiado largaYa instalado el enchufe (plugin) '%-.192s'S%s no soporta subconsultas (subqueries) o funciones almacenadasLa variable del sistema %.200s no se puede poner en SET STATEMENT.Nunca debería vd de ver estoNo puedo crear usuario '%-.64s'@'%-.64s'; ya existeNo puedo eliminar usuario '%-.64s'@'%-.64s'; no existeNo puedo crear rol '%-.64s'; ya existeNo puedo eliminar rol '%-.64s'; no existeNo puedo convertir '%s' carácter 0x%-.64s a '%s'Valor por defecto incorrecto '%-.128T' para columna '%.192s'No eres el propietario de la consulta (query) %lldNo se han recolectado estadísticas independientes del motor para la columna '%s'La función de agregación '%-.192s)' del SELECT #%d pertenece a SELECT #%d<%-.64s> opción ignorada para partición InnoDBEl fichero/archivo %s está corruptoConsulta (query) completada de forma parcial en el maestro (master) (error en maestro (master): %d) y se ha abortado. Existe una posibilidad de que su maestro (master) esté inconsitente en este punto. Si está seguro de que su maestro (master) está ok, ejecute esta consulta (query) de forma manual en el esclavo y luego rearranque el esclavo mediante SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;. Consulta (query):'%s'La consulta (query) ha ocasionado diferentes errores en el maestro (master) y en el esclavo. Error en maestro (master): mensaje (formato)='%s' código de error=%d; Error en esclavo: mensaje actual='%s', código de error=%d. Base de datos por defecto:'%s'. Consulta (query):'%s'El motor de almacenaje para la tabla '%s'.'%s' no ha sido cargado.GET STACKED DIAGNOSTICS cuando el manejador no está activo%s ya no está soportada. Se ha convertido la sentencia a %s.La sentencia no es segura porque usa un enchufe (plugin) analizador de fulltext que puede que no devuelva el mismo valor en el esclavo.No puedo DISCARD/IMPORT espacio de tabla asociado con tabla temporalLa cascada borrar/actualizar en clave foránea excede la máxima profundidad de %d.El contador de columna de %s.%s está equivocado. Se esperaba %d, hallado %d, Creado con MariaDB %d, ahora ejecutando %d. Por favor, use mariadb-upgrade para arreglar este error.El disparador %s.%s.%s no tiene el atributo CREATED.El disparador referenciado '%s' para el momento dado de acción y el tipo de evento no existe.El comando EXPLAIN FOR CONNECTION sólo se soporta para SELECT/UPDATE/INSERT/DELETE/REPLACETamaño inválido para columna '%-.192s'.El motor hallado de almacenaje de tabla '%-.64s' requería de la opción de crear que faltaMemoria agotada en motor de almacenaje '%-.64s'.La contraseña para usuario anónimo no puede expirar.Esta operación no se puede realizar con hilo (thread) sql esclavo en ejecución; ejecuta STOP SLAVE SQL_THREAD primeroNo puedo crear índice FULLTEXT en subconsulta (subquery) materializadaError de Historial (log) de Deshacer: %sArgumento inválido para logaritmoEsta operación no se puede realizar con un hilo (thread) de e/s de esclavo en ejecución; ejecuta STOP SLAVE IO_THREAD FOR CHANNEL '%s' primero.Esta operación puede no ser segura cuando el esclavo tenga tablas temporales. Las tablas serán mantenidas abiertas hasta que el servidor rearranque o hasta que las tablas sean borradas por cualquier sentencia DROP replicada. Se sugiere esperar hasta slave_open_temp_tables = 0.CHANGE MASTER TO mediante una cláusula MASTER_LOG_FILE pero sin existir cláusula MASTER_LOG_POS puede no ser seguro. El valor viejo de la posición puede no ser válido para el nuevo fichero/archivo binario de historial (log).You should never see itSelect no es una sentencia de sólo lectura, desactivando cronómetroEntrada duplicada '%-.192s'.El modo '%s' ya no tiene efecto alguno. Use STRICT_ALL_TABLES o STRICT_TRANS_TABLES en su lugarLa expresión #%u de ORDER BY contiene función de agregación y se aplica a UNIONLa expresión #%u de ORDER BY contiene función de agregación y se aplica al resultado de una consulta (query) no agregadaEl trabajador esclavo se ha parado tras al menos encontrar un error en trabajador previo cuando slave-preserve-commit-order fue activado. Para preserver el orden de acometida (commit), la última transacción ejecutada por este hilo (thread) no se ha acometido (commit). Al rearrancar el esclavo tras arreglar cualquier hilo (thread) fallido, vd debería de arreglar este trabajador tambiénslave_preserve_commit_order no está soportado %s.El servidor se encuentra actualmente en modo fuera de líneaLa función binaria de geomertía %s ha dado dos geometrías de diferente srids: %u y %u, que deberían de haber sido idénticasLlamando a función de geometría %s con tipos de argumento no soportados.Ha ocurrido un error GIS desconocido en función %s.Excepción desconocida capturada en función GIS %s.Suministrados datos GIS inválidos a función %s.La geometría no tiene datos en función %s.Imposible calcular centroid porque la geometría está vacía en la función %s.Error de cálculo de superposición de geometría: el dato de geometría es inválido en la función %s.Error de cálculo de información devuelto: los datos de geometría son inválidos en la función %s.Los procedimientos de análisis de puntos de intersección se interrumpieron inesperadamente en la función %s.Excepción desconocida lanzada en la función %s.Error en adjudicación de memoria: %-.256s en la función %s.Error en dominio: %-.256s en función %s.Error de tamaño: %-.256s en función %s.Error de argumento inválido: %-.256s en función %s.Error de fuera de rango: %-.256s en función %s.Error de desbordamiento: %-.256s en función %s.Error de rango: %-.256s en función %s.Error de refreno (underflow): %-.256s en la función %s.Error lógico: %-.256s en la función %s.Error en tiempo de ejecución: %-.256s en la función %s.Excepción desconocida: %-.384s en la función %s.La cadena de byte en Geometría debe de ser 'little endian'.La contraseña suministrada para el usuario de réplica excede el tamaño máximo de 32 caracteresNombre de bloqueo incorrecto a nivel de usuario '%-.192s'.Hallado estancamiento (deadlock) al intentar obtener bloqueo a nivel de usuario; intente retroceder (roll back) bloqueos de transacción/entrega y rearranque la adquisición de bloqueo.REPLACE no se puede ejecutar ya que requiere borrar filas que no están en la vistaNo soporta operación en línea en tabla con índice GISEste error nunca ocurreEste error nunca ocurreLa lista de columnas de WITH y lista de campos de SELECT tienen diferentes contadores de columnaDemasiados elementos WITH en cláusua WITHNombre de consulta (query) %`-.64s duplicada en cláusula WITHNo hay anclajes para elemento WITH recursivo '%s'Recursión mutua inaceptable con tabla anclada '%s'Referencia recursiva con WITH tabla '%s' en derivada materializadaRestrictions imposed on recursive definitions are violated for table '%s'Especificación de ventana con nombre '%s' no definidaMúltiples especificaciones de ventana con el mismo nombre '%s'La especificación de ventana que referencia a otra '%s' no puede contener una lista de particiónLa especificación de ventana referenciada '%s' ya contiene lista de ordenLa especificación referenciada de ventana '%s' no puede contener marco de ventanaCombinación inaceptable de especificaciones ligadas a marco de ventanaLa función de ventana sólo se permite en lista SELECT y en cláusula ORDER BYLa función de ventana no está permitida en especificación de ventanaEl marco de ventana no está permitido con '%s'No exite lista de orden en especificación de ventana para '%s'El marco tipo-RANGE requiere de la cláusula ORDER BY con clave única de clasificaciónSe requiere de un entero para marco tipo-ROWSSe requiere de tipo de dato numérico para marco tipo-RANGENo se seporta aún la exclusión del marcoEsta función de ventana puede no tener un marco de ventanaEl argumento de NTILE debe de ser mayor de 0No se cumple la RESTRICCIÓN %`s para %`-.192s.%`-.192sLa expresión en la cláusula %s es demasiado grandeObtenido error evaluando expresión almacenada %sObtenido un error al calcular valor por defecto para %`sLa expresión para campo %`-.64s se refiere a un campo sin inicializar %`sSólo se permite una partición DEFAULTNo existe disparador referenciado '%s' para el momento dado de acción y para el tipo de eventoEl valor por defecto/ignorado no está soportado para tal utilización de parámetroSólo la réplica basada en fila es soportada para operaciones enormesHa fallado la descompresión del binlog comprimidoCadena JSON rota en argumento %d para función '%s' en posición %dCarácter no permitido en JSON en argumento %d para función '%s' en la posición %dFin inesperado de texto JSON en argumento %d a función '%s'Error de sintaxis en texto JSON en argumento %d a función '%s' en la posición %dIncorrecta escapatoria en texto JSON en argumento %d a función '%s' en la posicón %dEl límite de %d en profundidad de estructuras JSON anidadas se ha alcanzado en argumento %d a función '%s' en la posición %dFin inesperado de ruta JSON en argumento %d a función '%s'Error de sintaxis en ruta JSON en argumento %d a función '%s' en la posición %dEl límite de %d en profundidad de ruta JSON se ha alcanzado en argumento %d a función '%s' en la posición %dComodines en ruta JSON no permitidos en argumento %d a función '%s'La ruta JSON debería de terminar con identificador de arreglo en argumento %d a función '%s'El argumento 2 a función '%s' debe de ser "one" o "all".InnoDB rechaza grabar en tablas con ROW_FORMAT=COMPRESSED o KEY_BLOCK_SIZE.Especficado formato GeoJSON incorrecto para función st_geomfromgeojson.Formato GeoJSON incorrecto - demasiados pocos puntos especificados para linestring.Formato GeoJSON incorrect - polígono no cerrado.La expresión de ruta '$' no está permitida en argumento %d a función '%s'.Un esclavo con el mismo server_uuid/server_id que este esclavo se ha conectado al maestro (master)Retrospectiva no soporta %s %sClaves desordenadas durante carga enormeLa carga enorme de filas se superpone con filas existentesNo puedo ejecutar actualizaciones en maestro (master) con binlog_format != ROW.MyRocks soporta sólo niveles de aislamiento READ COMMITTED y REPEATABLE READ. Por favor, cambie desde nivel de aislamiento actual %sAl desactivar chequeo de único en MyRocks, las sentencias INSERT, UPDATE, LOAD con cláusulas que actualizan o reemplazan la clave (p.ej. INSERT ON DUPLICATE KEY UPDATE, REPLACE) no se permiten. Consulte (query): %sNo puedo ejecutar actualizaciones cuando has iniciado una transacción mediante START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT.Esta transacción se ha retrocedido (rolled back) y no puede ser acometida (commit). La única operación soportada es retroceder (roll back), de tal forma que se descartarán todos los cambios pendientes. Por favor, rearranque otra transacción.MyRocks en este momento no soporta ROLLBACK TO SAVEPOINT si se están modificando filas.Sólo el nivel de aislamiento REPEATABLE READ se soporta para START TRANSACTION WITH CONSISTENT SNAPSHOT en Motor de Almacenaje RocksDB.Cotejo (collation) no soportado en columna indizada de cadena %s.%s Use cotejo binario (%s).La tabla '%s' no existe, pero existe información de metadatos dentro de MyRocks. Esto es una señal de datos inconsistentes. Por favor, revise si existe '%s.frm' e intente restaurarla si no existe.La familia de columna ('%s') bandera (%d) es diferente de una bandera existente (%d). Asigne una nueva bandera CF o no cambie la bandera CF.La duración de TTL (%s) en MyRocks debe de ser un entero sin signo no-null de 64-bit.Recibido error de estado %d desde RocksDB: %s%s, Recibido error de estado %d desde RocksDB: %sEl soporte TTL está desactivado en este momento cuando la tabla tiene una PK oculta.La columna TTL (%s) en MyRocks debe de ser un entero sin signo no-null de 64-bit, debe de existir dentro de la tabla y debe de tener una duración ttl acompañante.La opcion de familia de columna por-índice está obsoletaMyRocks no pudo crear nuevas definiciones de clave durante 'alter'.MyRocks falló al poblar clave secundaria duante el 'alter'.Las funciones de ventana no se pueden usar como argumentos para agrupar funciones.Paquete OK demasiado grandeFormato GeoJSON incorrecto - arreglo vacío de coordenadas.MyRocks no soporta en la actualidad cotejos con atributo "No pad".Tipos de datos de parámetro ilegales %s y %s para operación '%s'Tipo de dato %s de parámetro ilegal para operación '%s'Contador incorrecto de parámetro para cursor '%-.192s'Variable de sistema con estructura desconocida o variable de rutina ROW '%-.*s'La variable de fila '%-.192s' no tiene un campo '%-.192s'Identificador END '%-.192s' no coincide con '%-.192s'La secuencia '%-.64s.%-.64s' se ha agotadoLa secuencia '%-.64s.%-.64s' tiene un valor fuera de rango para las opcionesLa estuctura de tabla de secuencia '%-.64s.%-.64s' es inválida (%s)Error en acceso a secuencia '%-.64s.%-.64s'Las secuencias requieren binlog_format mixto o fila'%-.64s.%-.64s' no es una SECUENCIA'%-.192s' no es una SECUENCIASECUENCIA desconocida: '%-.300s'VISTA desconocida: '%-.300s'INSERT equivocado dentro de SEQUENCE. Uno sólo puede hacer INSERT único en tabla dentro de un objeto de secuencia (como con volcado-mariadb). Si desea cambiar la SECUENCIA, use ALTER SEQUENCE en su lugar.En la línea %u en %sLa subrutina '%-.192s' está declarada en la especificación del paquete pero no está definida en el cuerpo del paqueteLa subrutina '%-.192s' tiene una declaración adelantada pero no está definidaUna columna comprimida '%-.192s' no se puede usar en especificación de claveMétodo de compresión desconocido: %sEl constructor del valor de tabla usado tiene un número diferente de valoresLa referencia a campo '%-.192s' no se puede usar en constructor de valor de tablaSe requiere de tipo de dato numérico para función %sEl argumento de la función %s no es una constante para una particiónEl argumento de la función %s no pertenece al rango [0,1]La función %s sólo acepta argumentos que se puedan convertir a tipos numéricosInstrucción específica de agregación (FETCH GROUP NEXT ROW) usada en contexto equivocadoFalta instrucción específica de agregación (FETCH GROUP NEXT ROW) de la función de agregaciónEl límite sólo acepta valores enterosUna columna invisible %`s debe de tener valor por defectoFilas coincidentes: %ld Cambiadas: %ld Insertadas: %ld Avisos: %ld%`s debe de ser del tipo %s para tabla versionada del sistema %`sNo se soporta versionado de sistema de transacción precisa para %`sNunca debería vd de ver estoTipo de partición equivocada, tipo esperado: %`sTabla versionada %`s.%`s: última partición HISTORY (%`s) fuera de %s, necesita de más particiones HISTORYParámetros que quizás faltan: %sSólo se pueden eliminar viejas particiones al rotar mediante INTERVALNunca debería vd de ver estoLa partición %`s contiene datos no históricosNo permitido para versionado del sistema %`s.%`s. Cambie @@system_versioning_alter_history para proceder con ALTER.No permitido para versionado del sistema %`s.%`s. Cambio a/desde motor de versionado nativo no soportado.Selector de rango SYSTEM_TIME no permitidoCláusulas conflictivas FOR SYSTEM_TIME en WITH RECURSIVELa tabla %`s debe de tener al menos una columna versionadaLa tabla %`s no es versionada del sistemaParámetros equivocados para %`s: falta '%s'PERIOD FOR SYSTEM_TIME debe de usar columnas %`s y %`sParámetros equivocados para particionado %`s: valor equivocado para '%s'Particiones equivocadas para %`s: debe de tener al menos una HISTORY y exactamente un último CURRENTTRX_ID %llu no hallado en `mysql.transaction_registry`No puedo cambiar campo de versionado de sistema %`sNo puedo DROP SYSTEM VERSIONING para la tabla %`s particionada BY SYSTEM_TIMENo se soportan las tablas versionadas del sistema en la base de datos %`sEl registro de transaciones está desactivadoDuplicada FILA %s columna %`sLa tabla %`s ya es versionada del sistemaNunca debería vd de ver estoLas tablas versionadas del sistema no soportan %sLas tablas versionadas del sistemas de transacción precisa no soportan particionado mediante ROW START o ROW ENDEl fichero/archivo índice para la tabla '%-.192s' está llenoLa columna %`s.%`s no se pude cambiar más de ua vez en una sentencia UPDATE únicaFila sin elementos no se permite en constructor de valor de tabla en este contextoLas particiones SYSTEM_TIME en la tabla %`s no soportan consulta (query) histórica%s índice %`s no soporta esta operaciónCambiar las opciones de tabla requiere que la tabla sea reconstruidaNo puedo ejecutar el comando cuando vd tiene activo un BACKUP STAGEVd debe de arracar respaldo mediante "BACKUP STAGE START"La fase de respaldo '%s' es la misma o anterior a la fase de respaldo actual '%s'La fase de respaldo '%s' ha falladoFase de respaldo desconocida: '%s'. La fase debería de ser una de START, FLUSH, BLOCK_DDL, BLOCK_COMMIT o ENDEl usuario está bloqueado a causa de demasiados errores de credenciales; desbloquee mediante 'ALTER USER / FLUSH PRIVILEGES'Acceso denegado, esta cuenta está bloqueadaUna tabla de período de momento-de-aplicación no puede ser temporalLos campos de PERIOD FOR %`s tienen tipos diferentesNo se puede especificar más de un período de momento de aplicaciónEl campo de período %`s no puede ser %sEl período %`s no se ha hallado en la tablaLa columna %`s usada en período %`s especificado en lista de actualizar SETNo puedo DROP CONSTRAINT `%s`. Use DROP PERIOD `%s` para estoLa parte de clave especificada es demasiado larga; el tamaño máximo de la parte de clave es de %u bytesEl comentario para la base de datos '%-.64s' es demasiado largo (máx = %u)Tipo de datos desconocido: '%-.64s'El operador no existe: '%-.128s'En la historia de la tabla `%s.%s` el inicio de fila '%s' es posterior al fin de fila '%s'%`s: STARTS es posterior al momento de consulta (query), la primera partición de historia puede exceder el valor INTERVALLa replicación en Galera no está soportadaEl comando usado no está permitido porque el servidor MariaDB o el cliente han desactivado la capacidad 'local infile'No se han configurado transportes seguros, imposible poner --require_secure_transport=ONHilo (thread) SQL esclavo ignoró la '%s' porque la tabla está compartidaLa columna %'s con AUTO_INCREMENT no se puede usar en índice UNIQUE %`sLa clave %`s no puede incluir de forma explícita la columna %`sLa clave %`s no puede tener WITHOUT OVERLAPS'%-.128s' no está permitido en este contextoEl motor %s no soporta retroceso (rollback). Los cambios se acometieron (commit) durante la llamada a retroceso (rollback)Una clave primaria no se puede marcar como IGNORESKIP LOCKED hace que esta sentencia sea no seguraEl campo '%s' no se puede poner para JSON_TABLE '%s'.Cada función de tabla debe de tener un alias.No puedo guardar un arreglo o un objeto en la columna escalar '%s' de JSON_TABLE '%s'.No puedo guardar múltiples coincidencias de la ruta en la columna '%s' de JSON_TABLE '%s'.FETCH ... WITH TIES requiere que esté presente la cláusula ORDER BYEliminado disparador huérfano '%-.64s', creado originálmente para la tabla: '%-.192s'El motor de almacenaje %s está desactivadoPKAh[Q33danish/errmsg.sysnu[)o =014;>OP.'2,"-./42M8-.>4$-$@"A5IYP%(9:&#1)) A6%'%/*%"::?2CLO*"8Y9UK$>iJJ&` D0A2! 0, %%Q&@`>x$-1%=0'l8Rg:1J!!FOe_-+a@b+J=0.DQKRL<FH_-)MGi))D7&23577b#?&'@u:P_m]hq:Q(ABIK-JC7+AE$')>AA$BVJI/9-,"1LF$3.$!6+%&,*Ag.3oa-LN.*'A/CG-TXG=!A2oR4RU5,y.E *)2%D,5'<%' =!"!$40F-"(-7:BP7&"5%/4ANH<2;/!-S05&>"6%!2*+!L2-+D#2&ND07[;]2W53)E<067-c-Dy'IN8:>OQ0__fH>'5#)P@PC;JF8EcW!F0N 66-*8 A:M%w7_IZG75@CFa"B1`,5F8:2P@;b'2H-@%&5;[j;>%)8!5HrB:;"(/6MX38}< +(= ,)@W?$`L.7'2Pi?,4!D4%02C>>?+8|80f)%,6%45-&1Z)/"@I+1%#3>n'l4422m  (6 #*)++!?'&\K)8**ENG9{|[ce]:;);7!_UI;3;!7Jq9B"7!FLH<WkT;B54 V/b8Eh<:8<-".aF=JM>-1>?R57F|m_=INnr;hL*&SzS^<9FHGz4=@7?>{dW.#*S,EED6fi?)i"K\[SK^g>08_*,/(@31UL09!('i,g"94a9JlEH]b`C6:?M05-B4>4,:.\[O`>M`0-<?+.A^@DUdu!KL(#>3;74.+/6 @B-<20>oA;2QY#C*3d6t5ZNk=1(rB+-*)GMOT)1&&0,(%)%'+,[*Q8D&,+7?J37PAA>C7&/?(2%1),'-4E#P?9(BL<IOf<IYCN4MDD/DV!$%;ypL|PJ*.>7:6B6F:2.C72%<9&."eB?BC->?LNY"/>6?,a:+jk*62"'4;V6+H>!&*`+QOF-8<0>`d&2.5!;:A5#@X!nQ:A-%)Q)(-)PP;IhashchkisamchkNEJJAKan ikke oprette filen '%-.200s' (Fejlkode: %M)Kan ikke oprette tabellen %`s.%`s (Fejlkode: %M)Kan ikke oprette databasen '%-.192s' (Fejlkode: %M)Kan ikke oprette databasen '%-.192s'; databasen eksistererKan ikke slette (droppe) '%-.192s'; databasen eksisterer ikkeFejl ved sletning (drop) af databasen (kan ikke slette '%-.192s', Fejlkode %M)Fejl ved sletting af database (kan ikke slette folderen '%-.192s', Fejlkode %M)Fejl ved sletning af '%-.192s' (Fejlkode: %M)Kan ikke læse posten i systemfolderenKan ikke læse status af '%-.200s' (Fejlkode: %M)Kan ikke læse aktive folder (Fejlkode: %M)Kan ikke låse fil (Fejlkode: %M)Kan ikke åbne fil: '%-.200s' (Fejlkode: %M)Kan ikke finde fila: '%-.200s' (Fejlkode: %M)Kan ikke læse folder '%-.192s' (Fejlkode: %M)Kan ikke skifte folder til '%-.192s' (Fejlkode: %M)Posten er ændret siden sidste læsning '%-.192s'Ikke mere diskplads (%s). Venter på at få frigjort plads... (Fejlkode: %M)Kan ikke skrive, flere ens nøgler i tabellen '%-.192s'Fejl ved lukning af '%-.192s' (Fejlkode: %M)Fejl ved læsning af '%-.200s' (Fejlkode: %M)Fejl ved omdøbning af '%-.210s' til '%-.210s' (Fejlkode: %M)Fejl ved skriving av filen '%-.200s' (Fejlkode: %M)'%-.192s' er låst mod opdateringerSortering afbrudtView '%-.192s' eksisterer ikke for '%-.192s'Got error %M from storage engine %sStorage engine %s of the table %`s.%`s doesn't have this optionKan ikke finde posten i '%-.192s'Forkert indhold i: '%-.200s'Fejl i indeksfilen til tabellen '%-.200s'; prøv at reparere denGammel indeksfil for tabellen '%-.192s'; reparer den'%-.192s' er skrivebeskyttetIkke mere hukommelse. Genstart serveren og prøv igen (mangler %d bytes)Ikke mere sorteringshukommelse. Øg sorteringshukommelse (sort buffer size) for serverenUventet afslutning på fil (eof) ved læsning af filen '%-.192s' (Fejlkode: %M)For mange forbindelser (connections)Udgået for tråde/hukommelseKan ikke få værtsnavn for din adresseForkert håndtryk (handshake)Adgang nægtet bruger: '%s'@'%s' til databasen '%-.192s'Adgang nægtet bruger: '%s'@'%s' (Bruger adgangskode: %s)Ingen database valgtUkendt kommandoKolonne '%-.192s' kan ikke være NULLUkendt database '%-.192s'Tabellen '%-.192s' findes alleredeUkendt tabel '%-.100T'Felt: '%-.192s' i tabel %-.192s er ikke entydigtDatabase nedlukning er i gangUkendt kolonne '%-.192s' i tabel %-.192sBrugte '%-.192s' som ikke var i group byKan ikke gruppere på '%-.192s'Udtrykket har summer (sum) funktioner og kolonner i samme udtrykKolonne tæller stemmer ikke med antallet af værdierNavnet '%-.100T' er for langtFeltnavnet '%-.192s' findes alleredeIndeksnavnet '%-.192s' findes alleredeEns værdier '%-.192T' for indeks %dForkert kolonnespecifikaton for felt '%-.192s'%s nær '%-.80T' på linje %dForespørgsel var tomTabellen/aliaset: '%-.192s' er ikke uniktUgyldig standardværdi for '%-.192s'Flere primærnøgler specificeretFor mange nøgler specificeret. Kun %d nøgler må brugesFor mange nøgledele specificeret. Kun %d dele må brugesSpecificeret nøgle var for lang. Maksimal nøglelængde er %dNøglefeltet '%-.192s' eksisterer ikke i tabellenBLOB column %`s can't be used in key specification in the %s tableFor stor feltlængde for kolonne '%-.192s' (maks = %lu). Brug BLOB i stedetDer kan kun specificeres eet AUTO_INCREMENT-felt, og det skal være indekseretCould not delete gtid domain. Reason: %s.%s (%s): Normal nedlukning%s: Fangede signal %d. Afslutter!%s: Server lukket%s: Forceret nedlukning af tråd: %ld bruger: '%-.48s'Kan ikke oprette IP socketTabellen '%-.192s' har ikke den nøgle, som blev brugt i CREATE INDEX. Genopret tabellenFelt adskiller er ikke som forventet, se dokumentationenMan kan ikke bruge faste feltlængder med BLOB. Brug i stedet 'fields terminated by'Filen '%-.128s' skal være i database-folderen, eller kunne læses af alleFilen '%-.200s' eksisterer alleredePoster: %ld Fjernet: %ld Sprunget over: %ld Advarsler: %ldPoster: %ld Ens: %ldForkert indeksdel. Den anvendte nøgledel er ikke en streng eller længden er større end nøglelængdenMan kan ikke slette alle felter med ALTER TABLE. Brug DROP TABLE i stedetKan ikke udføre DROP %s %`-.192s. Undersøg om feltet/nøglen eksistererPoster: %ld Ens: %ld Advarsler: %ldTable '%-.192s' is specified twice, both as a target for '%s' and as a separate source for dataUkendt tråd id: %luDu er ikke ejer af tråden %lldIngen tabeller i brugFor mange tekststrenge til specifikationen af SET i kolonne %-.192sKan ikke lave unikt log-filnavn %-.200s.(1-999)Tabellen '%-.192s' var låst med READ lås og kan ikke opdateresTabellen '%-.192s' var ikke låst med LOCK TABLESYou should never see itUgyldigt database navn '%-.100T'Ugyldigt tabel navn '%-.100s'SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET SQL_BIG_SELECTS=1 hvis udtrykket er korrektUkendt fejlUkendt procedure %-.192sForkert antal parametre til proceduren %-.192sForkert(e) parametre til proceduren %-.192sUkendt tabel '%-.192s' i %-.32sFeltet '%-.192s' er anvendt to gangeForkert brug af grupperings-funktionTabellen '%-.192s' bruger et filtypenavn som ikke findes i denne MariaDB versionEn tabel skal have mindst een kolonneTabellen '%-.192s' er fuldUkendt tegnsæt: '%-.64s'For mange tabeller. MariaDB kan kun bruge %d tabeller i et joinFor mange felterFor store poster. Max post størrelse, uden BLOB's, er %ld. Du må lave nogle felter til BLOB'sThread stack brugt: Brugt: %ld af en %ld stak. Brug 'mariadbd --thread_stack=#' for at allokere en større stak om nødvendigtKrydsreferencer fundet i OUTER JOIN; check dine ON conditionsTable handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handlerKan ikke læse funktionen '%-.192s'Kan ikke starte funktionen '%-.192s'; %-.80sAngivelse af sti ikke tilladt for delt bibliotekFunktionen '%-.192s' findes alleredeKan ikke åbne delt bibliotek '%-.192s' (errno: %d, %-.128s)Kan ikke finde funktionen '%-.128s' i bibliotekFunktionen '%-.192s' er ikke defineretVærten '%-.64s' er blokeret på grund af mange fejlforespørgsler. Lås op med 'mariadb-admin flush-hosts'Værten '%-.64s' kan ikke tilkoble denne MariaDB-serverDu bruger MariaDB som anonym bruger. Anonyme brugere må ikke ændre adgangskoderDu skal have tilladelse til at opdatere tabeller i MariaDB databasen for at ændre andres adgangskoderKan ikke finde nogen tilsvarende poster i bruger tabellenPoster fundet: %ld Ændret: %ld Advarsler: %ldKan ikke danne en ny tråd (fejl nr. %M). Hvis computeren ikke er løbet tør for hukommelse, kan du se i brugervejledningen for en mulig operativ-system - afhængig fejlKolonne antallet stemmer ikke overens med antallet af værdier i post %luKan ikke genåbne tabel '%-.192sForkert brug af nulværdi (NULL)Fik fejl '%s' fra regexpSammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikatDenne tilladelse findes ikke for brugeren '%-.48s' på vært '%-.64s'%-.100T-kommandoen er ikke tilladt for brugeren '%s'@'%s' for tabellen %`s.%`s%-.32s-kommandoen er ikke tilladt for brugeren '%s'@'%s' for kolonne '%-.192s' in tabellen '%-.192s'Forkert GRANT/REVOKE kommando. Se i brugervejledningen hvilke privilegier der kan specificeresVærts- eller brugernavn for langt til GRANTTabellen '%-.192s.%-.192s' eksisterer ikkeDenne tilladelse eksisterer ikke for brugeren '%-.48s' på vært '%-.64s' for tabellen '%-.192s'Den brugte kommando er ikke tilladt med denne udgave af MariaDBDer er en fejl i SQL syntaksenForsinket indsættelse tråden (delayed insert thread) kunne ikke opnå lås på tabellen %-.192sFor mange slettede tråde (threads) i brugAfbrudt forbindelse %ld til database: '%-.192s' bruger: '%-.48s' (%-.64s)Modtog en datapakke som var større end 'max_allowed_packet'Fik læsefejl fra forbindelse (connection pipe)Fik fejlmeddelelse fra fcntl()Modtog ikke datapakker i korrekt rækkefølgeKunne ikke dekomprimere kommunikations-pakke (communication packet)Fik fejlmeddelelse ved læsning af kommunikations-pakker (communication packets)Timeout-fejl ved læsning af kommunukations-pakker (communication packets)Fik fejlmeddelelse ved skrivning af kommunukations-pakker (communication packets)Timeout-fejl ved skrivning af kommunukations-pakker (communication packets)Strengen med resultater er større end 'max_allowed_packet'Denne tabeltype (%s) understøtter ikke brug af BLOB og TEXT kolonnerDenne tabeltype understøtter (%s) ikke brug af AUTO_INCREMENT kolonnerINSERT DELAYED kan ikke bruges med tabellen '%-.192s', fordi tabellen er låst med LOCK TABLESForkert kolonnenavn '%-.100s'The storage engine %s can't index column %`sTabellerne i MERGE er ikke defineret ensKan ikke skrive til tabellen '%-.192s' fordi det vil bryde CONSTRAINT reglerBLOB kolonnen '%-.192s' brugt i nøglespecifikation uden nøglelængdeAlle dele af en PRIMARY KEY skal være NOT NULL; Hvis du skal bruge NULL i nøglen, brug UNIQUE istedetResultatet bestod af mere end een rækkeDenne tabeltype kræver en primærnøgleDenne udgave af MariaDB er ikke oversat med understøttelse af RAIDDu bruger sikker opdaterings modus ('safe update mode') og du forsøgte at opdatere en tabel uden en WHERE klausul, der gør brug af et KEY feltNøglen '%-.192s' eksisterer ikke i tabellen '%-.192s'Kan ikke åbne tabellenDenne tabeltype understøtter ikke %sDu må ikke bruge denne kommando i en transaktionModtog fejl %M mens kommandoen COMMIT blev udførtModtog fejl %M mens kommandoen ROLLBACK blev udførtModtog fejl %M mens kommandoen FLUSH_LOGS blev udførtModtog fejl %M mens kommandoen CHECKPOINT blev udførtAfbrød forbindelsen %lld til databasen '%-.192s' bruger: '%-.48s' vært: '%-.64s'%-.64s (%-.64s)You should never see itBinlog closed, cannot RESET MASTERKunne ikke genopbygge indekset for den dumpede tabel '%-.192s'Fejl fra master: '%-.64s'Netværksfejl ved læsning fra masterNetværksfejl ved skrivning til masterKan ikke finde en FULLTEXT nøgle som svarer til kolonne listenKan ikke udføre den givne kommando fordi der findes aktive, låste tabeller eller fordi der udføres en transaktionUkendt systemvariabel '%-.*s'Tabellen '%-.192s' er markeret med fejl og bør repareresTabellen '%-.192s' er markeret med fejl og sidste (automatiske?) REPAIR fejledeAdvarsel: Visse data i tabeller der ikke understøtter transaktioner kunne ikke tilbagestillesFler-udtryks transaktion krævede mere plads en 'max_binlog_cache_size' bytes. Forhøj værdien af denne variabel og prøv igenDenne handling kunne ikke udføres med kørende slave '%2$*1$s', brug først kommandoen STOP SLAVE '%2$*1$s'Denne handling kræver en kørende slave. Konfigurer en slave og brug kommandoen START SLAVEDenne server er ikke konfigureret som slave. Ret in config-filen eller brug kommandoen CHANGE MASTER TOCould not initialize master info structure for '%.*s'; more error messages can be found in the MariaDB error logKunne ikke danne en slave-tråd; check systemressourcerneBrugeren %-.64s har allerede mere end 'max_user_connections' aktive forbindelserDu må kun bruge konstantudtryk med SETLock wait timeout overskredetDet totale antal låse overstiger størrelsen på låse-tabellenUpdate lås kan ikke opnås under en READ UNCOMMITTED transaktionDROP DATABASE er ikke tilladt mens en tråd holder på globalt read lockCREATE DATABASE er ikke tilladt mens en tråd holder på globalt read lockIncorrect arguments to %s'%s'@'%s' is not allowed to create new usersIncorrect table definition; all MERGE tables must be in the same databaseDeadlock found when trying to get lock; try restarting transactionThe storage engine %s doesn't support FULLTEXT indexesCannot add foreign key constraint for `%s`Cannot add or update a child row: a foreign key constraint failsCannot delete or update a parent row: a foreign key constraint failsError connecting to master: %-.128sError running query on master: %-.128sError when executing command %s: %-.128sIncorrect usage of %s and %sThe used SELECT statements have a different number of columnsCan't execute the query because you have a conflicting read lockMixing of transactional and non-transactional tables is disabledOption '%s' used twice in statementUser '%-.64s' has exceeded the '%s' resource (current value: %ld)Access denied; you need (at least one of) the %-.128s privilege(s) for this operationVariable '%-.64s' is a SESSION variable and can't be used with SET GLOBALVariable '%-.64s' is a GLOBAL variable and should be set with SET GLOBALVariable '%-.64s' doesn't have a default valueVariable '%-.64s' can't be set to the value of '%-.200T'Incorrect argument type to variable '%-.64s'Variable '%-.64s' can only be set, not readIncorrect usage/placement of '%s'This version of MariaDB doesn't yet support '%s'Got fatal error %d from master when reading data from binary log: '%-.320s'Slave SQL thread ignored the query because of replicate-*-table rulesVariable '%-.192s' is a %s variableIncorrect foreign key definition for '%-.192s': %sKey reference and table reference don't matchOperand should contain %d column(s)Subquery returns more than 1 rowUnknown prepared statement handler (%.*s) given to %sHelp database is corrupt or does not existCyclic reference on subqueriesConverting column '%s' from %s to %sReference '%-.64s' not supported (%s)Every derived table must have its own aliasSelect %u was reduced during optimizationTable '%-.192s' from one of the SELECTs cannot be used in %-.32sClient does not support authentication protocol requested by server; consider upgrading MariaDB clientAll parts of a SPATIAL index must be NOT NULLCOLLATION '%s' is not valid for CHARACTER SET '%s'Slave is already runningSlave already has been stoppedUncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)ZLIB: Not enough memoryZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)ZLIB: Input data corruptedRow %u was cut by %s)Row %lu doesn't contain data for all columnsRow %lu was truncated; it contained more data than there were input columnsColumn set to default value; NULL supplied to NOT NULL column '%s' at row %luOut of range value for column '%s' at row %luData truncated for column '%s' at row %luUsing storage engine %s for table '%s'Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'Cannot drop one or more of the requested usersCan't revoke all privileges for one or more of the requested usersIllegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'Illegal mix of collations for operation '%s'Variable '%-.64s' is not a variable component (can't be used as XXXX.variable_name)Unknown collation: '%-.64s'SSL parameters in CHANGE MASTER are ignored because this MariaDB slave was compiled without SSL support; they can be used later if MariaDB slave with SSL is startedServer is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new formatField or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%dIncorrect parameter or combination of parameters for START SLAVE UNTILIt is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mariadbd restartSQL thread is not to be started so UNTIL options are ignoredIncorrect index name '%-.100s'Incorrect catalog name '%-.100s'Query cache failed to set size %llu; new query cache size is %luColumn '%-.192s' cannot be part of FULLTEXT indexUnknown key cache '%-.100s'MariaDB is started in --skip-name-resolve mode; you must restart it without this switch for this grant to workUnknown storage engine '%s''%s' is deprecated and will be removed in a future release. Please use %s insteadThe target table %-.100s of the %s is not updatableThe '%s' feature is disabled; you need MariaDB built with '%s' to have it workingThe MariaDB server is running with the %s option so it cannot execute this statementColumn '%-.100s' has duplicated value '%-.64s' in %sTruncated incorrect %-.32T value: '%-.128T'Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clauseInvalid ON UPDATE clause for '%-.192s' columnThis command is not supported in the prepared statement protocol yetModtog fejl %d '%-.200s' fra %sModtog temporary fejl %d '%-.200s' fra %sUnknown or incorrect time zone: '%-.64s'Invalid TIMESTAMP value in column '%s' at row %luInvalid %s character string: '%.64T'Result of %s() was larger than max_allowed_packet (%ld) - truncatedConflicting declarations: '%s%s' and '%s%s'Can't create a %s from within another stored routine%s %s already exists%s %s does not existFailed to DROP %s %sFailed to CREATE %s %s%s with no matching label: %sRedefining label %sEnd-label %s without matchReferring to uninitialized variable %sPROCEDURE %s can't return a result set in the given contextRETURN is only allowed in a FUNCTION%s is not allowed in stored proceduresThe update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MariaDB 5.6The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN. This option will be removed in MariaDB 5.6Query execution was interruptedIncorrect number of arguments for %s %s; expected %u, got %uUndefined CONDITION: %sNo RETURN found in FUNCTION %sFUNCTION %s ended without RETURNCursor statement must be a SELECTCursor SELECT must not have INTOUndefined CURSOR: %sCursor is already openCursor is not openUndeclared variable: %sIncorrect number of FETCH variablesNo data - zero rows fetched, selected, or processedDuplicate parameter: %sDuplicate variable: %sDuplicate condition: %sDuplicate cursor: %sFailed to ALTER %s %sSubquery value not supported%s is not allowed in stored function or triggerVariable or condition declaration after cursor or handler declarationCursor declaration after handler declarationCase not found for CASE statementConfiguration file '%-.192s' is too bigMalformed file type header in file '%-.192s'Unexpected end of file while parsing comment '%-.200s'Error while parsing parameter '%-.192s' (line: '%-.192s')Unexpected end of file while skipping unknown parameter '%-.192s'ANALYZE/EXPLAIN/SHOW can not be issued; lacking privileges for underlying tableFile '%-.192s' has unknown type '%-.64s' in its header'%-.192s.%-.192s' is not of type '%s'Column '%-.192s' is not updatableView's SELECT contains a subquery in the FROM clauseView's SELECT contains a '%s' clauseView's SELECT contains a variable or parameterView's SELECT refers to a temporary table '%-.192s'View's SELECT and view's field list have different column countsView merge algorithm can't be used here for now (assumed undefined algorithm)View being updated does not have complete key of underlying table in itView '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use themCan't drop or alter a %s from within another stored routineGOTO is not allowed in a stored procedure handlerTrigger '%s' already existsTrigger does not existTrigger's '%-.192s' is a view, temporary table or sequenceUpdating of %s row is not allowed in %striggerThere is no %s row in %s triggerField '%-.192s' doesn't have a default valueDivision by 0Incorrect %-.32s value: '%-.128T' for column `%.192s`.`%.192s`.`%.192s` at row %luIllegal %s '%-.192T' value found during parsingCHECK OPTION on non-updatable view %`-.192s.%`-.192sCHECK OPTION failed %`-.192s.%`-.192s%-.32s command denied to user '%s'@'%s' for routine '%-.192s'Failed purging old relay logs: %sPassword hash should be a %d-digit hexadecimal numberTarget log not found in binlog indexI/O error reading log index fileServer configuration does not permit binlog purgeFailed on fseek()Fatal error during log purgeA purgeable log is in use, will not purgeUnknown error during log purgeFailed initializing relay log position: %sYou are not using binary loggingThe '%-.64s' syntax is reserved for purposes internal to the MariaDB serverWSAStartup FailedCan't handle procedures with different groups yetSelect must have a group with this procedureCan't use ORDER clause with this procedureBinary logging and replication forbid changing the global server %sCan't map file: %-.200s, errno: %MWrong magic in %-.64sPrepared statement contains too many placeholdersKey part '%-.192s' length cannot be 0View text checksum failedCan not modify more than one base table through a join view '%-.192s.%-.192s'Can not insert into join view '%-.192s.%-.192s' without fields listCan not delete from join view '%-.192s.%-.192s'Operation %s failed for %.256sXAER_NOTA: Unknown XIDXAER_INVAL: Invalid arguments (or unsupported command)XAER_RMFAIL: The command cannot be executed when global transaction is in the %.64s stateXAER_OUTSIDE: Some work is done outside global transactionXAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistencyXA_RBROLLBACK: Transaction branch was rolled backThere is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'Failed to grant EXECUTE and ALTER ROUTINE privilegesFailed to revoke all privileges to dropped routineData too long for column '%s' at row %luBad SQLSTATE: '%s'%s: ready for connections. Version: '%s' socket: '%s' port: %d %sCan't load value from file with fixed size rows to variableYou are not allowed to create a user with GRANTIncorrect %-.32s value: '%-.128T' for function %-.32sTable definition has changed, please retry transactionDuplicate handler declared in the same blockOUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE triggerNot allowed to return a result set from a %sCannot get geometry object from data you send to the GEOMETRY fieldA routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changesThis function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute itThe statement (%lu) has no open cursorExplicit or implicit commit is not allowed in stored function or triggerField of view '%-.192s.%-.192s' underlying table doesn't have a default valueRecursive stored functions and triggers are not allowedToo big scale %llu specified for '%-.192s'. Maximum is %uToo big precision %llu specified for '%-.192s'. Maximum is %uFor float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s')You can't combine write-locking of system tables with other tables or lock typesUnable to connect to foreign data source: %.64sThere was a problem processing the query on the foreign data source. Data source error: %-.64sThe foreign data source you are trying to reference does not exist. Data source error: %-.64sCan't create federated table. The data source connection string '%-.64s' is not in the correct formatThe data source connection string '%-.64s' is not in the correct formatCan't create federated table. Foreign data src error: %-.64sTrigger in wrong schemaThread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Consider increasing the thread_stack system variable.Routine body for '%-.100s' is too longCannot drop default keycacheDisplay width out of range for '%-.192s' (max = %lu)XAER_DUPID: The XID already existsDatetime function: %-.32s field overflowCan't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/triggerThe definition of table '%-.192s' prevents operation %-.192s on table '%-.192s'The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive mannerNot allowed to set autocommit from a stored function or triggerInvalid definerView '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definerThe user specified as a definer ('%-.64s'@'%-.64s') does not existChanging schema from '%-.192s' to '%-.192s' is not allowedCannot delete or update a parent row: a foreign key constraint fails (%s)Cannot add or update a child row: a foreign key constraint fails (%s)Variable '%-.64s' must be quoted with `...`, or renamedNo definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger'%-.192s' has an old format, you should re-create the '%s' object(s)Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.192sFailed to load routine %-.192s (internal code %d). For more details, run SHOW WARNINGSIncorrect routine name '%-.192s'Upgrade required. Please do "REPAIR %s %`s" or dump/reload to fix it!AGGREGATE is not supported for stored functionsCan't create more than max_prepared_stmt_count statements (current value: %u)%`s.%`s contains view recursionNon-grouping field '%-.192s' is used in %-.64s clauseThe storage engine %s doesn't support SPATIAL indexesTriggers can not be created on system tablesLeading spaces are removed from name '%s'Failed to read auto-increment value from storage engineuser namehost nameString '%-.70T' is too long for %s (should be no longer than %d)The target table %-.100s of the %s is not insertable-intoTable '%-.64s' is differently defined or of non-MyISAM type or doesn't existToo high level of nesting for selectName '%-.64s' has become ''First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BYCannot create foreign server '%s' as it already existsThe foreign server name you are trying to reference does not exist. Data source error: %-.64sTable storage engine '%-.64s' does not support the create option '%.64s'Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partitionOnly %-.64s PARTITIONING can use VALUES %-.64s in partition definitionMAXVALUE can only be used in last partition definitionSubpartitions can only be hash partitions and by keyMust define subpartitions on all partitions if on one partitionWrong number of partitions defined, mismatch with previous settingWrong number of subpartitions defined, mismatch with previous settingConstant, random or timezone-dependent expressions in (sub)partitioning function are not allowedExpression in %s must be constantField in list of fields for partition function not found in tableList of fields is only allowed in KEY partitionsThe partition info in the frm file is not consistent with what can be written into the frm fileThe %-.192s function returns the wrong typeFor %-.64s partitions each partition must be definedVALUES LESS THAN value must be strictly increasing for each partitionVALUES value must be of same type as partition functionMultiple definition of same constant in list partitioningPartitioning can not be used stand-alone in queryThe mix of handlers in the partitions is not allowed in this version of MariaDBFor the partitioned engine it is necessary to define all %-.64sToo many partitions (including subpartitions) were definedIt is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioningFailed to create specific handler fileA BLOB field is not allowed in partition functionA %-.192s must include all columns in the table's partitioning functionNumber of %-.64s = 0 is not an allowed valuePartition management on a not partitioned table is not possiblePartitioned tables do not support %sError in list of partitions to %-.64sCannot remove all partitions, use DROP TABLE insteadCOALESCE PARTITION can only be used on HASH/KEY partitionsREORGANIZE PARTITION can only be used to reorganize partitions not to change their numbersREORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs%-.64s PARTITION can only be used on RANGE/LIST partitionsTrying to Add partition(s) with wrong number of subpartitionsAt least one partition must be addedAt least one partition must be coalescedMore partitions to reorganize than there are partitionsDuplicate partition name %-.192sIt is not allowed to shut off binlog on this commandWhen reorganizing a set of partitions they must be in consecutive orderReorganize of range partitions cannot change total ranges except for last partition where it can extend the rangePartition function not supported in this version for this handlerPartition state cannot be defined from CREATE/ALTER TABLEThe %-.64s handler only supports 32 bit integers in VALUESPlugin '%-.192s' is not loadedIncorrect %-.32s value: '%-.128T'Table has no partition for value %-.64sIt is not allowed to specify %s more than onceFailed to create %sFailed to drop %sThe handler doesn't support autoextend of tablespacesA size parameter was incorrectly specified, either number or on the form 10MThe size number was correct but we don't allow the digit part to be more than 2 billionFailed to alter: %sWriting one row to the row-based binary log failedTable definition on master and slave does not match: %sSlave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log eventsEvent '%-.192s' already existsFailed to store event %s. Error code %M from storage engineUnknown event '%-.192s'Failed to alter event '%-.192s'Failed to drop %sINTERVAL is either not positive or too bigENDS is either invalid or before STARTSEvent execution time is in the past. Event has been disabledFailed to open mysql.eventNo datetime expression providedYou should never see itYou should never see itFailed to delete the event from mysql.eventError during compilation of event's bodySame old and new event nameData for column '%s' too longCannot drop index '%-.192s': needed in a foreign key constraintThe syntax '%s' is deprecated and will be removed in MariaDB %s. Please use %s insteadYou can't write-lock a log table. Only read access is possibleYou can't use locks with log tablesYou should never see itColumn count of mysql.%s is wrong. Expected %d, found %d. Created with MariaDB %d, now running %d. Please use mariadb-upgrade to fix this errorCannot switch out of the row-based binary log format when the session has open temporary tablesCannot change the binary logging format inside a stored function or triggerYou should never see itCannot create temporary table with partitionsPartition constant is out of partition function domainThis partition function is not allowedError in DDL logNot allowed to use NULL value in VALUES LESS THANIncorrect partition nameTransaction characteristics can't be changed while a transaction is in progressALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%-.192T' for key '%-.192s'Internal scheduler error %dError during starting/stopping of the scheduler. Error code %MEngine cannot be used in partitioned tablesCannot activate '%-.64s' logThe server was not built with row-based replicationDecoding of base64 string failedRecursion of EVENT DDL statements is forbidden when body is presentCannot proceed, because event scheduler is disabledOnly integers allowed as number hereStorage engine %s cannot be used for log tablesYou cannot '%s' a log table if logging is enabledCannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'Incorrect parameter count in the call to native function '%-.192s'Incorrect parameters in the call to native function '%-.192s'Incorrect parameters in the call to stored function '%-.192s'This function '%-.192s' has the same name as a native functionEns værdier '%-.64T' for indeks '%-.192s'Too many files opened, please execute the command againEvent execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creationEvent execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the futureThe incident %s occurred on the master. Message: %-.64sTable has no partition for some existing valuesUnsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. %sFatal error: %sRelay log read failure: %sRelay log write failure: %sFailed to create %sMaster command %s failed: %sBinary logging not possible. Message: %sView %`s.%`s has no creation contextCreation context of view %`s.%`s is invalidCreation context of stored routine %`s.%`s is invalidCorrupted TRG file for table %`s.%`sTriggers for table %`s.%`s have no creation contextTrigger creation context of table %`s.%`s is invalidCreation context of event %`s.%`s is invalidCannot open table for trigger %`s.%`sCannot create stored routine %`s. Check warningsYou should never see itThe BINLOG statement of type %s was not preceded by a format description BINLOG statementCorrupted replication event was detectedInvalid column reference (%-.64s) in LOAD DATABeing purged log %s was not foundXA_RBTIMEOUT: Transaction branch was rolled back: took too longXA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detectedPrepared statement needs to be re-preparedDELAYED option not supported for table '%-.192s'There is no master connection '%.*s'<%-.64s> option ignoredBuilt-in plugins cannot be deletedPlugin is busy and will be uninstalled on shutdown%s variable '%s' is read-only. Use SET %s to assign the valueStorage engine %s does not support rollback for this statement. Transaction rolled back and must be restartedUnexpected master's heartbeat data: %sThe requested value for the heartbeat period is either negative or exceeds the maximum allowed (%u seconds)You should never see itError in parsing conflict function. Message: %-.64sWrite to exceptions table failed. Message: %-.128s"Comment for table '%-.64s' is too long (max = %u)Comment for field '%-.64s' is too long (max = %u)FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference ManualDatabaseTablePartitionSubpartitionTemporaryRenamedToo many active concurrent transactionsNon-ASCII separator arguments are not fully supporteddebug sync point wait timed outdebug sync point hit limit reachedDuplicate condition information item '%s'Unhandled user-defined warning conditionUnhandled user-defined not found conditionUnhandled user-defined exception conditionRESIGNAL when handler not activeSIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATEData truncated for condition item '%s'Data too long for condition item '%s'Unknown locale: '%-.64s'The requested server id %d clashes with the slave startup option --replicate-same-server-idQuery cache is disabled; set query_cache_type to ON or DEMAND to enable itDuplicate partition field name '%-.192s'Inconsistency in usage of column lists for partitioningPartition column values of incorrect typeToo many fields in '%-.192s'Cannot use MAXVALUE as value in VALUES INCannot have more than one value for this type of %-.64s partitioningRow expressions in VALUES IN only allowed for multi-field column partitioningField '%-.192s' is of a not allowed type for this type of partitioningThe total length of the partitioning fields is too largeCannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involvedCannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based loggingCannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOG_FORMAT = MIXED. %sCannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based loggingCannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%sCannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENTCannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-loggingThe statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predictedThe statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predictedThe statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slavesStatement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctlyStatement is unsafe because it uses a UDF which may not return the same value on the slaveStatement is unsafe because it uses a system variable that may have a different value on the slaveStatement is unsafe because it uses a system function that may return a different value on the slaveStatement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction%s. Statement: %sColumn %d of table '%-.192s.%-.192s' cannot be converted from type '%-.50s' to type '%-.50s'Can't create conversion table for table '%-.192s.%-.192s'Cannot modify @@session.binlog_format inside a transactionThe path specified for %.64T is too long'%s' is deprecated and will be removed in a future releaseNative table '%-.64s'.'%-.64s' has the wrong structureInvalid performance_schema usageTable '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statementCannot modify @@session.binlog_direct_non_transactional_updates inside a transactionCannot change the binlog direct flag inside a stored function or triggerA SPATIAL index may only contain a geometrical type columnComment for index '%-.64s' is too long (max = %lu)Wait on a lock was aborted due to a pending exclusive lock%s value is out of range in '%s'A variable of a non-integer based type in LIMIT clauseMixing self-logging and non-self-logging engines in a statement is unsafeStatement accesses nontransactional table as well as transactional or temporary table, and writes to any of themCannot modify @@session.sql_log_bin inside a transactionCannot change the sql_log_bin inside a stored function or triggerFailed to read from the .par fileVALUES value for partition '%-.64s' must have type INTAdgang nægtet bruger: '%s'@'%s'SET PASSWORD is not applicable for users authenticating via %s pluginGRANT with IDENTIFIED WITH is illegal because the user %-.*s already existsCannot truncate a table referenced in a foreign key constraint (%.192s)Plugin '%s' is force_plus_permanent and can not be unloadedThe requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabledThe requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeoutMulti-row statements required more than 'max_binlog_stmt_cache_size' bytes of storage.Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'Table rebuild required. Please do "ALTER TABLE %`s FORCE" or dump/reload to fix it!The value of '%s' should be no less than the value of '%s'Index column size too large. The maximum column size is %lu bytesTrigger '%-.64s' has an error in its body: '%-.256s'Unknown trigger has an error in its body: '%-.256s'Index %s is corruptedUndo log record is too bigINSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slaveINSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slaveREPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slaveCREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slaveCREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slaveUPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slaveYou should never see itYou should never see itStatements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slaveCREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slaveINSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafeYou should never see itNot allowed for system-versioned table %`s.%`sINSERT into autoincrement field which is not the first part in the composed primary key is unsafeCannot load from %s.%s. The table is probably corruptedThe requested value %lu for the master delay exceeds the maximum %luOnly Format_description_log_event and row events are allowed in BINLOG statements (but %s was provided)Non matching attribute '%-.64s' between partition and tableTable to exchange with partition is partitioned: '%-.64s'Table to exchange with partition is temporary: '%-.64s'Subpartitioned table, use subpartition instead of partitionUnknown partition '%-.64s' in table '%-.64s'Tables have different definitionsFound a row that does not match the partitionOption binlog_cache_size (%lu) is greater than max_binlog_cache_size (%lu); setting binlog_cache_size equal to max_binlog_cache_sizeCannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'Table to exchange with partition has foreign key references: '%-.64s'Key value '%-.192s' was not found in table '%-.192s.%-.192s'Too long value for '%s'Replication event checksum verification failed while reading from networkReplication event checksum verification failed while reading from a log fileOption binlog_stmt_cache_size (%lu) is greater than max_binlog_stmt_cache_size (%lu); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_sizeCan't update table '%-.192s' while '%-.192s' is being createdPARTITION () clause on non partitioned tableFound a row not matching the given partition setYou should never see itFailure while changing the type of replication repository: %sThe creation of some temporary tables could not be rolled backSome temporary tables were dropped, but these operations could not be rolled back%s is not supported in multi-threaded slave mode. %sThe number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadataCannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s%sFULLTEXT index is not supported for partitioned tablesInvalid condition numberSending passwords in plain text without SSL/TLS is extremely insecureStoring MariaDB user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MariaDB Manual for more about this issue and possible alternativesForeign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child tableSetting authentication options is not possible when only the Slave SQL Thread is being startedThe table does not have FULLTEXT index to support this queryThe system variable %.200s cannot be set in stored functions or triggersThe system variable %.200s cannot be set when there is an ongoing transactionThe system variable @@SESSION.GTID_NEXT has the value %.200s, which is not listed in @@SESSION.GTID_NEXT_LISTWhen @@SESSION.GTID_NEXT_LIST == NULL, the system variable @@SESSION.GTID_NEXT cannot change inside a transactionThe statement 'SET %.200s' cannot invoke a stored functionThe system variable @@SESSION.GTID_NEXT cannot be 'AUTOMATIC' when @@SESSION.GTID_NEXT_LIST is non-NULLSkipping transaction %.200s because it has already been executed and loggedMalformed GTID set specification '%.200s'Malformed GTID set encodingMalformed GTID specification '%.200s'Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new server_uuidParameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is activeCHANGE MASTER TO MASTER_AUTO_POSITION = 1 can only be executed when GTID_MODE = ONCannot execute statements with implicit commit inside a transaction when GTID_NEXT != AUTOMATIC or GTID_NEXT_LIST != NULLGTID_MODE = ON or GTID_MODE = UPGRADE_STEP_2 requires ENFORCE_GTID_CONSISTENCY = 1GTID_MODE = ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updatesGTID_NEXT cannot be set to UUID:NUMBER when GTID_MODE = OFFGTID_NEXT cannot be set to ANONYMOUS when GTID_MODE = ONGTID_NEXT_LIST cannot be set to a non-NULL value when GTID_MODE = OFFFound a Gtid_log_event or Previous_gtids_log_event when GTID_MODE = OFFWhen ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tablesCREATE TABLE ... SELECT is forbidden when ENFORCE_GTID_CONSISTENCY = 1When ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1The value of GTID_MODE can only change one step at a time: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions.The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requiresGTID_NEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACKUnknown %s format name: '%s'Cannot execute statement in a READ ONLY transactionComment for table partition '%-.64s' is too long (max = %lu)Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MariaDB error logInnoDB presently supports one FULLTEXT index creation at a timeCannot create FULLTEXT index on temporary InnoDB tableColumn '%-.192s' is of wrong type for an InnoDB FULLTEXT indexIndex '%-.192s' is of wrong type for an InnoDB FULLTEXT indexCreating index '%-.192s' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try againUnknown ALGORITHM '%s'Unknown LOCK type '%s'CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTILCannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MariaDB error logCannot clean up worker info tables. Additional error messages can be found in the MariaDB error logColumn count of %s.%s is wrong. Expected %d, found %d. The table is probably corruptedSlave must silently retry current transactionYou should never see itSchema mismatch (%s)Table %-.192s in system tablespaceIO Read error: (%lu, %s) %sIO Write error: (%lu, %s) %sTablespace is missing for table '%-.192s'Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORTTablespace has been discarded for table %`sInternal error: %-.192sALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %lu : '%s'Index corrupt: %sYEAR(%lu) column type is deprecated. Creating YEAR(4) column insteadYour password does not satisfy the current policy requirements (%s)You must SET PASSWORD before executing this statementFailed to add the foreign key constraint. Missing index for constraint '%s' in the foreign table '%s'Failed to add the foreign key constraint. Missing index for constraint '%s' in the referenced table '%s'Failed to add the foreign key constraint '%s' to system tablesFailed to open the referenced table '%s'Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'Duplicate %s constraint name '%s'The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() functionCannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table %-.192sColumn '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULLDuplicate index %`s. This is deprecated and will be disallowed in a future releaseCannot change column '%-.192s': used in a foreign key constraint '%-.192s'Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'Malformed communication packetRunning in read-only modeWhen GTID_NEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET GTID_NEXT before a transaction and forgot to set GTID_NEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current GTID_NEXT is '%s'The system variable %.200s cannot be set in stored proceduresGTID_PURGED can only be set when GTID_MODE = ONGTID_PURGED can only be set when GTID_EXECUTED is emptyGTID_PURGED can only be set when there are no ongoing transactions (not even in other clients)GTID_PURGED was changed from '%s' to '%s'GTID_EXECUTED was changed from '%s' to '%s'Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT, and both replicated and non replicated tables are written to%s is not supported for this operation. Try %s%s is not supported. Reason: %s. Try %sCOPY algorithm requires a lockPartition specific operations do not yet support LOCK/ALGORITHMColumns participating in a foreign key are renamedCannot change column typeAdding foreign keys needs foreign_key_checks=OFFCreating unique indexes with IGNORE requires COPY algorithm to remove duplicate rowsDropping a primary key is not allowed without also adding a new primary keyAdding an auto-increment column requires a lockCannot replace hidden FTS_DOC_ID with a user-visible oneCannot drop or rename FTS_DOC_IDFulltext index creation requires a locksql_slave_skip_counter can not be set when the server is running with GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transactionFlere ens nøgler for indeks '%-.192s'Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'cannot convert NULL to non-constant DEFAULTYour password has expired. To log in you must change it using a client that supports expired passwordsFound a row in wrong partition %sCannot schedule event %s, relay-log name %s, position %s to Worker thread because its size %lu exceeds %lu of slave_pending_jobs_size_maxCannot CREATE FULLTEXT INDEX WITH PARSER on InnoDB tableThe binary log file '%s' is logically corrupted: %sfile %s was not purged because it was being read by %d thread(s), purged only %d out of %d filesfile %s was not purged because it is the active log fileAuto-increment value in UPDATE conflicts with internally generated valuesRow events are not logged for %s statements that modify BLACKHOLE tables in row format. Table(s): '%-.192s'Slave failed to initialize master info structure from the repositorySlave failed to initialize relay log info structure from the repositoryAccess denied trying to change to user '%-.48s'@'%-.64s' (using password: %s). DisconnectingInnoDB is in read only modeSTOP SLAVE command execution is incomplete: Slave SQL thread got the stop signal, thread is busy, SQL thread will stop once the current task is completeSTOP SLAVE command execution is incomplete: Slave IO thread got the stop signal, thread is busy, IO thread will stop once the current task is completeOperation cannot be performed. The table '%-.64s.%-.64s' is missing, corrupt or contains bad dataTemporary file write failureUpgrade index name failed, please use create index(alter table) algorithm copy to rebuild index"You should never see itFunction or expression '%s' cannot be used in the %s clause of %`sYou should never see itPrimary key cannot be defined upon a generated columnKey/Index cannot be defined on a virtual generated columnCannot define foreign key with %s clause on a generated columnThe value specified for generated column '%s' in table '%s' has been ignoredThis is not yet supported for generated columnsYou should never see itYou should never see it%s storage engine does not support generated columnsUnknown option '%-.64s'Incorrect value '%-.64T' for option '%-.64s'You should never see itYou should never see itYou should never see itGot overflow when converting '%-.128s' to %-.32s. Value truncatedTruncated value '%-.128s' when converting to %-.32sEncountered illegal value '%-.128s' when converting to %-.32sEncountered illegal format of dynamic column stringDynamic column implementation limit reachedIllegal value used as argument of dynamic column functionDynamic column contains unknown character setAt least one of the 'in_to_exists' or 'materialization' optimizer_switch flags must be 'on'Query cache is disabled (resize or similar command in progress); repeat this command laterQuery cache is globally disabled and you can't enable it only for this sessionView '%-.192s'.'%-.192s' ORDER BY clause ignored because there is other ORDER BY clause alreadyConnection was killedYou should never see itCannot modify @@session.skip_replication inside a transactionCannot modify @@session.skip_replication inside a stored function or triggerQuery execution was interrupted. The query exceeded %s %llu. The query result may be incompleteTable '%-.192s.%-.192s' doesn't exist in engineTarget is not running an EXPLAINable commandConnection '%.*s' conflicts with existing connection '%.*s'Master '%.*s': Can't %s SLAVE '%.*s'SLAVE '%.*s' startedSLAVE '%.*s' stoppedEngine %s failed to discover table %`-.192s.%`-.192s with '%s'Failed initializing replication GTID stateCould not parse GTID listCould not update replication slave gtid stateGTID %u-%u-%llu and %u-%u-%llu conflict (duplicate domain id %u)Failed to open %s.%sConnecting slave requested to start from GTID %u-%u-%llu, which is not in the master's binlogFailed to load replication slave GTID position from table %s.%sSpecified GTID %u-%u-%llu conflicts with the binary log which contains a more recent GTID %u-%u-%llu. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_posSpecified value for @@gtid_slave_pos contains no value for replication domain %u. This conflicts with the binary log which contains GTID %u-%u-%llu. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_posSTART SLAVE UNTIL master_gtid_pos requires that slave is using GTIDAn attempt was made to binlog GTID %u-%u-%llu which would create an out-of-order sequence number with existing GTID %u-%u-%llu, and gtid strict mode is enabledThe binlog on the master is missing the GTID %u-%u-%llu requested by the slave (even though a subsequent sequence number does exist), and GTID strict mode is enabledUnexpected GTID received from master after reconnect. This normally indicates that the master server was replaced without restarting the slave threads. %sCannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a transactionCannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a stored function or triggerConnecting slave requested to start from GTID %u-%u-%llu, which is not in the master's binlog. Since the master's binlog contains GTIDs with higher sequence numbers, it probably means that the slave has diverged due to executing extra erroneous transactionsThis operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the logUnknown query id: %lldBad base64 data as position %uInvalid role specification %`sThe current user is invalidCannot grant role '%s' to: %sCannot revoke role '%s' from: %sCannot change @@slave_parallel_threads while another change is in progressCommit failed due to failure of an earlier commit on which this one depends'%-.192s' is a viewWhen using parallel replication and GTID with multiple replication domains, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID positionThe definition for table %`s is too bigPlugin '%-.192s' already installedQuery execution was interrupted (max_statement_time exceeded)%s does not support subqueries or stored functionsThe system variable %.200s cannot be set in SET STATEMENT.You should never see itCan't create user '%-.64s'@'%-.64s'; it already existsCan't drop user '%-.64s'@'%-.64s'; it doesn't existCan't create role '%-.64s'; it already existsCan't drop role '%-.64s'; it doesn't existCannot convert '%s' character 0x%-.64s to '%s'Incorrect default value '%-.128T' for column '%.192s'You are not owner of query %lldEngine-independent statistics are not collected for column '%s'Aggregate function '%-.192s)' of SELECT #%d belongs to SELECT #%d<%-.64s> option ignored for InnoDB partitionFile %s is corruptedQuery partially completed on the master (error on master: %d) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;. Query:'%s'Query caused different errors on master and slave. Error on master: message (format)='%s' error code=%d; Error on slave:actual message='%s', error code=%d. Default database:'%s'. Query:'%s'Storage engine for table '%s'.'%s' is not loaded.GET STACKED DIAGNOSTICS when handler not active%s is no longer supported. The statement was converted to %s.Statement is unsafe because it uses a fulltext parser plugin which may not return the same value on the slave.Cannot DISCARD/IMPORT tablespace associated with temporary tableForeign key cascade delete/update exceeds max depth of %d.Column count of %s.%s is wrong. Expected %d, found %d. Created with MariaDB %d, now running %d. Please use mariadb-upgrade to fix this error.Trigger %s.%s.%s does not have CREATED attribute.Referenced trigger '%s' for the given action time and event type does not exist.EXPLAIN FOR CONNECTION command is supported only for SELECT/UPDATE/INSERT/DELETE/REPLACEInvalid size for column '%-.192s'.Table storage engine '%-.64s' found required create option missingOut of memory in storage engine '%-.64s'.The password for anonymous user cannot be expired.This operation cannot be performed with a running slave sql thread; run STOP SLAVE SQL_THREAD firstCannot create FULLTEXT index on materialized subqueryUndo Log error: %sInvalid argument for logarithmThis operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '%s' first.This operation may not be safe when the slave has temporary tables. The tables will be kept open until the server restarts or until the tables are deleted by any replicated DROP statement. Suggest to wait until slave_open_temp_tables = 0.CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file.You should never see itSelect is not a read only statement, disabling timerDuplicate entry '%-.192s'.'%s' mode no longer has any effect. Use STRICT_ALL_TABLES or STRICT_TRANS_TABLES instead.Expression #%u of ORDER BY contains aggregate function and applies to a UNIONExpression #%u of ORDER BY contains aggregate function and applies to the result of a non-aggregated querySlave worker has stopped after at least one previous worker encountered an error when slave-preserve-commit-order was enabled. To preserve commit order, the last transaction executed by this thread has not been committed. When restarting the slave after fixing any failed threads, you should fix this worker as well.slave_preserve_commit_order is not supported %s.The server is currently in offline modeBinary geometry function %s given two geometries of different srids: %u and %u, which should have been identical.Calling geometry function %s with unsupported types of arguments.Unknown GIS error occurred in function %s.Unknown exception caught in GIS function %s.Invalid GIS data provided to function %s.The geometry has no data in function %s.Unable to calculate centroid because geometry is empty in function %s.Geometry overlay calculation error: geometry data is invalid in function %s.Geometry turn info calculation error: geometry data is invalid in function %s.Analysis procedures of intersection points interrupted unexpectedly in function %s.Unknown exception thrown in function %s.Memory allocation error: %-.256s in function %s.Domain error: %-.256s in function %s.Length error: %-.256s in function %s.Invalid argument error: %-.256s in function %s.Out of range error: %-.256s in function %s.Overflow error: %-.256s in function %s.Range error: %-.256s in function %s.Underflow error: %-.256s in function %s.Logic error: %-.256s in function %s.Runtime error: %-.256s in function %s.Unknown exception: %-.384s in function %s.Geometry byte string must be little endian.The password provided for the replication user exceeds the maximum length of 32 charactersIncorrect user-level lock name '%-.192s'.Deadlock found when trying to get user-level lock; try rolling back transaction/releasing locks and restarting lock acquisition.REPLACE cannot be executed as it requires deleting rows that are not in the viewDo not support online operation on table with GIS indexThis error never happensThis error never happensWITH column list and SELECT field list have different column countsToo many WITH elements in WITH clauseDuplicate query name %`-.64s in WITH clauseNo anchors for recursive WITH element '%s'Unacceptable mutual recursion with anchored table '%s'Reference to recursive WITH table '%s' in materialized derivedRestrictions imposed on recursive definitions are violated for table '%s'Window specification with name '%s' is not definedMultiple window specifications with the same name '%s'Window specification referencing another one '%s' cannot contain partition listReferenced window specification '%s' already contains order listReferenced window specification '%s' cannot contain window frameUnacceptable combination of window frame bound specificationsWindow function is allowed only in SELECT list and ORDER BY clauseWindow function is not allowed in window specificationWindow frame is not allowed with '%s'No order list in window specification for '%s'RANGE-type frame requires ORDER BY clause with single sort keyInteger is required for ROWS-type frameNumeric datatype is required for RANGE-type frameFrame exclusion is not supported yetThis window function may not have a window frameArgument of NTILE must be greater than 0CONSTRAINT %`s failed for %`-.192s.%`-.192sExpression in the %s clause is too bigGot an error evaluating stored expression %sGot an error when calculating default value for %`sExpression for field %`-.64s is referring to uninitialized field %`sOnly one DEFAULT partition allowedReferenced trigger '%s' for the given action time and event type does not existDefault/ignore value is not supported for such parameter usageOnly row based replication supported for bulk operationsUncompress the compressed binlog failedBroken JSON string in argument %d to function '%s' at position %dCharacter disallowed in JSON in argument %d to function '%s' at position %dUnexpected end of JSON text in argument %d to function '%s'Syntax error in JSON text in argument %d to function '%s' at position %dIncorrect escaping in JSON text in argument %d to function '%s' at position %dLimit of %d on JSON nested structures depth is reached in argument %d to function '%s' at position %dUnexpected end of JSON path in argument %d to function '%s'Syntax error in JSON path in argument %d to function '%s' at position %dLimit of %d on JSON path depth is reached in argument %d to function '%s' at position %dWildcards in JSON path not allowed in argument %d to function '%s'JSON path should end with an array identifier in argument %d to function '%s'Argument 2 to function '%s' must be "one" or "all".InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE.Incorrect GeoJSON format specified for st_geomfromgeojson function.Incorrect GeoJSON format - too few points for linestring specified.Incorrect GeoJSON format - polygon not closed.Path expression '$' is not allowed in argument %d to function '%s'.A slave with the same server_uuid/server_id as this slave has connected to the masterFlashback does not support %s %sKeys are out order during bulk loadBulk load rows overlap existing rowsCan't execute updates on master with binlog_format != ROW.MyRocks supports only READ COMMITTED and REPEATABLE READ isolation levels. Please change from current isolation level %sWhen unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: %sCan't execute updates when you started a transaction with START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT.This transaction was rolled back and cannot be committed. Only supported operation is to roll it back, so all pending changes will be discarded. Please restart another transaction.MyRocks currently does not support ROLLBACK TO SAVEPOINT if modifying rows.Only REPEATABLE READ isolation level is supported for START TRANSACTION WITH CONSISTENT SNAPSHOT in RocksDB Storage Engine.Unsupported collation on string indexed column %s.%s Use binary collation (%s).Table '%s' does not exist, but metadata information exists inside MyRocks. This is a sign of data inconsistency. Please check if '%s.frm' exists, and try to restore it if it does not exist.Column family ('%s') flag (%d) is different from an existing flag (%d). Assign a new CF flag, or do not change existing CF flag.TTL duration (%s) in MyRocks must be an unsigned non-null 64-bit integer.Status error %d received from RocksDB: %s%s, Status error %d received from RocksDB: %sTTL support is currently disabled when table has a hidden PK.TTL column (%s) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration.The per-index column family option has been deprecatedMyRocks failed creating new key definitions during alter.MyRocks failed populating secondary key during alter.Window functions can not be used as arguments to group functions.OK packet too largeIncorrect GeoJSON format - empty 'coordinates' array.MyRocks doesn't currently support collations with "No pad" attribute.Illegal parameter data types %s and %s for operation '%s'Illegal parameter data type %s for operation '%s'Incorrect parameter count to cursor '%-.192s'Unknown structured system variable or ROW routine variable '%-.*s'Row variable '%-.192s' does not have a field '%-.192s'END identifier '%-.192s' does not match '%-.192s'Sequence '%-.64s.%-.64s' has run outSequence '%-.64s.%-.64s' has out of range value for optionsSequence '%-.64s.%-.64s' table structure is invalid (%s)Sequence '%-.64s.%-.64s' access errorSequences requires binlog_format mixed or row'%-.64s.%-.64s' is not a SEQUENCE'%-.192s' is not a SEQUENCEUnknown SEQUENCE: '%-.300s'Unknown VIEW: '%-.300s'Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mariadb-dump). If you want to change the SEQUENCE, use ALTER SEQUENCE instead.At line %u in %sSubroutine '%-.192s' is declared in the package specification but is not defined in the package bodySubroutine '%-.192s' has a forward declaration but is not definedCompressed column '%-.192s' can't be used in key specificationUnknown compression method: %sThe used table value constructor has a different number of valuesField reference '%-.192s' can't be used in table value constructorNumeric datatype is required for %s functionArgument to the %s function is not a constant for a partitionArgument to the %s function does not belong to the range [0,1]%s function only accepts arguments that can be converted to numerical typesAggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong contextAggregate specific instruction(FETCH GROUP NEXT ROW) missing from the aggregate functionLimit only accepts integer valuesInvisible column %`s must have a default valueRows matched: %ld Changed: %ld Inserted: %ld Warnings: %ld%`s must be of type %s for system-versioned table %`sTransaction-precise system versioning for %`s is not supportedYou should never see itWrong partitioning type, expected type: %`sVersioned table %`s.%`s: last HISTORY partition (%`s) is out of %s, need more HISTORY partitionsMaybe missing parameters: %sCan only drop oldest partitions when rotating by INTERVALYou should never see itPartition %`s contains non-historical dataNot allowed for system-versioned %`s.%`s. Change @@system_versioning_alter_history to proceed with ALTER.Not allowed for system-versioned %`s.%`s. Change to/from native system versioning engine is not supported.SYSTEM_TIME range selector is not allowedConflicting FOR SYSTEM_TIME clauses in WITH RECURSIVETable %`s must have at least one versioned columnTable %`s is not system-versionedWrong parameters for %`s: missing '%s'PERIOD FOR SYSTEM_TIME must use columns %`s and %`sWrong parameters for partitioned %`s: wrong value for '%s'Wrong partitions for %`s: must have at least one HISTORY and exactly one last CURRENTTRX_ID %llu not found in `mysql.transaction_registry`Can not change system versioning field %`sCan not DROP SYSTEM VERSIONING for table %`s partitioned BY SYSTEM_TIMESystem-versioned tables in the %`s database are not supportedTransaction registry is disabledDuplicate ROW %s column %`sTable %`s is already system-versionedYou should never see itSystem-versioned tables do not support %sTransaction-precise system-versioned tables do not support partitioning by ROW START or ROW ENDThe index file for table '%-.192s' is fullThe column %`s.%`s cannot be changed more than once in a single UPDATE statementRow with no elements is not allowed in table value constructor in this contextSYSTEM_TIME partitions in table %`s does not support historical query%s index %`s does not support this operationChanging table options requires the table to be rebuiltCan't execute the command as you have a BACKUP STAGE activeYou must start backup with "BACKUP STAGE START"Backup stage '%s' is same or before current backup stage '%s'Backup stage '%s' failedUnknown backup stage: '%s'. Stage should be one of START, FLUSH, BLOCK_DDL, BLOCK_COMMIT or ENDUser is blocked because of too many credential errors; unblock with 'ALTER USER / FLUSH PRIVILEGES'Access denied, this account is lockedApplication-time period table cannot be temporaryFields of PERIOD FOR %`s have different typesCannot specify more than one application-time periodPeriod field %`s cannot be %sPeriod %`s is not found in tableColumn %`s used in period %`s specified in update SET listCan't DROP CONSTRAINT `%s`. Use DROP PERIOD `%s` for thisSpecified key part was too long; max key part length is %u bytesComment for database '%-.64s' is too long (max = %u)Unknown data type: '%-.64s'Operator does not exist: '%-.128s'Table `%s.%s` history row start '%s' is later than row end '%s'%`s: STARTS is later than query time, first history partition may exceed INTERVAL valueGalera replication not supportedThe used command is not allowed because the MariaDB server or client has disabled the local infile capabilityNo secure transports are configured, unable to set --require_secure_transport=ONSlave SQL thread ignored the '%s' because table is sharedAUTO_INCREMENT column %`s cannot be used in the UNIQUE index %`sKey %`s cannot explicitly include column %`sKey %`s cannot have WITHOUT OVERLAPS'%-.128s' is not allowed in this contextEngine %s does not support rollback. Changes were committed during rollback callA primary key cannot be marked as IGNORESKIP LOCKED makes this statement unsafeField '%s' can't be set for JSON_TABLE '%s'.Every table function must have an alias.Can't store an array or an object in the scalar column '%s' of JSON_TABLE '%s'.Can't store multiple matches of the path in the column '%s' of JSON_TABLE '%s'.FETCH ... WITH TIES requires ORDER BY clause to be presentDropped orphan trigger '%-.64s', originally created for table: '%-.192s'Storage engine %s is disabledPKAh[F errmsg-utf8.txtnu[languages bulgarian=bgn cp1251, chinese=chi gbk, czech=cze latin2, danish=dan latin1, dutch=nla latin1, english=eng latin1, estonian=est latin7, french=fre latin1, german=ger latin1, greek=greek greek, hindi=hindi utf8mb3, hungarian=hun latin2, italian=ita latin1, japanese=jpn ujis, korean=kor euckr, norwegian-ny=norwegian-ny latin1, norwegian=nor latin1, polish=pol latin2, portuguese=por latin1, romanian=rum latin2, russian=rus koi8r, serbian=serbian cp1250, slovak=slo latin2, spanish=spa latin1, swedish=swe latin1, ukrainian=ukr koi8u; default-language eng start-error-number 1000 ER_HASHCHK eng "hashchk" ER_NISAMCHK eng "isamchk" ER_NO chi "不" cze "NE" dan "NEJ" eng "NO" est "EI" fre "NON" ger "Nein" greek "ΟΧΙ" hindi "नहीं" hun "NEM" kor "아니오" nla "NEE" nor "NEI" norwegian-ny "NEI" pol "NIE" por "NÃO" rum "NU" rus "НЕТ" serbian "NE" slo "NIE" ukr "НІ" ER_YES chi "是的" cze "ANO" dan "JA" eng "YES" est "JAH" fre "OUI" ger "Ja" greek "ΝΑΙ" hindi "हाँ" hun "IGEN" ita "SI" kor "예" nla "JA" nor "JA" norwegian-ny "JA" pol "TAK" por "SIM" rum "DA" rus "ДА" serbian "DA" slo "Áno" spa "SÍ" ukr "ТАК" ER_CANT_CREATE_FILE chi "无法创建文件'%-.200s'(错误号码:%M)" cze "Nemohu vytvořit soubor '%-.200s' (chybový kód: %M)" dan "Kan ikke oprette filen '%-.200s' (Fejlkode: %M)" eng "Can't create file '%-.200s' (errno: %M)" est "Ei suuda luua faili '%-.200s' (veakood: %M)" fre "Ne peut créer le fichier '%-.200s' (Errcode: %M)" ger "Kann Datei '%-.200s' nicht erzeugen (Fehler: %M)" greek "Αδύνατη η δημιουργία του αρχείου '%-.200s' (κωδικός λάθους: %M)" hindi "फ़ाइल '%-.200s' नहीं बन सका (errno: %M)" hun "A '%-.200s' file nem hozhato letre (hibakod: %M)" ita "Impossibile creare il file '%-.200s' (errno: %M)" jpn "ファイル '%-.200s' を作成できません。(エラー番号: %M)" kor "화일 '%-.200s'를 만들지 못했습니다. (에러번호: %M)" nla "Kan file '%-.200s' niet aanmaken (Errcode: %M)" nor "Kan ikke opprette fila '%-.200s' (Feilkode: %M)" norwegian-ny "Kan ikkje opprette fila '%-.200s' (Feilkode: %M)" pol "Nie można stworzyć pliku '%-.200s' (Kod błędu: %M)" por "Não pode criar o arquivo '%-.200s' (erro no. %M)" rum "Nu pot sa creez fisierul '%-.200s' (Eroare: %M)" rus "Невозможно создать файл '%-.200s' (ошибка: %M)" serbian "Ne mogu da kreiram file '%-.200s' (errno: %M)" slo "Nemôžem vytvoriť súbor '%-.200s' (chybový kód: %M)" spa "No puedo crear el fichero/archivo '%-.200s' (Error: %M)" swe "Kan inte skapa filen '%-.200s' (Felkod: %M)" ukr "Не можу створити файл '%-.200s' (помилка: %M)" ER_CANT_CREATE_TABLE chi "无法创建表%`s.%`s(错误号码:%M)" cze "Nemohu vytvořit tabulku %`s.%`s (chybový kód: %M)" dan "Kan ikke oprette tabellen %`s.%`s (Fejlkode: %M)" eng "Can't create table %`s.%`s (errno: %M)" est "Ei suuda luua tabelit %`s.%`s (veakood: %M)" fre "Ne peut créer la table %`s.%`s (Errcode: %M)" ger "Kann Tabelle %`s.%`s nicht erzeugen (Fehler: %M)" greek "Αδύνατη η δημιουργία του πίνακα %`s.%`s (κωδικός λάθους: %M)" hindi "टेबल '%`s.%`s' नहीं बन सका (errno: %M)" hun "A %`s.%`s tabla nem hozhato letre (hibakod: %M)" ita "Impossibile creare la tabella %`s.%`s (errno: %M)" jpn "%`s.%`s テーブルが作れません.(errno: %M)" kor "테이블 %`s.%`s를 만들지 못했습니다. (에러번호: %M)" nla "Kan tabel %`s.%`s niet aanmaken (Errcode: %M)" nor "Kan ikke opprette tabellen %`s.%`s (Feilkode: %M)" norwegian-ny "Kan ikkje opprette tabellen %`s.%`s (Feilkode: %M)" pol "Nie można stworzyć tabeli %`s.%`s (Kod błędu: %M)" por "Não pode criar a tabela %`s.%`s (erro no. %M)" rum "Nu pot sa creez tabla %`s.%`s (Eroare: %M)" rus "Невозможно создать таблицу %`s.%`s (ошибка: %M)" serbian "Ne mogu da kreiram tabelu %`s.%`s (errno: %M)" slo "Nemôžem vytvoriť tabuľku %`s.%`s (chybový kód: %M)" spa "No puedo crear la tabla %`s.%`s (Error: %M)" swe "Kan inte skapa tabellen %`s.%`s (Felkod: %M)" ukr "Не можу створити таблицю %`s.%`s (помилка: %M)" ER_CANT_CREATE_DB chi "无法创建数据库'%-.192s'(错误号码:%M)" cze "Nemohu vytvořit databázi '%-.192s' (chybový kód: %M)" dan "Kan ikke oprette databasen '%-.192s' (Fejlkode: %M)" eng "Can't create database '%-.192s' (errno: %M)" est "Ei suuda luua andmebaasi '%-.192s' (veakood: %M)" fre "Ne peut créer la base '%-.192s' (Erreur %M)" ger "Kann Datenbank '%-.192s' nicht erzeugen (Fehler: %M)" greek "Αδύνατη η δημιουργία της βάσης δεδομένων '%-.192s' (κωδικός λάθους: %M)" hindi "डेटाबेस '%-.192s' नहीं बन सका (errno: %M)" hun "Az '%-.192s' adatbazis nem hozhato letre (hibakod: %M)" ita "Impossibile creare il database '%-.192s' (errno: %M)" jpn "データベース '%-.192s' を作成できません。(エラー番号: %M)" kor "데이타베이스 '%-.192s'를 만들지 못했습니다.. (에러번호: %M)" nla "Kan database '%-.192s' niet aanmaken (Errcode: %M)" nor "Kan ikke opprette databasen '%-.192s' (Feilkode: %M)" norwegian-ny "Kan ikkje opprette databasen '%-.192s' (Feilkode: %M)" pol "Nie można stworzyć bazy danych '%-.192s' (Kod błędu: %M)" por "Não pode criar o banco de dados '%-.192s' (erro no. %M)" rum "Nu pot sa creez baza de date '%-.192s' (Eroare: %M)" rus "Невозможно создать базу данных '%-.192s' (ошибка: %M)" serbian "Ne mogu da kreiram bazu '%-.192s' (errno: %M)" slo "Nemôžem vytvoriť databázu '%-.192s' (chybový kód: %M)" spa "No puedo crear la base de datos '%-.192s' (Error: %M)" swe "Kan inte skapa databasen '%-.192s' (Felkod: %M)" ukr "Не можу створити базу данних '%-.192s' (помилка: %M)" ER_DB_CREATE_EXISTS chi "无法创建数据库'%-.192s';已经存在" cze "Nemohu vytvořit databázi '%-.192s'; databáze již existuje" dan "Kan ikke oprette databasen '%-.192s'; databasen eksisterer" eng "Can't create database '%-.192s'; database exists" est "Ei suuda luua andmebaasi '%-.192s': andmebaas juba eksisteerib" fre "Ne peut créer la base '%-.192s'; elle existe déjà" ger "Kann Datenbank '%-.192s' nicht erzeugen. Datenbank existiert bereits" greek "Αδύνατη η δημιουργία της βάσης δεδομένων '%-.192s'; Η βάση δεδομένων υπάρχει ήδη" hindi "डेटाबेस '%-.192s' नहीं बन सकता है; यह डेटाबेस पहले से ही मौजूद है" hun "Az '%-.192s' adatbazis nem hozhato letre Az adatbazis mar letezik" ita "Impossibile creare il database '%-.192s'; il database esiste" jpn "データベース '%-.192s' を作成できません。データベースはすでに存在します。" kor "데이타베이스 '%-.192s'를 만들지 못했습니다.. 데이타베이스가 존재함" nla "Kan database '%-.192s' niet aanmaken; database bestaat reeds" nor "Kan ikke opprette databasen '%-.192s'; databasen eksisterer" norwegian-ny "Kan ikkje opprette databasen '%-.192s'; databasen eksisterer" pol "Nie można stworzyć bazy danych '%-.192s'; baza danych już istnieje" por "Não pode criar o banco de dados '%-.192s'; este banco de dados já existe" rum "Nu pot sa creez baza de date '%-.192s'; baza de date exista deja" rus "Невозможно создать базу данных '%-.192s'. База данных уже существует" serbian "Ne mogu da kreiram bazu '%-.192s'; baza već postoji" slo "Nemôžem vytvoriť databázu '%-.192s'; databáza existuje" spa "No puedo crear la base de datos '%-.192s'; la base de datos ya existe" swe "Databasen '%-.192s' existerar redan" ukr "Не можу створити базу данних '%-.192s'. База данних існує" ER_DB_DROP_EXISTS chi "无法删除数据库'%-.192s';数据库不存在" cze "Nemohu zrušit databázi '%-.192s', databáze neexistuje" dan "Kan ikke slette (droppe) '%-.192s'; databasen eksisterer ikke" eng "Can't drop database '%-.192s'; database doesn't exist" est "Ei suuda kustutada andmebaasi '%-.192s': andmebaasi ei eksisteeri" fre "Ne peut effacer la base '%-.192s'; elle n'existe pas" ger "Kann Datenbank '%-.192s' nicht löschen; Datenbank nicht vorhanden" greek "Αδύνατη η διαγραφή της βάσης δεδομένων '%-.192s'. Η βάση δεδομένων δεν υπάρχει" hindi "डेटाबेस '%-.192s' ड्रॉप नहीं कर सकते हैं; यह डेटाबेस मौजूद नहीं है" hun "A(z) '%-.192s' adatbazis nem szuntetheto meg. Az adatbazis nem letezik" ita "Impossibile cancellare '%-.192s'; il database non esiste" jpn "データベース '%-.192s' を削除できません。データベースは存在しません。" kor "데이타베이스 '%-.192s'를 제거하지 못했습니다. 데이타베이스가 존재하지 않음 " nla "Kan database '%-.192s' niet verwijderen; database bestaat niet" nor "Kan ikke fjerne (drop) '%-.192s'; databasen eksisterer ikke" norwegian-ny "Kan ikkje fjerne (drop) '%-.192s'; databasen eksisterer ikkje" pol "Nie można usun?ć bazy danych '%-.192s'; baza danych nie istnieje" por "Não pode eliminar o banco de dados '%-.192s'; este banco de dados não existe" rum "Nu pot sa drop baza de date '%-.192s'; baza da date este inexistenta" rus "Невозможно удалить базу данных '%-.192s'. Такой базы данных нет" serbian "Ne mogu da izbrišem bazu '%-.192s'; baza ne postoji" slo "Nemôžem zmazať databázu '%-.192s'; databáza neexistuje" spa "No puedo eliminar la base de datos '%-.192s'; la base de datos no existe" swe "Kan inte radera databasen '%-.192s'; databasen finns inte" ukr "Не можу видалити базу данних '%-.192s'. База данних не існує" ER_DB_DROP_DELETE chi "删除数据库错误(无法删除'%-.192s',错误号码:%M)" cze "Chyba při rušení databáze (nemohu vymazat '%-.192s', chyba %M)" dan "Fejl ved sletning (drop) af databasen (kan ikke slette '%-.192s', Fejlkode %M)" eng "Error dropping database (can't delete '%-.192s', errno: %M)" est "Viga andmebaasi kustutamisel (ei suuda kustutada faili '%-.192s', veakood: %M)" fre "Ne peut effacer la base '%-.192s' (erreur %M)" ger "Fehler beim Löschen der Datenbank ('%-.192s' kann nicht gelöscht werden, Fehler: %M)" greek "Παρουσιάστηκε πρόβλημα κατά τη διαγραφή της βάσης δεδομένων (αδύνατη η διαγραφή '%-.192s', κωδικός λάθους: %M)" hindi "डेटाबेस ड्रॉप में त्रुटि हुई ('%-.192s' हटा नहीं सकते, errno: %M)" hun "Adatbazis megszuntetesi hiba ('%-.192s' nem torolheto, hibakod: %M)" ita "Errore durante la cancellazione del database (impossibile cancellare '%-.192s', errno: %M)" jpn "データベース削除エラー ('%-.192s' を削除できません。エラー番号: %M)" kor "데이타베이스 제거 에러('%-.192s'를 삭제할 수 없습니다, 에러번호: %M)" nla "Fout bij verwijderen database (kan '%-.192s' niet verwijderen, Errcode: %M)" nor "Feil ved fjerning (drop) av databasen (kan ikke slette '%-.192s', feil %M)" norwegian-ny "Feil ved fjerning (drop) av databasen (kan ikkje slette '%-.192s', feil %M)" pol "Bł?d podczas usuwania bazy danych (nie można usun?ć '%-.192s', bł?d %M)" por "Erro ao eliminar banco de dados (não pode eliminar '%-.192s' - erro no. %M)" rum "Eroare dropuind baza de date (nu pot sa sterg '%-.192s', Eroare: %M)" rus "Ошибка при удалении базы данных (невозможно удалить '%-.192s', ошибка: %M)" serbian "Ne mogu da izbrišem bazu (ne mogu da izbrišem '%-.192s', errno: %M)" slo "Chyba pri mazaní databázy (nemôžem zmazať '%-.192s', chybový kód: %M)" spa "Error eliminando la base de datos (no puedo borrar '%-.192s', error %M)" swe "Fel vid radering av databasen (Kan inte radera '%-.192s'. Felkod: %M)" ukr "Не можу видалити базу данних (Не можу видалити '%-.192s', помилка: %M)" ER_DB_DROP_RMDIR chi "删除数据库错误(无法rmdir '%-.192s',错误号码:%M)" cze "Chyba při rušení databáze (nemohu vymazat adresář '%-.192s', chyba %M)" dan "Fejl ved sletting af database (kan ikke slette folderen '%-.192s', Fejlkode %M)" eng "Error dropping database (can't rmdir '%-.192s', errno: %M)" est "Viga andmebaasi kustutamisel (ei suuda kustutada kataloogi '%-.192s', veakood: %M)" fre "Erreur en effaçant la base (rmdir '%-.192s', erreur %M)" ger "Fehler beim Löschen der Datenbank (Verzeichnis '%-.192s' kann nicht gelöscht werden, Fehler: %M)" greek "Παρουσιάστηκε πρόβλημα κατά τη διαγραφή της βάσης δεδομένων (αδύνατη η διαγραφή του φακέλλου '%-.192s', κωδικός λάθους: %M)" hindi "डेटाबेस ड्रॉप में त्रुटि हुई ('%-.192s' rmdir नहीं कर सकते, errno: %M)" hun "Adatbazis megszuntetesi hiba ('%-.192s' nem szuntetheto meg, hibakod: %M)" ita "Errore durante la cancellazione del database (impossibile rmdir '%-.192s', errno: %M)" jpn "データベース削除エラー (ディレクトリ '%-.192s' を削除できません。エラー番号: %M)" kor "데이타베이스 제거 에러(rmdir '%-.192s'를 할 수 없습니다, 에러번호: %M)" nla "Fout bij verwijderen database (kan rmdir '%-.192s' niet uitvoeren, Errcode: %M)" nor "Feil ved sletting av database (kan ikke slette katalogen '%-.192s', feil %M)" norwegian-ny "Feil ved sletting av database (kan ikkje slette katalogen '%-.192s', feil %M)" pol "Bł?d podczas usuwania bazy danych (nie można wykonać rmdir '%-.192s', bł?d %M)" por "Erro ao eliminar banco de dados (não pode remover diretório '%-.192s' - erro no. %M)" rum "Eroare dropuind baza de date (nu pot sa rmdir '%-.192s', Eroare: %M)" rus "Невозможно удалить базу данных (невозможно удалить каталог '%-.192s', ошибка: %M)" serbian "Ne mogu da izbrišem bazu (ne mogu da izbrišem direktorijum '%-.192s', errno: %M)" slo "Chyba pri mazaní databázy (nemôžem vymazať adresár '%-.192s', chybový kód: %M)" spa "Error eliminando la base de datos (No puedo borrar el directorio '%-.192s', error %M)" swe "Fel vid radering av databasen (Kan inte radera biblioteket '%-.192s'. Felkod: %M)" ukr "Не можу видалити базу данних (Не можу видалити теку '%-.192s', помилка: %M)" ER_CANT_DELETE_FILE chi "删除'%-.192s'出错(错误号码:%M)" cze "Chyba při výmazu '%-.192s' (chybový kód: %M)" dan "Fejl ved sletning af '%-.192s' (Fejlkode: %M)" eng "Error on delete of '%-.192s' (errno: %M)" est "Viga '%-.192s' kustutamisel (veakood: %M)" fre "Erreur en effaçant '%-.192s' (Errcode: %M)" ger "Fehler beim Löschen von '%-.192s' (Fehler: %M)" greek "Παρουσιάστηκε πρόβλημα κατά τη διαγραφή '%-.192s' (κωδικός λάθους: %M)" hindi "'%-.192s' के हटाने पर त्रुटि हुई (errno: %M)" hun "Torlesi hiba: '%-.192s' (hibakod: %M)" ita "Errore durante la cancellazione di '%-.192s' (errno: %M)" jpn "ファイル '%-.192s' の削除エラー (エラー番号: %M)" kor "'%-.192s' 삭제 중 에러 (에러번호: %M)" nla "Fout bij het verwijderen van '%-.192s' (Errcode: %M)" nor "Feil ved sletting av '%-.192s' (Feilkode: %M)" norwegian-ny "Feil ved sletting av '%-.192s' (Feilkode: %M)" pol "Bł?d podczas usuwania '%-.192s' (Kod błędu: %M)" por "Erro na remoção de '%-.192s' (erro no. %M)" rum "Eroare incercind sa delete '%-.192s' (Eroare: %M)" rus "Ошибка при удалении '%-.192s' (ошибка: %M)" serbian "Greška pri brisanju '%-.192s' (errno: %M)" slo "Chyba pri mazaní '%-.192s' (chybový kód: %M)" spa "Error en el borrado de '%-.192s' (Error: %M)" swe "Kan inte radera filen '%-.192s' (Felkod: %M)" ukr "Не можу видалити '%-.192s' (помилка: %M)" ER_CANT_FIND_SYSTEM_REC chi "无法在系统表中读取记录" cze "Nemohu číst záznam v systémové tabulce" dan "Kan ikke læse posten i systemfolderen" eng "Can't read record in system table" est "Ei suuda lugeda kirjet süsteemsest tabelist" fre "Ne peut lire un enregistrement de la table 'system'" ger "Datensatz in der Systemtabelle nicht lesbar" greek "Αδύνατη η ανάγνωση εγγραφής από πίνακα του συστήματος" hindi "सिस्टम टेबल से रिकॉर्ड नहीं पढ़ सके" hun "Nem olvashato rekord a rendszertablaban" ita "Impossibile leggere il record dalla tabella di sistema" jpn "システム表のレコードを読み込めません。" kor "system 테이블에서 레코드를 읽을 수 없습니다." nla "Kan record niet lezen in de systeem tabel" nor "Kan ikke lese posten i systemkatalogen" norwegian-ny "Kan ikkje lese posten i systemkatalogen" pol "Nie można odczytać rekordu z tabeli systemowej" por "Não pode ler um registro numa tabela do sistema" rum "Nu pot sa citesc cimpurile in tabla de system (system table)" rus "Невозможно прочитать запись в системной таблице" serbian "Ne mogu da pročitam slog iz sistemske tabele" slo "Nemôžem čítať záznam v systémovej tabuľke" spa "No puedo leer el registro en la tabla del sistema" swe "Hittar inte posten i systemregistret" ukr "Не можу зчитати запис з системної таблиці" ER_CANT_GET_STAT chi "无法获得'%-.200s'的状态(错误号码:%M)" cze "Nemohu získat stav '%-.200s' (chybový kód: %M)" dan "Kan ikke læse status af '%-.200s' (Fejlkode: %M)" eng "Can't get status of '%-.200s' (errno: %M)" est "Ei suuda lugeda '%-.200s' olekut (veakood: %M)" fre "Ne peut obtenir le status de '%-.200s' (Errcode: %M)" ger "Kann Status von '%-.200s' nicht ermitteln (Fehler: %M)" greek "Αδύνατη η λήψη πληροφοριών για την κατάσταση του '%-.200s' (κωδικός λάθους: %M)" hindi "'%-.200s' की अवस्था प्राप्त नहीं कर सके (errno: %M)" hun "A(z) '%-.200s' statusza nem allapithato meg (hibakod: %M)" ita "Impossibile leggere lo stato di '%-.200s' (errno: %M)" jpn "'%-.200s' の状態を取得できません。(エラー番号: %M)" kor "'%-.200s'의 상태를 얻지 못했습니다. (에러번호: %M)" nla "Kan de status niet krijgen van '%-.200s' (Errcode: %M)" nor "Kan ikke lese statusen til '%-.200s' (Feilkode: %M)" norwegian-ny "Kan ikkje lese statusen til '%-.200s' (Feilkode: %M)" pol "Nie można otrzymać statusu '%-.200s' (Kod błędu: %M)" por "Não pode obter o status de '%-.200s' (erro no. %M)" rum "Nu pot sa obtin statusul lui '%-.200s' (Eroare: %M)" rus "Невозможно получить статусную информацию о '%-.200s' (ошибка: %M)" serbian "Ne mogu da dobijem stanje file-a '%-.200s' (errno: %M)" slo "Nemôžem zistiť stav '%-.200s' (chybový kód: %M)" spa "No puedo obtener el estado de '%-.200s' (Error: %M)" swe "Kan inte läsa filinformationen (stat) från '%-.200s' (Felkod: %M)" ukr "Не можу отримати статус '%-.200s' (помилка: %M)" ER_CANT_GET_WD chi "无法获取工作目录(错误号码:%M)" cze "Chyba při zjišťování pracovní adresář (chybový kód: %M)" dan "Kan ikke læse aktive folder (Fejlkode: %M)" eng "Can't get working directory (errno: %M)" est "Ei suuda identifitseerida jooksvat kataloogi (veakood: %M)" fre "Ne peut obtenir le répertoire de travail (Errcode: %M)" ger "Kann Arbeitsverzeichnis nicht ermitteln (Fehler: %M)" greek "Ο φάκελλος εργασίας δεν βρέθηκε (κωδικός λάθους: %M)" hindi "Working डाइरेक्टरी प्राप्त नहीं कर सके (errno: %M)" hun "A munkakonyvtar nem allapithato meg (hibakod: %M)" ita "Impossibile leggere la directory di lavoro (errno: %M)" jpn "作業ディレクトリを取得できません。(エラー番号: %M)" kor "수행 디렉토리를 찾지 못했습니다. (에러번호: %M)" nla "Kan de werkdirectory niet krijgen (Errcode: %M)" nor "Kan ikke lese aktiv katalog(Feilkode: %M)" norwegian-ny "Kan ikkje lese aktiv katalog(Feilkode: %M)" pol "Nie można rozpoznać aktualnego katalogu (Kod błędu: %M)" por "Não pode obter o diretório corrente (erro no. %M)" rum "Nu pot sa obtin directorul current (working directory) (Eroare: %M)" rus "Невозможно определить рабочий каталог (ошибка: %M)" serbian "Ne mogu da dobijem trenutni direktorijum (errno: %M)" slo "Nemôžem zistiť pracovný adresár (chybový kód: %M)" spa "No puedo obtener directorio de trabajo (Error: %M)" swe "Kan inte inte läsa aktivt bibliotek. (Felkod: %M)" ukr "Не можу визначити робочу теку (помилка: %M)" ER_CANT_LOCK chi "无法锁定文件(错误号码:%M)" cze "Nemohu uzamknout soubor (chybový kód: %M)" dan "Kan ikke låse fil (Fejlkode: %M)" eng "Can't lock file (errno: %M)" est "Ei suuda lukustada faili (veakood: %M)" fre "Ne peut verrouiller le fichier (Errcode: %M)" ger "Datei kann nicht gesperrt werden (Fehler: %M)" greek "Το αρχείο δεν μπορεί να κλειδωθεί (κωδικός λάθους: %M)" hindi "फ़ाइल लॉक नहीं कर सके (errno: %M)" hun "A file nem zarolhato. (hibakod: %M)" ita "Impossibile il locking il file (errno: %M)" jpn "ファイルをロックできません。(エラー番号: %M)" kor "화일을 잠그지(lock) 못했습니다. (에러번호: %M)" nla "Kan de file niet blokeren (Errcode: %M)" nor "Kan ikke låse fila (Feilkode: %M)" norwegian-ny "Kan ikkje låse fila (Feilkode: %M)" pol "Nie można zablokować pliku (Kod błędu: %M)" por "Não pode travar o arquivo (erro no. %M)" rum "Nu pot sa lock fisierul (Eroare: %M)" rus "Невозможно поставить блокировку на файле (ошибка: %M)" serbian "Ne mogu da zaključam file (errno: %M)" slo "Nemôžem zamknúť súbor (chybový kód: %M)" spa "No puedo bloquear fichero/archivo: (Error: %M)" swe "Kan inte låsa filen. (Felkod: %M)" ukr "Не можу заблокувати файл (помилка: %M)" ER_CANT_OPEN_FILE chi "无法打开文件:'%-.200s'(错误号码:%M)" cze "Nemohu otevřít soubor '%-.200s' (chybový kód: %M)" dan "Kan ikke åbne fil: '%-.200s' (Fejlkode: %M)" eng "Can't open file: '%-.200s' (errno: %M)" est "Ei suuda avada faili '%-.200s' (veakood: %M)" fre "Ne peut ouvrir le fichier: '%-.200s' (Errcode: %M)" ger "Kann Datei '%-.200s' nicht öffnen (Fehler: %M)" greek "Δεν είναι δυνατό να ανοιχτεί το αρχείο: '%-.200s' (κωδικός λάθους: %M)" hindi "फ़ाइल '%-.200s' नहीं खोल सकते (errno: %M)" hun "A '%-.200s' file nem nyithato meg (hibakod: %M)" ita "Impossibile aprire il file: '%-.200s' (errno: %M)" jpn "ファイル '%-.200s' をオープンできません。(エラー番号: %M)" kor "화일을 열지 못했습니다.: '%-.200s' (에러번호: %M)" nla "Kan de file '%-.200s' niet openen (Errcode: %M)" nor "Kan ikke åpne fila: '%-.200s' (Feilkode: %M)" norwegian-ny "Kan ikkje åpne fila: '%-.200s' (Feilkode: %M)" pol "Nie można otworzyć pliku: '%-.200s' (Kod błędu: %M)" por "Não pode abrir o arquivo '%-.200s' (erro no. %M)" rum "Nu pot sa deschid fisierul: '%-.200s' (Eroare: %M)" rus "Невозможно открыть файл: '%-.200s' (ошибка: %M)" serbian "Ne mogu da otvorim file: '%-.200s' (errno: %M)" slo "Nemôžem otvoriť súbor: '%-.200s' (chybový kód: %M)" spa "No puedo abrir el fichero/archivo: '%-.200s' (Error: %M)" swe "Kan inte använda '%-.200s' (Felkod: %M)" ukr "Не можу відкрити файл: '%-.200s' (помилка: %M)" ER_FILE_NOT_FOUND chi "找不到文件:'%-.200s'(错误号码:%M)" cze "Nemohu najít soubor '%-.200s' (chybový kód: %M)" dan "Kan ikke finde fila: '%-.200s' (Fejlkode: %M)" eng "Can't find file: '%-.200s' (errno: %M)" est "Ei suuda leida faili '%-.200s' (veakood: %M)" fre "Ne peut trouver le fichier: '%-.200s' (Errcode: %M)" ger "Kann Datei '%-.200s' nicht finden (Fehler: %M)" greek "Δεν βρέθηκε το αρχείο: '%-.200s' (κωδικός λάθους: %M)" hindi "फ़ाइल '%-.200s' नहीं मिला (errno: %M)" hun "A(z) '%-.200s' file nem talalhato (hibakod: %M)" ita "Impossibile trovare il file: '%-.200s' (errno: %M)" jpn "ファイル '%-.200s' が見つかりません。(エラー番号: %M)" kor "화일을 찾지 못했습니다.: '%-.200s' (에러번호: %M)" nla "Kan de file: '%-.200s' niet vinden (Errcode: %M)" nor "Kan ikke finne fila: '%-.200s' (Feilkode: %M)" norwegian-ny "Kan ikkje finne fila: '%-.200s' (Feilkode: %M)" pol "Nie można znaleĽć pliku: '%-.200s' (Kod błędu: %M)" por "Não pode encontrar o arquivo '%-.200s' (erro no. %M)" rum "Nu pot sa gasesc fisierul: '%-.200s' (Eroare: %M)" rus "Невозможно найти файл: '%-.200s' (ошибка: %M)" serbian "Ne mogu da pronađem file: '%-.200s' (errno: %M)" slo "Nemôžem nájsť súbor: '%-.200s' (chybový kód: %M)" spa "No puedo hallar el fichero/archivo: '%-.200s' (Error: %M)" swe "Hittar inte filen '%-.200s' (Felkod: %M)" ukr "Не можу знайти файл: '%-.200s' (помилка: %M)" ER_CANT_READ_DIR chi "无法读取'%-.192s'的文件夹(错误号码:%M)" cze "Nemohu číst adresář '%-.192s' (chybový kód: %M)" dan "Kan ikke læse folder '%-.192s' (Fejlkode: %M)" eng "Can't read dir of '%-.192s' (errno: %M)" est "Ei suuda lugeda kataloogi '%-.192s' (veakood: %M)" fre "Ne peut lire le répertoire de '%-.192s' (Errcode: %M)" ger "Verzeichnis von '%-.192s' nicht lesbar (Fehler: %M)" greek "Δεν είναι δυνατό να διαβαστεί ο φάκελλος του '%-.192s' (κωδικός λάθους: %M)" hindi "'%-.192s' की डायरेक्टरी नहीं पढ़ सके (errno: %M)" hun "A(z) '%-.192s' konyvtar nem olvashato. (hibakod: %M)" ita "Impossibile leggere la directory di '%-.192s' (errno: %M)" jpn "ディレクトリ '%-.192s' を読み込めません。(エラー番号: %M)" kor "'%-.192s'디렉토리를 읽지 못했습니다. (에러번호: %M)" nla "Kan de directory niet lezen van '%-.192s' (Errcode: %M)" nor "Kan ikke lese katalogen '%-.192s' (Feilkode: %M)" norwegian-ny "Kan ikkje lese katalogen '%-.192s' (Feilkode: %M)" pol "Nie można odczytać katalogu '%-.192s' (Kod błędu: %M)" por "Não pode ler o diretório de '%-.192s' (erro no. %M)" rum "Nu pot sa citesc directorul '%-.192s' (Eroare: %M)" rus "Невозможно прочитать каталог '%-.192s' (ошибка: %M)" serbian "Ne mogu da pročitam direktorijum '%-.192s' (errno: %M)" slo "Nemôžem čítať adresár '%-.192s' (chybový kód: %M)" spa "No puedo leer el directorio de '%-.192s' (Error: %M)" swe "Kan inte läsa från bibliotek '%-.192s' (Felkod: %M)" ukr "Не можу прочитати теку '%-.192s' (помилка: %M)" ER_CANT_SET_WD chi "无法将dir更改为'%-.192s'(错误号码:%M)" cze "Nemohu změnit adresář na '%-.192s' (chybový kód: %M)" dan "Kan ikke skifte folder til '%-.192s' (Fejlkode: %M)" eng "Can't change dir to '%-.192s' (errno: %M)" est "Ei suuda siseneda kataloogi '%-.192s' (veakood: %M)" fre "Ne peut changer le répertoire pour '%-.192s' (Errcode: %M)" ger "Kann nicht in das Verzeichnis '%-.192s' wechseln (Fehler: %M)" greek "Αδύνατη η αλλαγή του τρέχοντος καταλόγου σε '%-.192s' (κωδικός λάθους: %M)" hindi "'%-.192s' डायरेक्टरी में नहीं बदल सके (errno: %M)" hun "Konyvtarvaltas nem lehetseges a(z) '%-.192s'-ba. (hibakod: %M)" ita "Impossibile cambiare la directory in '%-.192s' (errno: %M)" jpn "ディレクトリ '%-.192s' に移動できません。(エラー番号: %M)" kor "'%-.192s'디렉토리로 이동할 수 없었습니다. (에러번호: %M)" nla "Kan de directory niet veranderen naar '%-.192s' (Errcode: %M)" nor "Kan ikke skifte katalog til '%-.192s' (Feilkode: %M)" norwegian-ny "Kan ikkje skifte katalog til '%-.192s' (Feilkode: %M)" pol "Nie można zmienić katalogu na '%-.192s' (Kod błędu: %M)" por "Não pode mudar para o diretório '%-.192s' (erro no. %M)" rum "Nu pot sa schimb directorul '%-.192s' (Eroare: %M)" rus "Невозможно перейти в каталог '%-.192s' (ошибка: %M)" serbian "Ne mogu da promenim direktorijum na '%-.192s' (errno: %M)" slo "Nemôžem vojsť do adresára '%-.192s' (chybový kód: %M)" spa "No puedo cambiar al directorio a '%-.192s' (Error: %M)" swe "Kan inte byta till '%-.192s' (Felkod: %M)" ukr "Не можу перейти у теку '%-.192s' (помилка: %M)" ER_CHECKREAD chi "这个表自上次读后数据有变化'%-.192s'" cze "Záznam byl změněn od posledního čtení v tabulce '%-.192s'" dan "Posten er ændret siden sidste læsning '%-.192s'" eng "Record has changed since last read in table '%-.192s'" est "Kirje tabelis '%-.192s' on muutunud viimasest lugemisest saadik" fre "Enregistrement modifié depuis sa dernière lecture dans la table '%-.192s'" ger "Datensatz hat sich seit dem letzten Zugriff auf Tabelle '%-.192s' geändert" greek "Η εγγραφή έχει αλλάξει από την τελευταία φορά που ανασύρθηκε από τον πίνακα '%-.192s'" hindi "रिकॉर्ड टेबल '%-.192s' पिछली बार पढ़े जाने के बाद से बदल गया है" hun "A(z) '%-.192s' tablaban talalhato rekord megvaltozott az utolso olvasas ota" ita "Il record e` cambiato dall'ultima lettura della tabella '%-.192s'" jpn "表 '%-.192s' の最後の読み込み時点から、レコードが変化しました。" kor "테이블 '%-.192s'에서 마지막으로 읽은 후 Record가 변경되었습니다." nla "Record is veranderd sinds de laatste lees activiteit in de tabel '%-.192s'" nor "Posten har blitt endret siden den ble lest '%-.192s'" norwegian-ny "Posten har vorte endra sidan den sist vart lesen '%-.192s'" pol "Rekord został zmieniony od ostaniego odczytania z tabeli '%-.192s'" por "Registro alterado desde a última leitura da tabela '%-.192s'" rum "Cimpul a fost schimbat de la ultima citire a tabelei '%-.192s'" rus "Запись изменилась с момента последней выборки в таблице '%-.192s'" serbian "Slog je promenjen od zadnjeg čitanja tabele '%-.192s'" slo "Záznam bol zmenený od posledného čítania v tabuľke '%-.192s'" spa "El registro ha cambiado desde la ultima lectura de la tabla '%-.192s'" swe "Posten har förändrats sedan den lästes i register '%-.192s'" ukr "Запис було змінено з часу останнього читання з таблиці '%-.192s'" ER_DISK_FULL chi "磁盘已满(%s);等待释放一些空间...(错误号码:%M)" cze "Disk je plný (%s), čekám na uvolnění nějakého místa ... (chybový kód: %M)" dan "Ikke mere diskplads (%s). Venter på at få frigjort plads... (Fejlkode: %M)" eng "Disk full (%s); waiting for someone to free some space... (errno: %M)" est "Ketas täis (%s). Ootame kuni tekib vaba ruumi... (veakood: %M)" fre "Disque plein (%s). J'attend que quelqu'un libère de l'espace... (Errcode: %M)" ger "Festplatte voll (%s). Warte, bis jemand Platz schafft ... (Fehler: %M)" greek "Δεν υπάρχει χώρος στο δίσκο (%s). Παρακαλώ, περιμένετε να ελευθερωθεί χώρος... (κωδικός λάθους: %M)" hindi "डिस्क पूरी तरह से भरा हुआ है (%s); कुछ स्थान खाली करें (errno: %M)" hun "A lemez megtelt (%s). (hibakod: %M)" ita "Disco pieno (%s). In attesa che qualcuno liberi un po' di spazio... (errno: %M)" jpn "ディスク領域不足です(%s)。(エラー番号: %M)" kor "Disk full (%s). 다른 사람이 지울때까지 기다립니다... (에러번호: %M)" nla "Schijf vol (%s). Aan het wachten totdat er ruimte vrij wordt gemaakt... (Errcode: %M)" nor "Ikke mer diskplass (%s). Venter på å få frigjort plass... (Feilkode: %M)" norwegian-ny "Ikkje meir diskplass (%s). Ventar på å få frigjort plass... (Feilkode: %M)" pol "Dysk pełny (%s). Oczekiwanie na zwolnienie miejsca... (Kod błędu: %M)" por "Disco cheio (%s). Aguardando alguém liberar algum espaço... (erro no. %M)" rum "Hard-disk-ul este plin (%s). Astept sa se elibereze ceva spatiu... (Eroare: %M)" rus "Диск заполнен. (%s). Ожидаем, пока кто-то не уберет после себя мусор... (ошибка: %M)" serbian "Disk je pun (%s). Čekam nekoga da dođe i oslobodi nešto mesta... (errno: %M)" slo "Disk je plný (%s), čakám na uvoľnenie miesta... (chybový kód: %M)" spa "Disco lleno (%s). Esperando a que alguien libere algo de espacio... (Error: %M)" swe "Disken är full (%s). Väntar tills det finns ledigt utrymme... (Felkod: %M)" ukr "Диск заповнений (%s). Вичикую, доки звільниться трохи місця... (помилка: %M)" ER_DUP_KEY 23000 chi "不能写;表'%-.192s'中有重复索引" cze "Nemohu zapsat, zdvojený klíč v tabulce '%-.192s'" dan "Kan ikke skrive, flere ens nøgler i tabellen '%-.192s'" eng "Can't write; duplicate key in table '%-.192s'" est "Ei saa kirjutada, korduv võti tabelis '%-.192s'" fre "Ecriture impossible, doublon dans une clé de la table '%-.192s'" ger "Kann nicht speichern, Grund: doppelter Schlüssel in Tabelle '%-.192s'" greek "Δεν είναι δυνατή η καταχώρηση, η τιμή υπάρχει ήδη στον πίνακα '%-.192s'" hindi "टेबल '%-.192s' में DUPLICATE KEY मौजूद होने के कारण नहीं लिख सके" hun "Irasi hiba, duplikalt kulcs a '%-.192s' tablaban" ita "Scrittura impossibile: chiave duplicata nella tabella '%-.192s'" jpn "書き込めません。表 '%-.192s' に重複するキーがあります。" kor "기록할 수 없습니다., 테이블 '%-.192s'에서 중복 키" nla "Kan niet schrijven, dubbele zoeksleutel in tabel '%-.192s'" nor "Kan ikke skrive, flere like nøkler i tabellen '%-.192s'" norwegian-ny "Kan ikkje skrive, flere like nyklar i tabellen '%-.192s'" pol "Nie można zapisać, powtórzone klucze w tabeli '%-.192s'" por "Não pode gravar. Chave duplicada na tabela '%-.192s'" rum "Nu pot sa scriu (can't write), cheie duplicata in tabela '%-.192s'" rus "Невозможно произвести запись, дублирующийся ключ в таблице '%-.192s'" serbian "Ne mogu da pišem pošto postoji duplirani ključ u tabeli '%-.192s'" slo "Nemôžem zapísať, duplikát kľúča v tabuľke '%-.192s'" spa "No puedo escribir, clave duplicada en la tabla '%-.192s'" swe "Kan inte skriva, dubbel söknyckel i register '%-.192s'" ukr "Не можу записати, дублюючийся ключ в таблиці '%-.192s'" ER_ERROR_ON_CLOSE chi "'%-.192s'关闭时出错(错误号码:%M)" cze "Chyba při zavírání '%-.192s' (chybový kód: %M)" dan "Fejl ved lukning af '%-.192s' (Fejlkode: %M)" eng "Error on close of '%-.192s' (errno: %M)" est "Viga faili '%-.192s' sulgemisel (veakood: %M)" fre "Erreur a la fermeture de '%-.192s' (Errcode: %M)" ger "Fehler beim Schließen von '%-.192s' (Fehler: %M)" greek "Παρουσιάστηκε πρόβλημα κλείνοντας το '%-.192s' (κωδικός λάθους: %M)" hindi "'%-.192s' के बंद पर त्रुटि हुई (errno: %M)" hun "Hiba a(z) '%-.192s' zarasakor. (hibakod: %M)" ita "Errore durante la chiusura di '%-.192s' (errno: %M)" jpn "'%-.192s' のクローズ時エラー (エラー番号: %M)" kor "'%-.192s'닫는 중 에러 (에러번호: %M)" nla "Fout bij het sluiten van '%-.192s' (Errcode: %M)" nor "Feil ved lukking av '%-.192s' (Feilkode: %M)" norwegian-ny "Feil ved lukking av '%-.192s' (Feilkode: %M)" pol "Bł?d podczas zamykania '%-.192s' (Kod błędu: %M)" por "Erro ao fechar '%-.192s' (erro no. %M)" rum "Eroare inchizind '%-.192s' (errno: %M)" rus "Ошибка при закрытии '%-.192s' (ошибка: %M)" serbian "Greška pri zatvaranju '%-.192s' (errno: %M)" slo "Chyba pri zatváraní '%-.192s' (chybový kód: %M)" spa "Error en el cierre de '%-.192s' (Error: %M)" swe "Fick fel vid stängning av '%-.192s' (Felkod: %M)" ukr "Не можу закрити '%-.192s' (помилка: %M)" ER_ERROR_ON_READ chi "读取文件'%-.200s'错误(错误号码:%M)" cze "Chyba při čtení souboru '%-.200s' (chybový kód: %M)" dan "Fejl ved læsning af '%-.200s' (Fejlkode: %M)" eng "Error reading file '%-.200s' (errno: %M)" est "Viga faili '%-.200s' lugemisel (veakood: %M)" fre "Erreur en lecture du fichier '%-.200s' (Errcode: %M)" ger "Fehler beim Lesen der Datei '%-.200s' (Fehler: %M)" greek "Πρόβλημα κατά την ανάγνωση του αρχείου '%-.200s' (κωδικός λάθους: %M)" hindi "फ़ाइल '%-.200s' पढ़ने में त्रुटि हुई (errno: %M)" hun "Hiba a '%-.200s'file olvasasakor. (hibakod: %M)" ita "Errore durante la lettura del file '%-.200s' (errno: %M)" jpn "ファイル '%-.200s' の読み込みエラー (エラー番号: %M)" kor "'%-.200s'화일 읽기 에러 (에러번호: %M)" nla "Fout bij het lezen van file '%-.200s' (Errcode: %M)" nor "Feil ved lesing av '%-.200s' (Feilkode: %M)" norwegian-ny "Feil ved lesing av '%-.200s' (Feilkode: %M)" pol "Bł?d podczas odczytu pliku '%-.200s' (Kod błędu: %M)" por "Erro ao ler arquivo '%-.200s' (erro no. %M)" rum "Eroare citind fisierul '%-.200s' (errno: %M)" rus "Ошибка чтения файла '%-.200s' (ошибка: %M)" serbian "Greška pri čitanju file-a '%-.200s' (errno: %M)" slo "Chyba pri čítaní súboru '%-.200s' (chybový kód: %M)" spa "Error leyendo el fichero/archivo '%-.200s' (Error: %M)" swe "Fick fel vid läsning av '%-.200s' (Felkod %M)" ukr "Не можу прочитати файл '%-.200s' (помилка: %M)" ER_ERROR_ON_RENAME chi "重命名'%-.210s'到'%-.210s'错误(错误号码:%M)" cze "Chyba při přejmenování '%-.210s' na '%-.210s' (chybový kód: %M)" dan "Fejl ved omdøbning af '%-.210s' til '%-.210s' (Fejlkode: %M)" eng "Error on rename of '%-.210s' to '%-.210s' (errno: %M)" est "Viga faili '%-.210s' ümbernimetamisel '%-.210s'-ks (veakood: %M)" fre "Erreur en renommant '%-.210s' en '%-.210s' (Errcode: %M)" ger "Fehler beim Umbenennen von '%-.210s' in '%-.210s' (Fehler: %M)" greek "Πρόβλημα κατά την μετονομασία του αρχείου '%-.210s' to '%-.210s' (κωδικός λάθους: %M)" hindi "'%-.210s' का नाम '%-.210s' बदलने पर त्रुटि हुई (errno: %M)" hun "Hiba a '%-.210s' file atnevezesekor '%-.210s'. (hibakod: %M)" ita "Errore durante la rinominazione da '%-.210s' a '%-.210s' (errno: %M)" jpn "'%-.210s' の名前を '%-.210s' に変更できません (エラー番号: %M)" kor "'%-.210s'를 '%-.210s'로 이름 변경중 에러 (에러번호: %M)" nla "Fout bij het hernoemen van '%-.210s' naar '%-.210s' (Errcode: %M)" nor "Feil ved omdøping av '%-.210s' til '%-.210s' (Feilkode: %M)" norwegian-ny "Feil ved omdøyping av '%-.210s' til '%-.210s' (Feilkode: %M)" pol "Bł?d podczas zmieniania nazwy '%-.210s' na '%-.210s' (Kod błędu: %M)" por "Erro ao renomear '%-.210s' para '%-.210s' (erro no. %M)" rum "Eroare incercind sa renumesc '%-.210s' in '%-.210s' (errno: %M)" rus "Ошибка при переименовании '%-.210s' в '%-.210s' (ошибка: %M)" serbian "Greška pri promeni imena '%-.210s' na '%-.210s' (errno: %M)" slo "Chyba pri premenovávaní '%-.210s' na '%-.210s' (chybový kód: %M)" spa "Error en el renombrado de '%-.210s' a '%-.210s' (Error: %M)" swe "Kan inte byta namn från '%-.210s' till '%-.210s' (Felkod: %M)" ukr "Не можу перейменувати '%-.210s' у '%-.210s' (помилка: %M)" ER_ERROR_ON_WRITE chi "写文件'%-.200s'错误(错误号码:%M)" cze "Chyba při zápisu do souboru '%-.200s' (chybový kód: %M)" dan "Fejl ved skriving av filen '%-.200s' (Fejlkode: %M)" eng "Error writing file '%-.200s' (errno: %M)" est "Viga faili '%-.200s' kirjutamisel (veakood: %M)" fre "Erreur d'écriture du fichier '%-.200s' (Errcode: %M)" ger "Fehler beim Speichern der Datei '%-.200s' (Fehler: %M)" greek "Πρόβλημα κατά την αποθήκευση του αρχείου '%-.200s' (κωδικός λάθους: %M)" hindi "फ़ाइल '%-.200s' लिखने में त्रुटि हुई (errno: %M)" hun "Hiba a '%-.200s' file irasakor. (hibakod: %M)" ita "Errore durante la scrittura del file '%-.200s' (errno: %M)" jpn "ファイル '%-.200s' の書き込みエラー (エラー番号: %M)" kor "'%-.200s'화일 기록 중 에러 (에러번호: %M)" nla "Fout bij het wegschrijven van file '%-.200s' (Errcode: %M)" nor "Feil ved skriving av fila '%-.200s' (Feilkode: %M)" norwegian-ny "Feil ved skriving av fila '%-.200s' (Feilkode: %M)" pol "Bł?d podczas zapisywania pliku '%-.200s' (Kod błędu: %M)" por "Erro ao gravar arquivo '%-.200s' (erro no. %M)" rum "Eroare scriind fisierul '%-.200s' (errno: %M)" rus "Ошибка записи в файл '%-.200s' (ошибка: %M)" serbian "Greška pri upisu '%-.200s' (errno: %M)" slo "Chyba pri zápise do súboru '%-.200s' (chybový kód: %M)" spa "Error escribiendo el fichero/archivo '%-.200s' (Error: %M)" swe "Fick fel vid skrivning till '%-.200s' (Felkod %M)" ukr "Не можу записати файл '%-.200s' (помилка: %M)" ER_FILE_USED chi "'%-.192s'被锁定,不能改变" cze "'%-.192s' je zamčen proti změnám" dan "'%-.192s' er låst mod opdateringer" eng "'%-.192s' is locked against change" est "'%-.192s' on lukustatud muudatuste vastu" fre "'%-.192s' est verrouillé contre les modifications" ger "'%-.192s' ist für Änderungen gesperrt" greek "'%-.192s' δεν επιτρέπονται αλλαγές" hindi "फ़ाइल '%-.192s' में कोई बदलाव नहीं कर सकते" hun "'%-.192s' a valtoztatas ellen zarolva" ita "'%-.192s' e` soggetto a lock contro i cambiamenti" jpn "'%-.192s' はロックされています。" kor "'%-.192s'가 변경할 수 없도록 잠겨있습니다." nla "'%-.192s' is geblokeerd tegen veranderingen" nor "'%-.192s' er låst mot oppdateringer" norwegian-ny "'%-.192s' er låst mot oppdateringar" pol "'%-.192s' jest zablokowany na wypadek zmian" por "'%-.192s' está com travamento contra alterações" rum "'%-.192s' este blocat pentry schimbari (loccked against change)" rus "'%-.192s' заблокирован для изменений" serbian "'%-.192s' je zaključan za upis" slo "'%-.192s' je zamknutý proti zmenám" spa "'%-.192s' esta bloqueado contra cambios" swe "'%-.192s' är låst mot användning" ukr "'%-.192s' заблокований на внесення змін" ER_FILSORT_ABORT chi "排序中止" cze "Třídění přerušeno" dan "Sortering afbrudt" eng "Sort aborted" est "Sorteerimine katkestatud" fre "Tri alphabétique abandonné" ger "Sortiervorgang abgebrochen" greek "Η διαδικασία ταξινόμισης ακυρώθηκε" hindi "SORT निरस्त" hun "Sikertelen rendezes" ita "Operazione di ordinamento abbandonata" jpn "ソート処理を中断しました。" kor "소트가 중단되었습니다." nla "Sorteren afgebroken" nor "Sortering avbrutt" norwegian-ny "Sortering avbrote" pol "Sortowanie przerwane" por "Ordenação abortada" rum "Sortare intrerupta" rus "Сортировка прервана" serbian "Sortiranje je prekinuto" slo "Triedenie prerušené" spa "Ordenación cancelada" swe "Sorteringen avbruten" ukr "Сортування перервано" ER_FORM_NOT_FOUND chi "视图'%-.192s'不存在'%-.192s'" cze "Pohled '%-.192s' pro '%-.192s' neexistuje" dan "View '%-.192s' eksisterer ikke for '%-.192s'" eng "View '%-.192s' doesn't exist for '%-.192s'" est "Vaade '%-.192s' ei eksisteeri '%-.192s' jaoks" fre "La vue (View) '%-.192s' n'existe pas pour '%-.192s'" ger "View '%-.192s' existiert für '%-.192s' nicht" greek "Το View '%-.192s' δεν υπάρχει για '%-.192s'" hindi "VIEW '%-.192s', '%-.192s' के लिए मौजूद नहीं है" hun "A(z) '%-.192s' nezet nem letezik a(z) '%-.192s'-hoz" ita "La view '%-.192s' non esiste per '%-.192s'" jpn "ビュー '%-.192s' は '%-.192s' に存在しません。" kor "뷰 '%-.192s'가 '%-.192s'에서는 존재하지 않습니다." nla "View '%-.192s' bestaat niet voor '%-.192s'" nor "View '%-.192s' eksisterer ikke for '%-.192s'" norwegian-ny "View '%-.192s' eksisterar ikkje for '%-.192s'" pol "Widok '%-.192s' nie istnieje dla '%-.192s'" por "Visão '%-.192s' não existe para '%-.192s'" rum "View '%-.192s' nu exista pentru '%-.192s'" rus "Представление '%-.192s' не существует для '%-.192s'" serbian "View '%-.192s' ne postoji za '%-.192s'" slo "Pohľad '%-.192s' neexistuje pre '%-.192s'" spa "La vista '%-.192s' no existe para '%-.192s'" swe "Formulär '%-.192s' finns inte i '%-.192s'" ukr "Вигляд '%-.192s' не існує для '%-.192s'" ER_GET_ERRNO chi "错误 %M, 来自存储引擎 %s" eng "Got error %M from storage engine %s" fre "Reçu l'erreur %M du handler de la table %s" ger "Fehler %M von Speicher-Engine %s" greek "Ελήφθη μήνυμα λάθους %M από τον χειριστή πίνακα (table handler) %s" hindi "%M त्रुटि %s स्टोरेज इंजन से" ita "Rilevato l'errore %M dal gestore delle tabelle %s" nla "Fout %M van tabel handler %s" nor "Mottok feil %M fra tabell håndterer %s" norwegian-ny "Mottok feil %M fra tabell handterar %s" pol "Otrzymano bł?d %M z obsługi tabeli %s" por "Obteve erro %M no manipulador de tabelas %s" rum "Eroarea %M obtinuta din handlerul tabelei %s" rus "Получена ошибка %M от обработчика таблиц %s" spa "Obtenido error %M desde el motor de almacenaje %s" swe "Fick felkod %M från databashanteraren %s" ukr "Отримано помилку %M від дескриптора таблиці %s" ER_ILLEGAL_HA chi "存储引擎%s %`s.%`s 表没有该选项" eng "Storage engine %s of the table %`s.%`s doesn't have this option" ger "Diese Option gibt es nicht in Speicher-Engine %s für %`s.%`s" hindi "स्टोरेज इंजन %s में यह विकल्प उपलब्ध नहीं है (टेबल: %`s.%`s)" rus "Обработчик %s таблицы %`s.%`s не поддерживает эту возможность" spa "El motor de almacenaje %s de la tabla %`s.%`s no contiene esta opción" ukr "Дескриптор %s таблиці %`s.%`s не має цієї властивості" ER_KEY_NOT_FOUND chi "无法在'%-.192s'中找到记录" cze "Nemohu najít záznam v '%-.192s'" dan "Kan ikke finde posten i '%-.192s'" eng "Can't find record in '%-.192s'" est "Ei suuda leida kirjet '%-.192s'-s" fre "Ne peut trouver l'enregistrement dans '%-.192s'" ger "Kann Datensatz in '%-.192s' nicht finden" greek "Αδύνατη η ανεύρεση εγγραφής στο '%-.192s'" hindi "'%-.192s' में रिकॉर्ड नहीं मिला" hun "Nem talalhato a rekord '%-.192s'-ben" ita "Impossibile trovare il record in '%-.192s'" jpn "'%-.192s' にレコードが見つかりません。" kor "'%-.192s'에서 레코드를 찾을 수 없습니다." nla "Kan record niet vinden in '%-.192s'" nor "Kan ikke finne posten i '%-.192s'" norwegian-ny "Kan ikkje finne posten i '%-.192s'" pol "Nie można znaleĽć rekordu w '%-.192s'" por "Não pode encontrar registro em '%-.192s'" rum "Nu pot sa gasesc recordul in '%-.192s'" rus "Невозможно найти запись в '%-.192s'" serbian "Ne mogu da pronađem slog u '%-.192s'" slo "Nemôžem nájsť záznam v '%-.192s'" spa "No puedo encontrar el registro en '%-.192s'" swe "Hittar inte posten '%-.192s'" ukr "Не можу записати у '%-.192s'" ER_NOT_FORM_FILE chi "文件中的信息不正确:'%-.200s'" cze "Nesprávná informace v souboru '%-.200s'" dan "Forkert indhold i: '%-.200s'" eng "Incorrect information in file: '%-.200s'" est "Vigane informatsioon failis '%-.200s'" fre "Information erronnée dans le fichier: '%-.200s'" ger "Falsche Information in Datei '%-.200s'" greek "Λάθος πληροφορίες στο αρχείο: '%-.200s'" hindi "फ़ाइल '%-.200s' में गलत जानकारी है" hun "Ervenytelen info a file-ban: '%-.200s'" ita "Informazione errata nel file: '%-.200s'" jpn "ファイル '%-.200s' 内の情報が不正です。" kor "화일의 부정확한 정보: '%-.200s'" nla "Verkeerde info in file: '%-.200s'" nor "Feil informasjon i filen: '%-.200s'" norwegian-ny "Feil informasjon i fila: '%-.200s'" pol "Niewła?ciwa informacja w pliku: '%-.200s'" por "Informação incorreta no arquivo '%-.200s'" rum "Informatie incorecta in fisierul: '%-.200s'" rus "Некорректная информация в файле '%-.200s'" serbian "Pogrešna informacija u file-u: '%-.200s'" slo "Nesprávna informácia v súbore: '%-.200s'" spa "Información incorrecta en el fichero/archivo: '%-.200s'" swe "Felaktig fil: '%-.200s'" ukr "Хибна інформація у файлі: '%-.200s'" ER_NOT_KEYFILE chi "表'%-.200s'的索引损坏;试着修复" cze "Nesprávný klíč pro tabulku '%-.200s'; pokuste se ho opravit" dan "Fejl i indeksfilen til tabellen '%-.200s'; prøv at reparere den" eng "Index for table '%-.200s' is corrupt; try to repair it" est "Tabeli '%-.200s' võtmefail on vigane; proovi seda parandada" fre "Index corrompu dans la table: '%-.200s'; essayez de le réparer" ger "Fehlerhafte Index-Datei für Tabelle '%-.200s'; versuche zu reparieren" greek "Λάθος αρχείο ταξινόμισης (key file) για τον πίνακα: '%-.200s'; Παρακαλώ, διορθώστε το!" hindi "टेबल '%-.200s' का इंडेक्स CORRUPT हो गया है; इसे REPAIR करने की कोशिश करें" hun "Ervenytelen kulcsfile a tablahoz: '%-.200s'; probalja kijavitani!" ita "File chiave errato per la tabella : '%-.200s'; prova a riparalo" jpn "表 '%-.200s' の索引ファイル(key file)の内容が不正です。修復を試行してください。" kor "'%-.200s' 테이블의 부정확한 키 존재. 수정하시오!" nla "Verkeerde zoeksleutel file voor tabel: '%-.200s'; probeer het te repareren" nor "Tabellen '%-.200s' har feil i nøkkelfilen; forsøk å reparer den" norwegian-ny "Tabellen '%-.200s' har feil i nykkelfila; prøv å reparere den" pol "Niewła?ciwy plik kluczy dla tabeli: '%-.200s'; spróbuj go naprawić" por "Arquivo de índice incorreto para tabela '%-.200s'; tente repará-lo" rum "Cheia fisierului incorecta pentru tabela: '%-.200s'; incearca s-o repari" rus "Некорректный индексный файл для таблицы: '%-.200s'. Попробуйте восстановить его" serbian "Pogrešan key file za tabelu: '%-.200s'; probajte da ga ispravite" slo "Nesprávny kľúč pre tabuľku '%-.200s'; pokúste sa ho opraviť" spa "El índice para la tabla: '%-.200s' está corrupto; intente repararlo" swe "Fatalt fel vid hantering av register '%-.200s'; kör en reparation" ukr "Хибний файл ключей для таблиці: '%-.200s'; Спробуйте його відновити" ER_OLD_KEYFILE chi "表'%-.192s'的老索引文件损坏; 修复!" cze "Starý klíčový soubor pro '%-.192s'; opravte ho" dan "Gammel indeksfil for tabellen '%-.192s'; reparer den" eng "Old key file for table '%-.192s'; repair it!" est "Tabeli '%-.192s' võtmefail on aegunud; paranda see!" fre "Vieux fichier d'index pour la table '%-.192s'; réparez le!" ger "Alte Index-Datei für Tabelle '%-.192s'. Bitte reparieren" greek "Παλαιό αρχείο ταξινόμισης (key file) για τον πίνακα '%-.192s'; Παρακαλώ, διορθώστε το!" hindi "टेबल '%-.192s' के लिए पुरानी KEY फ़ाइल; इसे REPAIR करने की कोशिश करें" hun "Regi kulcsfile a '%-.192s'tablahoz; probalja kijavitani!" ita "File chiave vecchio per la tabella '%-.192s'; riparalo!" jpn "表 '%-.192s' の索引ファイル(key file)は古い形式です。修復してください。" kor "'%-.192s' 테이블의 이전버젼의 키 존재. 수정하시오!" nla "Oude zoeksleutel file voor tabel '%-.192s'; repareer het!" nor "Gammel nøkkelfil for tabellen '%-.192s'; reparer den!" norwegian-ny "Gammel nykkelfil for tabellen '%-.192s'; reparer den!" pol "Plik kluczy dla tabeli '%-.192s' jest starego typu; napraw go!" por "Arquivo de índice desatualizado para tabela '%-.192s'; repare-o!" rum "Cheia fisierului e veche pentru tabela '%-.192s'; repar-o!" rus "Старый индексный файл для таблицы '%-.192s'; отремонтируйте его!" serbian "Zastareo key file za tabelu '%-.192s'; ispravite ga" slo "Starý kľúčový súbor pre '%-.192s'; opravte ho!" spa "Clave antigua de fichero/archivo para la tabla '%-.192s'; ¡repárela!" swe "Gammal nyckelfil '%-.192s'; reparera registret" ukr "Старий файл ключей для таблиці '%-.192s'; Відновіть його!" ER_OPEN_AS_READONLY chi "表'%-.192s'只可读" cze "'%-.192s' je jen pro čtení" dan "'%-.192s' er skrivebeskyttet" eng "Table '%-.192s' is read only" est "Tabel '%-.192s' on ainult lugemiseks" fre "'%-.192s' est en lecture seulement" ger "Tabelle '%-.192s' ist nur lesbar" greek "'%-.192s' επιτρέπεται μόνο η ανάγνωση" hindi "टेबल '%-.192s' READ-ONLY है" hun "'%-.192s' irasvedett" ita "'%-.192s' e` di sola lettura" jpn "表 '%-.192s' は読み込み専用です。" kor "테이블 '%-.192s'는 읽기전용 입니다." nla "'%-.192s' is alleen leesbaar" nor "'%-.192s' er skrivebeskyttet" norwegian-ny "'%-.192s' er skrivetryggja" pol "'%-.192s' jest tylko do odczytu" por "Tabela '%-.192s' é somente para leitura" rum "Tabela '%-.192s' e read-only" rus "Таблица '%-.192s' предназначена только для чтения" serbian "Tabelu '%-.192s' je dozvoljeno samo čitati" slo "'%-.192s' is čítať only" spa "La tabla '%-.192s' es de sólo lectura" swe "'%-.192s' är skyddad mot förändring" ukr "Таблиця '%-.192s' тільки для читання" ER_OUTOFMEMORY HY001 S1001 chi "内存不足; 重启后重试(需要 %d bytes)" cze "Málo paměti. Přestartujte daemona a zkuste znovu (je potřeba %d bytů)" dan "Ikke mere hukommelse. Genstart serveren og prøv igen (mangler %d bytes)" eng "Out of memory; restart server and try again (needed %d bytes)" est "Mälu sai otsa. Proovi MariaDB uuesti käivitada (puudu jäi %d baiti)" fre "Manque de mémoire. Redémarrez le démon et ré-essayez (%d octets nécessaires)" ger "Kein Speicher vorhanden (%d Bytes benötigt). Bitte Server neu starten" greek "Δεν υπάρχει διαθέσιμη μνήμη. Προσπαθήστε πάλι, επανεκινώντας τη διαδικασία (demon) (χρειάζονται %d bytes)" hun "Nincs eleg memoria. Inditsa ujra a demont, es probalja ismet. (%d byte szukseges.)" ita "Memoria esaurita. Fai ripartire il demone e riprova (richiesti %d bytes)" jpn "メモリが不足しています。サーバーを再起動してみてください。(%d バイトの割り当てに失敗)" kor "Out of memory. 데몬을 재 실행 후 다시 시작하시오 (needed %d bytes)" nla "Geen geheugen meer. Herstart server en probeer opnieuw (%d bytes nodig)" nor "Ikke mer minne. Star på nytt tjenesten og prøv igjen (trengte %d byter)" norwegian-ny "Ikkje meir minne. Start på nytt tenesten og prøv igjen (trengte %d bytar)" pol "Zbyt mało pamięci. Uruchom ponownie demona i spróbuj ponownie (potrzeba %d bajtów)" por "Sem memória. Reinicie o programa e tente novamente (necessita de %d bytes)" rum "Out of memory. Porneste daemon-ul din nou si incearca inca o data (e nevoie de %d bytes)" rus "Недостаточно памяти. Перезапустите сервер и попробуйте еще раз (нужно %d байт)" serbian "Nema memorije. Restartujte MariaDB server i probajte ponovo (potrebno je %d byte-ova)" slo "Málo pamäti. Reštartujte daemona a skúste znova (je potrebných %d bytov)" spa "Memoria insuficiente. Reinicie el servidor e inténtelo otra vez (necesita %d bytes)" swe "Oväntat slut på minnet, starta om programmet och försök på nytt (Behövde %d bytes)" ukr "Брак пам'яті. Рестартуйте сервер та спробуйте знову (потрібно %d байтів)" ER_OUT_OF_SORTMEMORY HY001 S1001 chi "排序内存不足,可以考虑增加实例排序缓存量" cze "Málo paměti pro třídění. Zvyšte velikost třídícího bufferu" dan "Ikke mere sorteringshukommelse. Øg sorteringshukommelse (sort buffer size) for serveren" eng "Out of sort memory, consider increasing server sort buffer size" est "Mälu sai sorteerimisel otsa. Suurenda MariaDB-i sorteerimispuhvrit" fre "Manque de mémoire pour le tri. Augmentez-la" ger "Kein Speicher zum Sortieren vorhanden. sort_buffer_size sollte im Server erhöht werden" greek "Δεν υπάρχει διαθέσιμη μνήμη για ταξινόμιση. Αυξήστε το sort buffer size για τη διαδικασία (demon)" hun "Nincs eleg memoria a rendezeshez. Novelje a rendezo demon puffermeretet" ita "Memoria per gli ordinamenti esaurita. Incrementare il 'sort_buffer' al demone" jpn "ソートメモリが不足しています。ソートバッファサイズ(sort buffer size)の増加を検討してください。" kor "Out of sort memory. daemon sort buffer의 크기를 증가시키세요" nla "Geen geheugen om te sorteren. Verhoog de server sort buffer size" nor "Ikke mer sorteringsminne. Vurder å øke sorteringsminnet (sort buffer size) for tjenesten" norwegian-ny "Ikkje meir sorteringsminne. Vurder å auke sorteringsminnet (sorteringsbuffer storleik) for tenesten" pol "Zbyt mało pamięci dla sortowania. Zwiększ wielko?ć bufora demona dla sortowania" por "Não há memória suficiente para ordenação. Considere aumentar o tamanho do retentor (buffer) de ordenação" rum "Out of memory pentru sortare. Largeste marimea buffer-ului pentru sortare in daemon (sort buffer size)" rus "Недостаточно памяти для сортировки. Увеличьте размер буфера сортировки на сервере" serbian "Nema memorije za sortiranje. Povećajte veličinu sort buffer-a MariaDB server-u" slo "Málo pamäti pre triedenie, zvýšte veľkosť triediaceho bufferu" spa "Memoria de ordenación insuficiente. Considere el incrementar el tamaño del búfer de ordenación del servidor" swe "Sorteringsbufferten räcker inte till. Kontrollera startparametrarna" ukr "Брак пам'яті для сортування. Треба збільшити розмір буфера сортування у сервера" ER_UNEXPECTED_EOF chi "阅读文件'%-.192s'时出现意外的EOF(错误号码:%M)" cze "Neočekávaný konec souboru při čtení '%-.192s' (chybový kód: %M)" dan "Uventet afslutning på fil (eof) ved læsning af filen '%-.192s' (Fejlkode: %M)" eng "Unexpected EOF found when reading file '%-.192s' (errno: %M)" est "Ootamatu faililõpumärgend faili '%-.192s' lugemisel (veakood: %M)" fre "Fin de fichier inattendue en lisant '%-.192s' (Errcode: %M)" ger "Unerwartetes Ende beim Lesen der Datei '%-.192s' (Fehler: %M)" greek "Κατά τη διάρκεια της ανάγνωσης, βρέθηκε απροσδόκητα το τέλος του αρχείου '%-.192s' (κωδικός λάθους: %M)" hun "Varatlan filevege-jel a '%-.192s'olvasasakor. (hibakod: %M)" ita "Fine del file inaspettata durante la lettura del file '%-.192s' (errno: %M)" jpn "ファイル '%-.192s' を読み込み中に予期せずファイルの終端に達しました。(エラー番号: %M)" kor "'%-.192s' 화일을 읽는 도중 잘못된 eof을 발견 (에러번호: %M)" nla "Onverwachte eof gevonden tijdens het lezen van file '%-.192s' (Errcode: %M)" nor "Uventet slutt på fil (eof) ved lesing av filen '%-.192s' (Feilkode: %M)" norwegian-ny "Uventa slutt på fil (eof) ved lesing av fila '%-.192s' (Feilkode: %M)" pol "Nieoczekiwany 'eof' napotkany podczas czytania z pliku '%-.192s' (Kod błędu: %M)" por "Encontrado fim de arquivo inesperado ao ler arquivo '%-.192s' (erro no. %M)" rum "Sfirsit de fisier neasteptat in citirea fisierului '%-.192s' (errno: %M)" rus "Неожиданный конец файла '%-.192s' (ошибка: %M)" serbian "Neočekivani kraj pri čitanju file-a '%-.192s' (errno: %M)" slo "Neočakávaný koniec súboru pri čítaní '%-.192s' (chybový kód: %M)" spa "Inesperado fin de fichero/archivo mientras leíamos el fichero/archivo '%-.192s' (Error: %M)" swe "Oväntat filslut vid läsning från '%-.192s' (Felkod: %M)" ukr "Хибний кінець файлу '%-.192s' (помилка: %M)" ER_CON_COUNT_ERROR 08004 chi "太多连接" cze "Příliš mnoho spojení" dan "For mange forbindelser (connections)" eng "Too many connections" est "Liiga palju samaaegseid ühendusi" fre "Trop de connexions" ger "Zu viele Verbindungen" greek "Υπάρχουν πολλές συνδέσεις..." hindi "अत्यधिक कनेक्शन" hun "Tul sok kapcsolat" ita "Troppe connessioni" jpn "接続が多すぎます。" kor "너무 많은 연결... max_connection을 증가 시키시오..." nla "Te veel verbindingen" nor "For mange tilkoblinger (connections)" norwegian-ny "For mange tilkoplingar (connections)" pol "Zbyt wiele poł?czeń" por "Excesso de conexões" rum "Prea multe conectiuni" rus "Слишком много соединений" serbian "Previše konekcija" slo "Príliš mnoho spojení" spa "Demasiadas conexiones" swe "För många anslutningar" ukr "Забагато з'єднань" ER_OUT_OF_RESOURCES chi "内存不足." cze "Málo prostoru/paměti pro thread" dan "Udgået for tråde/hukommelse" eng "Out of memory." est "Mälu sai otsa. Võimalik, et aitab swap-i lisamine või käsu 'ulimit' abil MariaDB-le rohkema mälu kasutamise lubamine" fre "Manque de 'threads'/mémoire" ger "Kein Speicher mehr vorhanden." greek "Πρόβλημα με τη διαθέσιμη μνήμη (Out of thread space/memory)" hun "Elfogyott a thread-memoria" ita "Fine dello spazio/memoria per i thread" jpn "メモリが不足しています。mariadbd やその他のプロセスがメモリーを使い切っていないか確認して下さい。メモリーを使い切っていない場合、'ulimit'の設定等で mariadbd のメモリー使用最大量を多くするか、スワップ領域を増やす必要があるかもしれません。" # This message failed to convert from euc-kr, skipped nla "Geen thread geheugen meer; controleer of mariadbd of andere processen al het beschikbare geheugen gebruikt. Zo niet, dan moet u wellicht 'ulimit' gebruiken om mariadbd toe te laten meer geheugen te benutten, of u kunt extra swap ruimte toevoegen" nor "Tomt for tråd plass/minne" norwegian-ny "Tomt for tråd plass/minne" pol "Zbyt mało miejsca/pamięci dla w?tku" por "Sem memória." rum "Out of memory." rus "Недостаточно памяти." serbian "Nema memorije." slo "Málo miesta-pamäti pre vlákno" spa "Memoria agotada" swe "Fick slut på minnet." ukr "Брак пам'яті." ER_BAD_HOST_ERROR 08S01 chi "不能从你的地址获取主机名称" cze "Nemohu zjistit jméno stroje pro Vaši adresu" dan "Kan ikke få værtsnavn for din adresse" eng "Can't get hostname for your address" est "Ei suuda lahendada IP aadressi masina nimeks" fre "Ne peut obtenir de hostname pour votre adresse" ger "Kann Hostnamen für diese Adresse nicht erhalten" greek "Δεν έγινε γνωστό το hostname για την address σας" hindi "आपके I.P. ऐड्रेस के लिए होस्टनेम प्राप्त करने में विफल रहे" hun "A gepnev nem allapithato meg a cimbol" ita "Impossibile risalire al nome dell'host dall'indirizzo (risoluzione inversa)" jpn "IPアドレスからホスト名を解決できません。" kor "당신의 컴퓨터의 호스트이름을 얻을 수 없습니다." nla "Kan de hostname niet krijgen van uw adres" nor "Kan ikke få tak i vertsnavn for din adresse" norwegian-ny "Kan ikkje få tak i vertsnavn for di adresse" pol "Nie można otrzymać nazwy hosta dla twojego adresu" por "Não pode obter nome do 'host' para seu endereço" rum "Nu pot sa obtin hostname-ul adresei tale" rus "Невозможно получить имя хоста для вашего адреса" serbian "Ne mogu da dobijem ime host-a za vašu IP adresu" slo "Nemôžem zistiť meno hostiteľa pre vašu adresu" spa "No puedo obtener el nombre de equipo de la dirección de vd." swe "Kan inte hitta 'hostname' för din adress" ukr "Не можу визначити ім'я хосту для вашої адреси" ER_HANDSHAKE_ERROR 08S01 chi "坏握手" cze "Chyba při ustavování spojení" dan "Forkert håndtryk (handshake)" eng "Bad handshake" est "Väär handshake" fre "Mauvais 'handshake'" ger "Ungültiger Handshake" greek "Η αναγνώριση (handshake) δεν έγινε σωστά" hindi "संपर्क स्थापित करते समय त्रुटि हुई (BAD HANDSHAKE)" hun "A kapcsolatfelvetel nem sikerult (Bad handshake)" ita "Negoziazione impossibile" jpn "ハンドシェイクエラー" nla "Verkeerde handshake" nor "Feil håndtrykk (handshake)" norwegian-ny "Feil handtrykk (handshake)" pol "Zły uchwyt(handshake)" por "Negociação de acesso falhou" rum "Prost inceput de conectie (bad handshake)" rus "Некорректное приветствие" serbian "Loš početak komunikacije (handshake)" slo "Chyba pri nadväzovaní spojenia" spa "Mal apretón de manos (handshake)" swe "Fel vid initiering av kommunikationen med klienten" ukr "Невірна установка зв'язку" ER_DBACCESS_DENIED_ERROR 42000 chi "用户'%s'@'%s'无权访问数据库'%-.192s'" cze "Přístup pro uživatele '%s'@'%s' k databázi '%-.192s' není povolen" dan "Adgang nægtet bruger: '%s'@'%s' til databasen '%-.192s'" eng "Access denied for user '%s'@'%s' to database '%-.192s'" est "Ligipääs keelatud kasutajale '%s'@'%s' andmebaasile '%-.192s'" fre "Accès refusé pour l'utilisateur: '%s'@'%s'. Base '%-.192s'" ger "Benutzer '%s'@'%s' hat keine Zugriffsberechtigung für Datenbank '%-.192s'" greek "Δεν επιτέρεται η πρόσβαση στο χρήστη: '%s'@'%s' στη βάση δεδομένων '%-.192s'" hindi "यूज़र '%s'@'%s' को डेटाबेस '%-.192s' की अनुमति नहीं है" hun "A(z) '%s'@'%s' felhasznalo szamara tiltott eleres az '%-.192s' adabazishoz" ita "Accesso non consentito per l'utente: '%s'@'%s' al database '%-.192s'" jpn "ユーザー '%s'@'%s' の '%-.192s' データベースへのアクセスを拒否します" kor "'%s'@'%s' 사용자는 '%-.192s' 데이타베이스에 접근이 거부 되었습니다." nla "Toegang geweigerd voor gebruiker: '%s'@'%s' naar database '%-.192s'" nor "Tilgang nektet for bruker: '%s'@'%s' til databasen '%-.192s' nektet" norwegian-ny "Tilgang ikkje tillate for brukar: '%s'@'%s' til databasen '%-.192s' nekta" por "Acesso negado para o usuário '%s'@'%s' ao banco de dados '%-.192s'" rum "Acces interzis pentru utilizatorul: '%s'@'%s' la baza de date '%-.192s'" rus "Для пользователя '%s'@'%s' доступ к базе данных '%-.192s' закрыт" serbian "Pristup je zabranjen korisniku '%s'@'%s' za bazu '%-.192s'" slo "Zakázaný prístup pre užívateľa: '%s'@'%s' k databázi '%-.192s'" spa "Acceso denegado para usuario: '%s'@'%s' a la base de datos '%-.192s'" swe "Användare '%s'@'%s' är ej berättigad att använda databasen %-.192s" ukr "Доступ заборонено для користувача: '%s'@'%s' до бази данних '%-.192s'" ER_ACCESS_DENIED_ERROR 28000 chi "'%s'@'%s' 用户无权访问 (使用密码: %s)" cze "Přístup pro uživatele '%s'@'%s' (s heslem %s)" dan "Adgang nægtet bruger: '%s'@'%s' (Bruger adgangskode: %s)" eng "Access denied for user '%s'@'%s' (using password: %s)" est "Ligipääs keelatud kasutajale '%s'@'%s' (kasutab parooli: %s)" fre "Accès refusé pour l'utilisateur: '%s'@'%s' (mot de passe: %s)" ger "Benutzer '%s'@'%s' hat keine Zugriffsberechtigung (verwendetes Passwort: %s)" greek "Δεν επιτέρεται η πρόσβαση στο χρήστη: '%s'@'%s' (χρήση password: %s)" hindi "यूज़र '%s'@'%s' को अनुमति नहीं है (पासवर्ड का उपयोग: %s)" hun "A(z) '%s'@'%s' felhasznalo szamara tiltott eleres. (Hasznalja a jelszot: %s)" ita "Accesso non consentito per l'utente: '%s'@'%s' (Password: %s)" jpn "ユーザー '%s'@'%s' を拒否します.uUsing password: %s)" kor "'%s'@'%s' 사용자는 접근이 거부 되었습니다. (using password: %s)" nla "Toegang geweigerd voor gebruiker: '%s'@'%s' (Wachtwoord gebruikt: %s)" nor "Tilgang nektet for bruker: '%s'@'%s' (Bruker passord: %s)" norwegian-ny "Tilgang ikke tillate for brukar: '%s'@'%s' (Brukar passord: %s)" por "Acesso negado para o usuário '%s'@'%s' (senha usada: %s)" rum "Acces interzis pentru utilizatorul: '%s'@'%s' (Folosind parola: %s)" rus "Доступ закрыт для пользователя '%s'@'%s' (был использован пароль: %s)" serbian "Pristup je zabranjen korisniku '%s'@'%s' (koristi lozinku: '%s')" slo "Zakázaný prístup pre užívateľa: '%s'@'%s' (použitie hesla: %s)" spa "Acceso denegado para usuario: '%s'@'%s' (Usando contraseña: %s)" swe "Användare '%s'@'%s' är ej berättigad att logga in (Använder lösen: %s)" ukr "Доступ заборонено для користувача: '%s'@'%s' (Використано пароль: %s)" ER_NO_DB_ERROR 3D000 chi "没有选择数据库" cze "Nebyla vybrána žádná databáze" dan "Ingen database valgt" eng "No database selected" est "Andmebaasi ei ole valitud" fre "Aucune base n'a été sélectionnée" ger "Keine Datenbank ausgewählt" greek "Δεν επιλέχθηκε βάση δεδομένων" hindi "किसी भी डेटाबेस का चयन नहीं किया गया है" hun "Nincs kivalasztott adatbazis" ita "Nessun database selezionato" jpn "データベースが選択されていません。" kor "선택된 데이타베이스가 없습니다." nla "Geen database geselecteerd" nor "Ingen database valgt" norwegian-ny "Ingen database vald" pol "Nie wybrano żadnej bazy danych" por "Nenhum banco de dados foi selecionado" rum "Nici o baza de data nu a fost selectata inca" rus "База данных не выбрана" serbian "Ni jedna baza nije selektovana" slo "Nebola vybraná databáza" spa "Base de datos no seleccionada" swe "Ingen databas i användning" ukr "Базу данних не вибрано" ER_UNKNOWN_COM_ERROR 08S01 chi "未知的命令" cze "Neznámý příkaz" dan "Ukendt kommando" eng "Unknown command" est "Tundmatu käsk" fre "Commande inconnue" ger "Unbekannter Befehl" greek "Αγνωστη εντολή" hindi "अज्ञात आदेश" hun "Ervenytelen parancs" ita "Comando sconosciuto" jpn "不明なコマンドです。" kor "명령어가 뭔지 모르겠어요..." nla "Onbekend commando" nor "Ukjent kommando" norwegian-ny "Ukjent kommando" pol "Nieznana komenda" por "Comando desconhecido" rum "Comanda invalida" rus "Неизвестная команда коммуникационного протокола" serbian "Nepoznata komanda" slo "Neznámy príkaz" spa "Comando desconocido" swe "Okänt kommando" ukr "Невідома команда" ER_BAD_NULL_ERROR 23000 chi "列'%-.192s'不能为NULL" cze "Sloupec '%-.192s' nemůže být null" dan "Kolonne '%-.192s' kan ikke være NULL" eng "Column '%-.192s' cannot be null" est "Tulp '%-.192s' ei saa omada nullväärtust" fre "Le champ '%-.192s' ne peut être vide (null)" ger "Feld '%-.192s' darf nicht NULL sein" greek "Το πεδίο '%-.192s' δεν μπορεί να είναι κενό (null)" hindi "काँलम '%-.192s' NULL नहीं हो सकता" hun "A(z) '%-.192s' oszlop erteke nem lehet nulla" ita "La colonna '%-.192s' non puo` essere nulla" jpn "列 '%-.192s' は null にできません。" kor "칼럼 '%-.192s'는 널(Null)이 되면 안됩니다. " nla "Kolom '%-.192s' kan niet null zijn" nor "Kolonne '%-.192s' kan ikke vere null" norwegian-ny "Kolonne '%-.192s' kan ikkje vere null" pol "Kolumna '%-.192s' nie może być null" por "Coluna '%-.192s' não pode ser vazia" rum "Coloana '%-.192s' nu poate sa fie null" rus "Столбец '%-.192s' не может принимать величину NULL" serbian "Kolona '%-.192s' ne može biti NULL" slo "Pole '%-.192s' nemôže byť null" spa "La columna '%-.192s' no puede ser nula" swe "Kolumn '%-.192s' får inte vara NULL" ukr "Стовбець '%-.192s' не може бути нульовим" ER_BAD_DB_ERROR 42000 chi "未知数据库'%-.192s'" cze "Neznámá databáze '%-.192s'" dan "Ukendt database '%-.192s'" eng "Unknown database '%-.192s'" est "Tundmatu andmebaas '%-.192s'" fre "Base '%-.192s' inconnue" ger "Unbekannte Datenbank '%-.192s'" greek "Αγνωστη βάση δεδομένων '%-.192s'" hindi "अज्ञात डाटाबेस '%-.192s'" hun "Ervenytelen adatbazis: '%-.192s'" ita "Database '%-.192s' sconosciuto" jpn "'%-.192s' は不明なデータベースです。" kor "데이타베이스 '%-.192s'는 알수 없음" nla "Onbekende database '%-.192s'" nor "Ukjent database '%-.192s'" norwegian-ny "Ukjent database '%-.192s'" pol "Nieznana baza danych '%-.192s'" por "Banco de dados '%-.192s' desconhecido" rum "Baza de data invalida '%-.192s'" rus "Неизвестная база данных '%-.192s'" serbian "Nepoznata baza '%-.192s'" slo "Neznáma databáza '%-.192s'" spa "Base de datos '%-.192s' desconocida" swe "Okänd databas: '%-.192s'" ukr "Невідома база данних '%-.192s'" ER_TABLE_EXISTS_ERROR 42S01 chi "表'%-.192s'已经存在" cze "Tabulka '%-.192s' již existuje" dan "Tabellen '%-.192s' findes allerede" eng "Table '%-.192s' already exists" est "Tabel '%-.192s' juba eksisteerib" fre "La table '%-.192s' existe déjà" ger "Tabelle '%-.192s' bereits vorhanden" greek "Ο πίνακας '%-.192s' υπάρχει ήδη" hindi "टेबल '%-.192s' पहले से ही मौजूद है" hun "A(z) '%-.192s' tabla mar letezik" ita "La tabella '%-.192s' esiste gia`" jpn "表 '%-.192s' はすでに存在します。" kor "테이블 '%-.192s'는 이미 존재함" nla "Tabel '%-.192s' bestaat al" nor "Tabellen '%-.192s' eksisterer allerede" norwegian-ny "Tabellen '%-.192s' eksisterar allereide" pol "Tabela '%-.192s' już istnieje" por "Tabela '%-.192s' já existe" rum "Tabela '%-.192s' exista deja" rus "Таблица '%-.192s' уже существует" serbian "Tabela '%-.192s' već postoji" slo "Tabuľka '%-.192s' už existuje" spa "La tabla '%-.192s' ya existe" swe "Tabellen '%-.192s' finns redan" ukr "Таблиця '%-.192s' вже існує" ER_BAD_TABLE_ERROR 42S02 chi "未知表'%-.100T'" cze "Neznámá tabulka '%-.100T'" dan "Ukendt tabel '%-.100T'" eng "Unknown table '%-.100T'" est "Tundmatu tabel '%-.100T'" fre "Table '%-.100T' inconnue" ger "Unbekannte Tabelle '%-.100T'" greek "Αγνωστος πίνακας '%-.100T'" hindi "अज्ञात टेबल '%-.100T'" hun "Ervenytelen tabla: '%-.100T'" ita "Tabella '%-.100T' sconosciuta" jpn "'%-.100T' は不明な表です。" kor "테이블 '%-.100T'는 알수 없음" nla "Onbekende tabel '%-.100T'" nor "Ukjent tabell '%-.100T'" norwegian-ny "Ukjent tabell '%-.100T'" pol "Nieznana tabela '%-.100T'" por "Tabela '%-.100T' desconhecida" rum "Tabela '%-.100T' este invalida" rus "Неизвестная таблица '%-.100T'" serbian "Nepoznata tabela '%-.100T'" slo "Neznáma tabuľka '%-.100T'" spa "Tabla '%-.100T' no reconocida" swe "Okänd tabell '%-.100T'" ukr "Невідома таблиця '%-.100T'" ER_NON_UNIQ_ERROR 23000 chi "列名 '%-.192s' 在 %-.192s 定义模糊" cze "Sloupec '%-.192s' v %-.192s není zcela jasný" dan "Felt: '%-.192s' i tabel %-.192s er ikke entydigt" eng "Column '%-.192s' in %-.192s is ambiguous" est "Väli '%-.192s' %-.192s-s ei ole ühene" fre "Champ: '%-.192s' dans %-.192s est ambigu" ger "Feld '%-.192s' in %-.192s ist nicht eindeutig" greek "Το πεδίο: '%-.192s' σε %-.192s δεν έχει καθοριστεί" hindi "काँलम '%-.192s' अस्पष्ट है (टेबल: %-.192s)" hun "A(z) '%-.192s' oszlop %-.192s-ben ketertelmu" ita "Colonna: '%-.192s' di %-.192s e` ambigua" jpn "列 '%-.192s' は %-.192s 内で曖昧です。" kor "칼럼: '%-.192s' in '%-.192s' 이 모호함" nla "Kolom: '%-.192s' in %-.192s is niet eenduidig" nor "Felt: '%-.192s' i tabell %-.192s er ikke entydig" norwegian-ny "Kolonne: '%-.192s' i tabell %-.192s er ikkje eintydig" pol "Kolumna: '%-.192s' w %-.192s jest dwuznaczna" por "Coluna '%-.192s' em '%-.192s' é ambígua" rum "Coloana: '%-.192s' in %-.192s este ambigua" rus "Столбец '%-.192s' в %-.192s задан неоднозначно" serbian "Kolona '%-.192s' u %-.192s nije jedinstvena u kontekstu" slo "Pole: '%-.192s' v %-.192s je nejasné" spa "La columna: '%-.192s' en %-.192s es ambigua" swe "Kolumn '%-.192s' i %-.192s är inte unik" ukr "Стовбець '%-.192s' у %-.192s визначений неоднозначно" ER_SERVER_SHUTDOWN 08S01 chi "服务器正在关闭" cze "Probíhá ukončování práce serveru" dan "Database nedlukning er i gang" eng "Server shutdown in progress" est "Serveri seiskamine käib" fre "Arrêt du serveur en cours" ger "Der Server wird heruntergefahren" greek "Εναρξη διαδικασίας αποσύνδεσης του εξυπηρετητή (server shutdown)" hindi "सर्वर बंद हो रहा है" hun "A szerver leallitasa folyamatban" ita "Shutdown del server in corso" jpn "サーバーをシャットダウン中です。" kor "Server가 셧다운 중입니다." nla "Bezig met het stoppen van de server" nor "Database nedkobling er i gang" norwegian-ny "Tenar nedkopling er i gang" pol "Trwa kończenie działania serwera" por "'Shutdown' do servidor em andamento" rum "Terminarea serverului este in desfasurare" rus "Сервер находится в процессе остановки" serbian "Gašenje servera je u toku" slo "Prebieha ukončovanie práce servera" spa "Desconexión de servidor en proceso" swe "Servern går nu ned" ukr "Завершується работа сервера" ER_BAD_FIELD_ERROR 42S22 S0022 chi "未知列'%-.192s'在'%-.192s'" cze "Neznámý sloupec '%-.192s' v %-.192s" dan "Ukendt kolonne '%-.192s' i tabel %-.192s" eng "Unknown column '%-.192s' in '%-.192s'" est "Tundmatu tulp '%-.192s' '%-.192s'-s" fre "Champ '%-.192s' inconnu dans %-.192s" ger "Unbekanntes Tabellenfeld '%-.192s' in %-.192s" greek "Αγνωστο πεδίο '%-.192s' σε '%-.192s'" hindi "अज्ञात काँलम '%-.192s'(टेबल: '%-.192s')" hun "A(z) '%-.192s' oszlop ervenytelen '%-.192s'-ben" ita "Colonna sconosciuta '%-.192s' in '%-.192s'" jpn "列 '%-.192s' は '%-.192s' にはありません。" kor "Unknown 칼럼 '%-.192s' in '%-.192s'" nla "Onbekende kolom '%-.192s' in %-.192s" nor "Ukjent kolonne '%-.192s' i tabell %-.192s" norwegian-ny "Ukjent felt '%-.192s' i tabell %-.192s" pol "Nieznana kolumna '%-.192s' w %-.192s" por "Coluna '%-.192s' desconhecida em '%-.192s'" rum "Coloana invalida '%-.192s' in '%-.192s'" rus "Неизвестный столбец '%-.192s' в '%-.192s'" serbian "Nepoznata kolona '%-.192s' u '%-.192s'" slo "Neznáme pole '%-.192s' v '%-.192s'" spa "No se reconoce la columna '%-.192s' en %-.192s" swe "Okänd kolumn '%-.192s' i %-.192s" ukr "Невідомий стовбець '%-.192s' у '%-.192s'" ER_WRONG_FIELD_WITH_GROUP 42000 S1009 chi "'%-.192s' 不在 GROUP BY" cze "Použité '%-.192s' nebylo v group by" dan "Brugte '%-.192s' som ikke var i group by" eng "'%-.192s' isn't in GROUP BY" est "'%-.192s' puudub GROUP BY klauslis" fre "'%-.192s' n'est pas dans 'group by'" ger "'%-.192s' ist nicht in GROUP BY vorhanden" greek "Χρησιμοποιήθηκε '%-.192s' που δεν υπήρχε στο group by" hindi "'%-.192s' GROUP BY में नहीं है" hun "Used '%-.192s' with wasn't in group by" ita "Usato '%-.192s' che non e` nel GROUP BY" jpn "'%-.192s' はGROUP BY句で指定されていません。" kor "'%-.192s'은 GROUP BY속에 없음" nla "Opdracht gebruikt '%-.192s' dat niet in de GROUP BY voorkomt" nor "Brukte '%-.192s' som ikke var i group by" norwegian-ny "Brukte '%-.192s' som ikkje var i group by" pol "Użyto '%-.192s' bez umieszczenia w group by" por "'%-.192s' não está em 'GROUP BY'" rum "'%-.192s' nu exista in clauza GROUP BY" rus "'%-.192s' не присутствует в GROUP BY" serbian "Entitet '%-.192s' nije naveden u komandi 'GROUP BY'" slo "Použité '%-.192s' nebolo v 'group by'" spa "'%-.192s' no se encuentra en GROUP BY" swe "'%-.192s' finns inte i GROUP BY" ukr "'%-.192s' не є у GROUP BY" ER_WRONG_GROUP_FIELD 42000 S1009 chi "不能在'%-.192s'上分组" cze "Nemohu použít group na '%-.192s'" dan "Kan ikke gruppere på '%-.192s'" eng "Can't group on '%-.192s'" est "Ei saa grupeerida '%-.192s' järgi" fre "Ne peut regrouper '%-.192s'" ger "Gruppierung über '%-.192s' nicht möglich" greek "Αδύνατη η ομαδοποίηση (group on) '%-.192s'" hindi "'%-.192s' पर GROUP नहीं कर सकते" hun "A group nem hasznalhato: '%-.192s'" ita "Impossibile raggruppare per '%-.192s'" jpn "'%-.192s' でのグループ化はできません。" kor "'%-.192s'를 그룹할 수 없음" nla "Kan '%-.192s' niet groeperen" nor "Kan ikke gruppere på '%-.192s'" norwegian-ny "Kan ikkje gruppere på '%-.192s'" pol "Nie można grupować po '%-.192s'" por "Não pode agrupar em '%-.192s'" rum "Nu pot sa grupez pe (group on) '%-.192s'" rus "Невозможно произвести группировку по '%-.192s'" serbian "Ne mogu da grupišem po '%-.192s'" slo "Nemôžem použiť 'group' na '%-.192s'" spa "No puedo agrupar por '%-.192s'" swe "Kan inte använda GROUP BY med '%-.192s'" ukr "Не можу групувати по '%-.192s'" ER_WRONG_SUM_SELECT 42000 S1009 chi "语句在同一语句里有求和函数和列" cze "Příkaz obsahuje zároveň funkci sum a sloupce" dan "Udtrykket har summer (sum) funktioner og kolonner i samme udtryk" eng "Statement has sum functions and columns in same statement" est "Lauses on korraga nii tulbad kui summeerimisfunktsioonid" fre "Vous demandez la fonction sum() et des champs dans la même commande" ger "Die Verwendung von Summierungsfunktionen und Spalten im selben Befehl ist nicht erlaubt" greek "Η διατύπωση περιέχει sum functions και columns στην ίδια διατύπωση" ita "Il comando ha una funzione SUM e una colonna non specificata nella GROUP BY" jpn "集計関数と通常の列が同時に指定されています。" kor "Statement 가 sum기능을 동작중이고 칼럼도 동일한 statement입니다." nla "Opdracht heeft totaliseer functies en kolommen in dezelfde opdracht" nor "Uttrykket har summer (sum) funksjoner og kolonner i samme uttrykk" norwegian-ny "Uttrykket har summer (sum) funksjoner og kolonner i same uttrykk" pol "Zapytanie ma funkcje sumuj?ce i kolumny w tym samym zapytaniu" por "Cláusula contém funções de soma e colunas juntas" rum "Comanda are functii suma si coloane in aceeasi comanda" rus "Выражение содержит групповые функции и столбцы, но не включает GROUP BY. А как вы умудрились получить это сообщение об ошибке?" serbian "Izraz ima 'SUM' agregatnu funkciju i kolone u isto vreme" slo "Príkaz obsahuje zároveň funkciu 'sum' a poľa" spa "La sentencia tiene funciones de suma y columnas en la misma sentencia" swe "Kommandot har både sum functions och enkla funktioner" ukr "У виразі використано підсумовуючі функції поряд з іменами стовбців" ER_WRONG_VALUE_COUNT 21S01 chi "列数与值数不匹配" cze "Počet sloupců neodpovídá zadané hodnotě" dan "Kolonne tæller stemmer ikke med antallet af værdier" eng "Column count doesn't match value count" est "Tulpade arv erineb väärtuste arvust" ger "Die Anzahl der Spalten entspricht nicht der Anzahl der Werte" greek "Το Column count δεν ταιριάζει με το value count" hindi "कॉलम की गिनती मूल्य की गिनती के समान नही है" hun "Az oszlopban levo ertek nem egyezik meg a szamitott ertekkel" ita "Il numero delle colonne non e` uguale al numero dei valori" jpn "列数が値の個数と一致しません。" kor "칼럼의 카운트가 값의 카운트와 일치하지 않습니다." nla "Het aantal kolommen komt niet overeen met het aantal opgegeven waardes" nor "Felt telling stemmer verdi telling" norwegian-ny "Kolonne telling stemmer verdi telling" pol "Liczba kolumn nie odpowiada liczbie warto?ci" por "Contagem de colunas não confere com a contagem de valores" rum "Numarul de coloane nu este acelasi cu numarul valoarei" rus "Количество столбцов не совпадает с количеством значений" serbian "Broj kolona ne odgovara broju vrednosti" slo "Počet polí nezodpovedá zadanej hodnote" spa "El contador de columnas no coincide con el contador de valores" swe "Antalet kolumner motsvarar inte antalet värden" ukr "Кількість стовбців не співпадає з кількістю значень" ER_TOO_LONG_IDENT 42000 S1009 chi "标识符'%-.100T'太长" cze "Jméno identifikátoru '%-.100T' je příliš dlouhé" dan "Navnet '%-.100T' er for langt" eng "Identifier name '%-.100T' is too long" est "Identifikaatori '%-.100T' nimi on liiga pikk" fre "Le nom de l'identificateur '%-.100T' est trop long" ger "Name des Bezeichners '%-.100T' ist zu lang" greek "Το identifier name '%-.100T' είναι πολύ μεγάλο" hindi "पहचानकर्ता का नाम '%-.100T' बहुत लंबा है" hun "A(z) '%-.100T' azonositonev tul hosszu" ita "Il nome dell'identificatore '%-.100T' e` troppo lungo" jpn "識別子名 '%-.100T' は長すぎます。" kor "Identifier '%-.100T'는 너무 길군요." nla "Naam voor herkenning '%-.100T' is te lang" nor "Identifikator '%-.100T' er for lang" norwegian-ny "Identifikator '%-.100T' er for lang" pol "Nazwa identyfikatora '%-.100T' jest zbyt długa" por "Nome identificador '%-.100T' é longo demais" rum "Numele indentificatorului '%-.100T' este prea lung" rus "Слишком длинный идентификатор '%-.100T'" serbian "Ime '%-.100T' je predugačko" slo "Meno identifikátora '%-.100T' je príliš dlhé" spa "El nombre del identificador '%-.100T' es demasiado grande" swe "Kolumnnamn '%-.100T' är för långt" ukr "Ім'я ідентифікатора '%-.100T' задовге" ER_DUP_FIELDNAME 42S21 S1009 chi "列名重复 '%-.192s'" cze "Zdvojené jméno sloupce '%-.192s'" dan "Feltnavnet '%-.192s' findes allerede" eng "Duplicate column name '%-.192s'" est "Kattuv tulba nimi '%-.192s'" fre "Nom du champ '%-.192s' déjà utilisé" ger "Doppelter Spaltenname: '%-.192s'" greek "Επανάληψη column name '%-.192s'" hindi "समान कॉलम '%-.192s' मौजूद है" hun "Duplikalt oszlopazonosito: '%-.192s'" ita "Nome colonna duplicato '%-.192s'" jpn "列名 '%-.192s' は重複してます。" kor "중복된 칼럼 이름: '%-.192s'" nla "Dubbele kolom naam '%-.192s'" nor "Feltnavnet '%-.192s' eksisterte fra før" norwegian-ny "Feltnamnet '%-.192s' eksisterte frå før" pol "Powtórzona nazwa kolumny '%-.192s'" por "Nome da coluna '%-.192s' duplicado" rum "Numele coloanei '%-.192s' e duplicat" rus "Дублирующееся имя столбца '%-.192s'" serbian "Duplirano ime kolone '%-.192s'" slo "Opakované meno poľa '%-.192s'" spa "Nombre duplicado de columna '%-.192s'" swe "Kolumnnamn '%-.192s finns flera gånger" ukr "Дублююче ім'я стовбця '%-.192s'" ER_DUP_KEYNAME 42000 S1009 chi "索引名重复 '%-.192s'" cze "Zdvojené jméno klíče '%-.192s'" dan "Indeksnavnet '%-.192s' findes allerede" eng "Duplicate key name '%-.192s'" est "Kattuv võtme nimi '%-.192s'" fre "Nom de clef '%-.192s' déjà utilisé" ger "Doppelter Name für Schlüssel vorhanden: '%-.192s'" greek "Επανάληψη key name '%-.192s'" hindi "समान KEY '%-.192s' मौजूद है" hun "Duplikalt kulcsazonosito: '%-.192s'" ita "Nome chiave duplicato '%-.192s'" jpn "索引名 '%-.192s' は重複しています。" kor "중복된 키 이름 : '%-.192s'" nla "Dubbele zoeksleutel naam '%-.192s'" nor "Nøkkelnavnet '%-.192s' eksisterte fra før" norwegian-ny "Nøkkelnamnet '%-.192s' eksisterte frå før" pol "Powtórzony nazwa klucza '%-.192s'" por "Nome da chave '%-.192s' duplicado" rum "Numele cheiei '%-.192s' e duplicat" rus "Дублирующееся имя ключа '%-.192s'" serbian "Duplirano ime ključa '%-.192s'" slo "Opakované meno kľúča '%-.192s'" spa "Nombre duplicado de clave '%-.192s'" swe "Nyckelnamn '%-.192s' finns flera gånger" ukr "Дублююче ім'я ключа '%-.192s'" # When using this error code, please use ER(ER_DUP_ENTRY_WITH_KEY_NAME) # for the message string. See, for example, code in handler.cc. ER_DUP_ENTRY 23000 S1009 chi "重复条目'%-.192T'在索引%d" cze "Zdvojený klíč '%-.192T' (číslo klíče %d)" dan "Ens værdier '%-.192T' for indeks %d" eng "Duplicate entry '%-.192T' for key %d" est "Kattuv väärtus '%-.192T' võtmele %d" fre "Duplicata du champ '%-.192T' pour la clef %d" ger "Doppelter Eintrag '%-.192T' für Schlüssel %d" greek "Διπλή εγγραφή '%-.192T' για το κλειδί %d" hindi "सामान प्रवेश '%-.192T' KEY %d के लिए" hun "Duplikalt bejegyzes '%-.192T' a %d kulcs szerint" ita "Valore duplicato '%-.192T' per la chiave %d" jpn "'%-.192T' は索引 %d で重複しています。" kor "중복된 입력 값 '%-.192T': key %d" nla "Dubbele ingang '%-.192T' voor zoeksleutel %d" nor "Like verdier '%-.192T' for nøkkel %d" norwegian-ny "Like verdiar '%-.192T' for nykkel %d" pol "Powtórzone wystąpienie '%-.192T' dla klucza %d" por "Entrada '%-.192T' duplicada para a chave %d" rum "Cimpul '%-.192T' e duplicat pentru cheia %d" rus "Дублирующаяся запись '%-.192T' по ключу %d" serbian "Dupliran unos '%-.192T' za ključ '%d'" slo "Opakovaný kľúč '%-.192T' (číslo kľúča %d)" spa "Entrada duplicada '%-.192T' para la clave %d" swe "Dublett '%-.192T' för nyckel %d" ukr "Дублюючий запис '%-.192T' для ключа %d" ER_WRONG_FIELD_SPEC 42000 S1009 chi "列的说明符不对 '%-.192s'" cze "Chybná specifikace sloupce '%-.192s'" dan "Forkert kolonnespecifikaton for felt '%-.192s'" eng "Incorrect column specifier for column '%-.192s'" est "Vigane tulba kirjeldus tulbale '%-.192s'" fre "Mauvais paramètre de champ pour le champ '%-.192s'" ger "Falsche Spezifikation für Feld '%-.192s'" greek "Εσφαλμένο column specifier για το πεδίο '%-.192s'" hindi "कॉलम '%-.192s' के लिए गलत कॉलम विनिर्देशक" hun "Rossz oszlopazonosito: '%-.192s'" ita "Specifica errata per la colonna '%-.192s'" jpn "列 '%-.192s' の定義が不正です。" kor "칼럼 '%-.192s'의 부정확한 칼럼 정의자" nla "Verkeerde kolom specificatie voor kolom '%-.192s'" nor "Feil kolonne spesifikator for felt '%-.192s'" norwegian-ny "Feil kolonne spesifikator for kolonne '%-.192s'" pol "Błędna specyfikacja kolumny dla kolumny '%-.192s'" por "Especificador de coluna incorreto para a coluna '%-.192s'" rum "Specificandul coloanei '%-.192s' este incorect" rus "Некорректный определитель столбца для столбца '%-.192s'" serbian "Pogrešan naziv kolone za kolonu '%-.192s'" slo "Chyba v špecifikácii poľa '%-.192s'" spa "Especificador de columna incorrecto para la columna '%-.192s'" swe "Felaktigt kolumntyp för kolumn '%-.192s'" ukr "Невірний специфікатор стовбця '%-.192s'" ER_PARSE_ERROR 42000 s1009 chi "%s 附近'%-.80T'在第%d行" cze "%s blízko '%-.80T' na řádku %d" dan "%s nær '%-.80T' på linje %d" eng "%s near '%-.80T' at line %d" est "%s '%-.80T' ligidal real %d" fre "%s près de '%-.80T' à la ligne %d" ger "%s bei '%-.80T' in Zeile %d" greek "%s πλησίον '%-.80T' στη γραμμή %d" hindi "%s के पास '%-.80T' लाइन %d में" hun "A %s a '%-.80T'-hez kozeli a %d sorban" ita "%s vicino a '%-.80T' linea %d" jpn "%s : '%-.80T' 付近 %d 行目" kor "'%s' 에러 같습니다. ('%-.80T' 명령어 라인 %d)" nla "%s bij '%-.80T' in regel %d" nor "%s nær '%-.80T' på linje %d" norwegian-ny "%s attmed '%-.80T' på line %d" pol "%s obok '%-.80T' w linii %d" por "%s próximo a '%-.80T' na linha %d" rum "%s linga '%-.80T' pe linia %d" rus "%s около '%-.80T' на строке %d" serbian "'%s' u iskazu '%-.80T' na liniji %d" slo "%s blízko '%-.80T' na riadku %d" spa "%s cerca de '%-.80T' en la línea %d" swe "%s nära '%-.80T' på rad %d" ukr "%s біля '%-.80T' в строці %d" ER_EMPTY_QUERY 42000 chi "查询为空" cze "Výsledek dotazu je prázdný" dan "Forespørgsel var tom" eng "Query was empty" est "Tühi päring" fre "Query est vide" ger "Leere Abfrage" greek "Το ερώτημα (query) που θέσατε ήταν κενό" hindi "क्वेरी खली थी" hun "Ures lekerdezes" ita "La query e` vuota" jpn "クエリが空です。" kor "쿼리결과가 없습니다." nla "Query was leeg" nor "Forespørsel var tom" norwegian-ny "Førespurnad var tom" pol "Zapytanie było puste" por "Consulta (query) estava vazia" rum "Query-ul a fost gol" rus "Запрос оказался пустым" serbian "Upit je bio prazan" slo "Výsledok požiadavky bol prázdny" spa "La consulta (query) estaba vacia" swe "Frågan var tom" ukr "Пустий запит" ER_NONUNIQ_TABLE 42000 S1009 chi "表或别名不唯一:'%-.192s'" cze "Nejednoznačná tabulka/alias: '%-.192s'" dan "Tabellen/aliaset: '%-.192s' er ikke unikt" eng "Not unique table/alias: '%-.192s'" est "Ei ole unikaalne tabel/alias '%-.192s'" fre "Table/alias: '%-.192s' non unique" ger "Tabellenname/Alias '%-.192s' nicht eindeutig" greek "Αδύνατη η ανεύρεση unique table/alias: '%-.192s'" hindi "टेबल या उसका उपनाम '%-.192s' अद्वितीय नहीं है" hun "Nem egyedi tabla/alias: '%-.192s'" ita "Tabella/alias non unico: '%-.192s'" jpn "表名/別名 '%-.192s' は一意ではありません。" kor "Unique 하지 않은 테이블/alias: '%-.192s'" nla "Niet unieke waarde tabel/alias: '%-.192s'" nor "Ikke unikt tabell/alias: '%-.192s'" norwegian-ny "Ikkje unikt tabell/alias: '%-.192s'" pol "Tabela/alias nie s? unikalne: '%-.192s'" por "Tabela/alias '%-.192s' não única" rum "Tabela/alias: '%-.192s' nu este unic" rus "Повторяющаяся таблица/псевдоним '%-.192s'" serbian "Tabela ili alias nisu bili jedinstveni: '%-.192s'" slo "Nie jednoznačná tabuľka/alias: '%-.192s'" spa "La tabla/alias: '%-.192s' no es única" swe "Icke unikt tabell/alias: '%-.192s'" ukr "Неунікальна таблиця/псевдонім: '%-.192s'" ER_INVALID_DEFAULT 42000 S1009 chi "'%-.192s'的默认值无效" cze "Chybná defaultní hodnota pro '%-.192s'" dan "Ugyldig standardværdi for '%-.192s'" eng "Invalid default value for '%-.192s'" est "Vigane vaikeväärtus '%-.192s' jaoks" fre "Valeur par défaut invalide pour '%-.192s'" ger "Fehlerhafter Vorgabewert (DEFAULT) für '%-.192s'" greek "Εσφαλμένη προκαθορισμένη τιμή (default value) για '%-.192s'" hindi "'%-.192s' के लिए अवैध डिफ़ॉल्ट मान" hun "Ervenytelen ertek: '%-.192s'" ita "Valore di default non valido per '%-.192s'" jpn "'%-.192s' へのデフォルト値が無効です。" kor "'%-.192s'의 유효하지 못한 디폴트 값을 사용하셨습니다." nla "Foutieve standaard waarde voor '%-.192s'" nor "Ugyldig standardverdi for '%-.192s'" norwegian-ny "Ugyldig standardverdi for '%-.192s'" pol "Niewła?ciwa warto?ć domy?lna dla '%-.192s'" por "Valor padrão (default) inválido para '%-.192s'" rum "Valoarea de default este invalida pentru '%-.192s'" rus "Некорректное значение по умолчанию для '%-.192s'" serbian "Loša default vrednost za '%-.192s'" slo "Chybná implicitná hodnota pre '%-.192s'" spa "Valor por defecto inválido para '%-.192s'" swe "Ogiltigt DEFAULT värde för '%-.192s'" ukr "Невірне значення по замовчуванню для '%-.192s'" ER_MULTIPLE_PRI_KEY 42000 S1009 chi "定义了多个主键" cze "Definováno více primárních klíčů" dan "Flere primærnøgler specificeret" eng "Multiple primary key defined" est "Mitut primaarset võtit ei saa olla" fre "Plusieurs clefs primaires définies" ger "Mehrere Primärschlüssel (PRIMARY KEY) definiert" greek "Περισσότερα από ένα primary key ορίστηκαν" hindi "कई PRIMARY KEY परिभाषित" hun "Tobbszoros elsodleges kulcs definialas" ita "Definite piu` chiave primarie" jpn "PRIMARY KEY が複数定義されています。" kor "Multiple primary key가 정의되어 있슴" nla "Meerdere primaire zoeksleutels gedefinieerd" nor "Fleire primærnøkle spesifisert" norwegian-ny "Fleire primærnyklar spesifisert" pol "Zdefiniowano wiele kluczy podstawowych" por "Definida mais de uma chave primária" rum "Chei primare definite de mai multe ori" rus "Указано несколько первичных ключей" serbian "Definisani višestruki primarni ključevi" slo "Zadefinovaných viac primárnych kľúčov" spa "Múltiples claves primarias definidas" swe "Flera PRIMARY KEY använda" ukr "Первинного ключа визначено неодноразово" ER_TOO_MANY_KEYS 42000 S1009 chi "定义的索引太多; 最多允许%d 个索引" cze "Zadáno příliš mnoho klíčů, je povoleno nejvíce %d klíčů" dan "For mange nøgler specificeret. Kun %d nøgler må bruges" eng "Too many keys specified; max %d keys allowed" est "Liiga palju võtmeid. Maksimaalselt võib olla %d võtit" fre "Trop de clefs sont définies. Maximum de %d clefs alloué" ger "Zu viele Schlüssel definiert. Maximal %d Schlüssel erlaubt" greek "Πάρα πολλά key ορίσθηκαν. Το πολύ %d επιτρέπονται" hindi "बहुत सारी KEYS निर्दिष्ट हैं; अधिकतम %d KEYS की अनुमति है" hun "Tul sok kulcs. Maximum %d kulcs engedelyezett" ita "Troppe chiavi. Sono ammesse max %d chiavi" jpn "索引の数が多すぎます。最大 %d 個までです。" kor "너무 많은 키가 정의되어 있습니다.. 최대 %d의 키가 가능함" nla "Teveel zoeksleutels gedefinieerd. Maximaal zijn %d zoeksleutels toegestaan" nor "For mange nøkler spesifisert. Maks %d nøkler tillatt" norwegian-ny "For mange nykler spesifisert. Maks %d nyklar tillatt" pol "Okre?lono zbyt wiele kluczy. Dostępnych jest maksymalnie %d kluczy" por "Especificadas chaves demais. O máximo permitido são %d chaves" rum "Prea multe chei. Numarul de chei maxim este %d" rus "Указано слишком много ключей. Разрешается указывать не более %d ключей" serbian "Navedeno je previše ključeva. Maksimum %d ključeva je dozvoljeno" slo "Zadaných ríliš veľa kľúčov. Najviac %d kľúčov je povolených" spa "Demasiadas claves primarias declaradas. Se permite un máximo de %d claves" swe "För många nycklar använda. Man får ha högst %d nycklar" ukr "Забагато ключів зазначено. Дозволено не більше %d ключів" ER_TOO_MANY_KEY_PARTS 42000 S1009 chi "指定的索引部分过多; 最多允许%d个部分" cze "Zadáno příliš mnoho část klíčů, je povoleno nejvíce %d částí" dan "For mange nøgledele specificeret. Kun %d dele må bruges" eng "Too many key parts specified; max %d parts allowed" est "Võti koosneb liiga paljudest osadest. Maksimaalselt võib olla %d osa" fre "Trop de parties specifiées dans la clef. Maximum de %d parties" ger "Zu viele Teilschlüssel definiert. Maximal %d Teilschlüssel erlaubt" greek "Πάρα πολλά key parts ορίσθηκαν. Το πολύ %d επιτρέπονται" hindi "बहुत सारे KEY के भाग निर्दिष्ट हैं; अधिकतम %d भागों की अनुमति है" hun "Tul sok kulcsdarabot definialt. Maximum %d resz engedelyezett" ita "Troppe parti di chiave specificate. Sono ammesse max %d parti" jpn "索引のキー列指定が多すぎます。最大 %d 個までです。" kor "너무 많은 키 부분(parts)들이 정의되어 있습니다.. 최대 %d 부분이 가능함" nla "Teveel zoeksleutel onderdelen gespecificeerd. Maximaal %d onderdelen toegestaan" nor "For mange nøkkeldeler spesifisert. Maks %d deler tillatt" norwegian-ny "For mange nykkeldelar spesifisert. Maks %d delar tillatt" pol "Okre?lono zbyt wiele czę?ci klucza. Dostępnych jest maksymalnie %d czę?ci" por "Especificadas partes de chave demais. O máximo permitido são %d partes" rum "Prea multe chei. Numarul de chei maxim este %d" rus "Указано слишком много частей составного ключа. Разрешается указывать не более %d частей" serbian "Navedeno je previše delova ključa. Maksimum %d delova je dozvoljeno" slo "Zadaných ríliš veľa častí kľúčov. Je povolených najviac %d častí" spa "Demasiadas partes de clave declaradas. Se permite un máximo de %d partes" swe "För många nyckeldelar använda. Man får ha högst %d nyckeldelar" ukr "Забагато частин ключа зазначено. Дозволено не більше %d частин" ER_TOO_LONG_KEY 42000 S1009 chi "指定索引太长; 最大索引长度是 %d字节" cze "Zadaný klíč byl příliš dlouhý, největší délka klíče je %d" dan "Specificeret nøgle var for lang. Maksimal nøglelængde er %d" eng "Specified key was too long; max key length is %d bytes" est "Võti on liiga pikk. Maksimaalne võtmepikkus on %d" fre "La clé est trop longue. Longueur maximale: %d" ger "Schlüssel ist zu lang. Die maximale Schlüssellänge beträgt %d" greek "Το κλειδί που ορίσθηκε είναι πολύ μεγάλο. Το μέγιστο μήκος είναι %d" hindi "निर्दिष्ट KEY बहुत लंबी थी; KEY की अधिकतम लंबाई %d बाइट है" hun "A megadott kulcs tul hosszu. Maximalis kulcshosszusag: %d" ita "La chiave specificata e` troppo lunga. La max lunghezza della chiave e` %d" jpn "索引のキーが長すぎます。最大 %d バイトまでです。" kor "정의된 키가 너무 깁니다. 최대 키의 길이는 %d입니다." nla "Gespecificeerde zoeksleutel was te lang. De maximale lengte is %d" nor "Spesifisert nøkkel var for lang. Maks nøkkellengde er is %d" norwegian-ny "Spesifisert nykkel var for lang. Maks nykkellengde er %d" pol "Zdefinowany klucz jest zbyt długi. Maksymaln? długo?ci? klucza jest %d" por "Chave especificada longa demais. O comprimento de chave máximo permitido é %d" rum "Cheia specificata este prea lunga. Marimea maxima a unei chei este de %d" rus "Указан слишком длинный ключ. Максимальная длина ключа составляет %d байт" serbian "Navedeni ključ je predug. Maksimalna dužina ključa je %d" slo "Zadaný kľúč je príliš dlhý, najväčšia dĺžka kľúča je %d" spa "Declaración de clave demasiado larga. La máxima longitud de clave es de %d" swe "För lång nyckel. Högsta tillåtna nyckellängd är %d" ukr "Зазначений ключ задовгий. Найбільша довжина ключа %d байтів" ER_KEY_COLUMN_DOES_NOT_EXITS 42000 S1009 chi "索引列'%-.192s'不在表里" cze "Klíčový sloupec '%-.192s' v tabulce neexistuje" dan "Nøglefeltet '%-.192s' eksisterer ikke i tabellen" eng "Key column '%-.192s' doesn't exist in table" est "Võtme tulp '%-.192s' puudub tabelis" fre "La clé '%-.192s' n'existe pas dans la table" ger "In der Tabelle gibt es kein Schlüsselfeld '%-.192s'" greek "Το πεδίο κλειδί '%-.192s' δεν υπάρχει στον πίνακα" hindi "KEY कॉलम '%-.192s' टेबल में मौजूद नहीं है" hun "A(z) '%-.192s'kulcsoszlop nem letezik a tablaban" ita "La colonna chiave '%-.192s' non esiste nella tabella" jpn "キー列 '%-.192s' は表にありません。" kor "Key 칼럼 '%-.192s'는 테이블에 존재하지 않습니다." nla "Zoeksleutel kolom '%-.192s' bestaat niet in tabel" nor "Nøkkel felt '%-.192s' eksiterer ikke i tabellen" norwegian-ny "Nykkel kolonne '%-.192s' eksiterar ikkje i tabellen" pol "Kolumna '%-.192s' zdefiniowana w kluczu nie istnieje w tabeli" por "Coluna chave '%-.192s' não existe na tabela" rum "Coloana cheie '%-.192s' nu exista in tabela" rus "Ключевой столбец '%-.192s' в таблице не существует" serbian "Ključna kolona '%-.192s' ne postoji u tabeli" slo "Kľúčový stĺpec '%-.192s' v tabuľke neexistuje" spa "La columna de clave '%-.192s' no existe en la tabla" swe "Nyckelkolumn '%-.192s' finns inte" ukr "Ключовий стовбець '%-.192s' не існує у таблиці" ER_BLOB_USED_AS_KEY 42000 S1009 chi "索引里不能含有BLOB列%`s表%s" eng "BLOB column %`s can't be used in key specification in the %s table" ger "BLOB-Feld %`s kann beim %s Tabellen nicht als Schlüssel verwendet werden" hindi "BLOB कॉलम %`s टेबल %s में KEY विनिर्देश में इस्तेमाल नहीं किया जा सकता" rus "Столбец типа BLOB %`s не может быть использован как значение ключа в %s таблице" spa "La columna BLOB %`s no se puede usar en la especificación de clave en la tabla %s" ukr "BLOB стовбець %`s не може бути використаний у визначенні ключа в %s таблиці" ER_TOO_BIG_FIELDLENGTH 42000 S1009 chi "数据太长超过列容量 '%-.192s' (最长 = %lu); 用 BLOB 或 TEXT 替代" cze "Příliš velká délka sloupce '%-.192s' (nejvíce %lu). Použijte BLOB" dan "For stor feltlængde for kolonne '%-.192s' (maks = %lu). Brug BLOB i stedet" eng "Column length too big for column '%-.192s' (max = %lu); use BLOB or TEXT instead" est "Tulba '%-.192s' pikkus on liiga pikk (maksimaalne pikkus: %lu). Kasuta BLOB väljatüüpi" fre "Champ '%-.192s' trop long (max = %lu). Utilisez un BLOB" ger "Feldlänge für Feld '%-.192s' zu groß (maximal %lu). BLOB- oder TEXT-Spaltentyp verwenden!" greek "Πολύ μεγάλο μήκος για το πεδίο '%-.192s' (max = %lu). Παρακαλώ χρησιμοποιείστε τον τύπο BLOB" hindi "कॉलम की लंबाई कॉलम '%-.192s' के लिए बड़ी है (अधिकतम = %lu); BLOB या TEXT का उपयोग करें" hun "A(z) '%-.192s' oszlop tul hosszu. (maximum = %lu). Hasznaljon BLOB tipust inkabb" ita "La colonna '%-.192s' e` troppo grande (max=%lu). Utilizza un BLOB" jpn "列 '%-.192s' のサイズ定義が大きすぎます (最大 %lu まで)。代わりに BLOB または TEXT を使用してください。" kor "칼럼 '%-.192s'의 칼럼 길이가 너무 깁니다 (최대 = %lu). 대신에 BLOB를 사용하세요." nla "Te grote kolomlengte voor '%-.192s' (max = %lu). Maak hiervoor gebruik van het type BLOB" nor "For stor nøkkellengde for kolonne '%-.192s' (maks = %lu). Bruk BLOB istedenfor" norwegian-ny "For stor nykkellengde for felt '%-.192s' (maks = %lu). Bruk BLOB istadenfor" pol "Zbyt duża długo?ć kolumny '%-.192s' (maks. = %lu). W zamian użyj typu BLOB" por "Comprimento da coluna '%-.192s' grande demais (max = %lu); use BLOB em seu lugar" rum "Lungimea coloanei '%-.192s' este prea lunga (maximum = %lu). Foloseste BLOB mai bine" rus "Слишком большая длина столбца '%-.192s' (максимум = %lu). Используйте тип BLOB или TEXT вместо текущего" serbian "Previše podataka za kolonu '%-.192s' (maksimum je %lu). Upotrebite BLOB polje" slo "Príliš veľká dĺžka pre pole '%-.192s' (maximum = %lu). Použite BLOB" spa "Longitud de columna demasiado grande para la columna '%-.192s' (máximo = %lu). Use BLOB o TEXT en su lugar" swe "För stor kolumnlängd angiven för '%-.192s' (max= %lu). Använd en BLOB instället" ukr "Задовга довжина стовбця '%-.192s' (max = %lu). Використайте тип BLOB" ER_WRONG_AUTO_KEY 42000 S1009 chi "表定义不正确;只能有一个自动列,并且必须将其定义为索引" cze "Můžete mít pouze jedno AUTO pole a to musí být definováno jako klíč" dan "Der kan kun specificeres eet AUTO_INCREMENT-felt, og det skal være indekseret" eng "Incorrect table definition; there can be only one auto column and it must be defined as a key" est "Vigane tabelikirjeldus; Tabelis tohib olla üks auto_increment tüüpi tulp ning see peab olema defineeritud võtmena" fre "Un seul champ automatique est permis et il doit être indexé" ger "Falsche Tabellendefinition. Es darf nur eine AUTO_INCREMENT-Spalte geben, und diese muss als Schlüssel definiert werden" greek "Μπορεί να υπάρχει μόνο ένα auto field και πρέπει να έχει ορισθεί σαν key" hindi "गलत टेबल परिभाषा; टेबल में केवल एक AUTO_INCREMENT कॉलम हो सकता है और इसे एक KEY के रूप में परिभाषित किया जाना चाहिए" hun "Csak egy auto mezo lehetseges, es azt kulcskent kell definialni" ita "Puo` esserci solo un campo AUTO e deve essere definito come chiave" jpn "不正な表定義です。AUTO_INCREMENT列は1個までで、索引を定義する必要があります。" kor "부정확한 테이블 정의; 테이블은 하나의 auto 칼럼이 존재하고 키로 정의되어져야 합니다." nla "Er kan slechts 1 autofield zijn en deze moet als zoeksleutel worden gedefinieerd" nor "Bare ett auto felt kan være definert som nøkkel" norwegian-ny "Bare eitt auto felt kan være definert som nøkkel" pol "W tabeli może być tylko jedno pole auto i musi ono być zdefiniowane jako klucz" por "Definição incorreta de tabela. Somente é permitido um único campo auto-incrementado e ele tem que ser definido como chave" rum "Definitia tabelei este incorecta; Nu pot fi mai mult de o singura coloana de tip auto si aceasta trebuie definita ca cheie" rus "Некорректное определение таблицы: может существовать только один автоинкрементный столбец, и он должен быть определен как ключ" serbian "Pogrešna definicija tabele; U tabeli može postojati samo jedna 'AUTO' kolona i ona mora biti istovremeno definisana kao kolona ključa" slo "Môžete mať iba jedno AUTO pole a to musí byť definované ako kľúč" spa "Definición incorrecta de tabla; sólo puede haber una columna automática y ésta debe de ser definida como una clave" swe "Det får finnas endast ett AUTO_INCREMENT-fält och detta måste vara en nyckel" ukr "Хибне визначення таблиці; Може бути лише один автоматичний стовбець, що повинен бути визначений як ключ" ER_BINLOG_CANT_DELETE_GTID_DOMAIN chi "无法删除gtid域. 原因: %s." eng "Could not delete gtid domain. Reason: %s." spa "No pude borrar el dominio gtid. Motivo: %s." ukr "Не можу видалити домен gtid. Причина: %s." ER_NORMAL_SHUTDOWN chi "%s(%s):正常关闭" cze "%s (%s): normální ukončení" dan "%s (%s): Normal nedlukning" eng "%s (initiated by: %s): Normal shutdown" est "%s (%s): MariaDB lõpetas" fre "%s (%s): Arrêt normal du serveur" ger "%s (%s): Normal heruntergefahren" greek "%s (%s): Φυσιολογική διαδικασία shutdown" hindi "%s (%s): सामान्य शटडाउन" hun "%s (%s): Normal leallitas" ita "%s (%s): Shutdown normale" jpn "%s (%s): 通常シャットダウン" kor "%s (%s): 정상적인 shutdown" nla "%s (%s): Normaal afgesloten " nor "%s (%s): Normal avslutning" norwegian-ny "%s (%s): Normal nedkopling" pol "%s (%s): Standardowe zakończenie działania" por "%s (%s): 'Shutdown' normal" rum "%s (%s): Terminare normala" rus "%s (инициирована пользователем: %s): Корректная остановка" serbian "%s (%s): Normalno gašenje" slo "%s (%s): normálne ukončenie" spa "%s (iniciado por: %s): Apagado normal" swe "%s (%s): Normal avslutning" ukr "%s (%s): Нормальне завершення" ER_GOT_SIGNAL chi "%s: 收到信号 %d. 强行中止!" cze "%s: přijat signal %d, končím!" dan "%s: Fangede signal %d. Afslutter!" eng "%s: Got signal %d. Aborting!" est "%s: sain signaali %d. Lõpetan!" fre "%s: Reçu le signal %d. Abandonne!" ger "%s: Signal %d erhalten. Abbruch!" greek "%s: Ελήφθη το μήνυμα %d. Η διαδικασία εγκαταλείπεται!" hindi "%s: सिग्नल %d मिलने के कारण सिस्टम बंद किया जा रहा है!" hun "%s: %d jelzes. Megszakitva!" ita "%s: Ricevuto segnale %d. Interruzione!" jpn "%s: シグナル %d を受信しました。強制終了します!" kor "%s: %d 신호가 들어왔음. 중지!" nla "%s: Signaal %d. Systeem breekt af!" nor "%s: Oppdaget signal %d. Avslutter!" norwegian-ny "%s: Oppdaga signal %d. Avsluttar!" pol "%s: Otrzymano sygnał %d. Kończenie działania!" por "%s: Obteve sinal %d. Abortando!" rum "%s: Semnal %d obtinut. Aborting!" rus "%s: Получен сигнал %d. Прекращаем!" serbian "%s: Dobio signal %d. Prekidam!" slo "%s: prijatý signál %d, ukončenie (Abort)!" spa "%s: Obtenida señal %d. ¡Abortando!" swe "%s: Fick signal %d. Avslutar!" ukr "%s: Отримано сигнал %d. Перериваюсь!" ER_SHUTDOWN_COMPLETE chi "%s:关闭完成" cze "%s: ukončení práce hotovo" dan "%s: Server lukket" eng "%s: Shutdown complete" est "%s: Lõpp" fre "%s: Arrêt du serveur terminé" ger "%s: Herunterfahren beendet" greek "%s: Η διαδικασία Shutdown ολοκληρώθηκε" hindi "%s: शटडाउन पूर्ण" hun "%s: A leallitas kesz" ita "%s: Shutdown completato" jpn "%s: シャットダウン完了" kor "%s: Shutdown 이 완료됨!" nla "%s: Afsluiten afgerond" nor "%s: Avslutning komplett" norwegian-ny "%s: Nedkopling komplett" pol "%s: Zakończenie działania wykonane" por "%s: 'Shutdown' completo" rum "%s: Terminare completa" rus "%s: Остановка завершена" serbian "%s: Gašenje završeno" slo "%s: práca ukončená" spa "%s: Apagado completado" swe "%s: Avslutning klar" ukr "%s: Роботу завершено" ER_FORCING_CLOSE 08S01 chi "%s: 强行关闭线程 %ld 用户: '%-.48s'" cze "%s: násilné uzavření threadu %ld uživatele '%-.48s'" dan "%s: Forceret nedlukning af tråd: %ld bruger: '%-.48s'" eng "%s: Forcing close of thread %ld user: '%-.48s'" est "%s: Sulgen jõuga lõime %ld kasutaja: '%-.48s'" fre "%s: Arrêt forcé de la tâche (thread) %ld utilisateur: '%-.48s'" ger "%s: Thread %ld zwangsweise beendet. Benutzer: '%-.48s'" greek "%s: Το thread θα κλείσει %ld user: '%-.48s'" hindi "%s: %ld थ्रेड बंद किया जा रहा है (यूज़र: '%-.48s')" hun "%s: A(z) %ld thread kenyszeritett zarasa. Felhasznalo: '%-.48s'" ita "%s: Forzata la chiusura del thread %ld utente: '%-.48s'" jpn "%s: スレッド %ld を強制終了します (ユーザー: '%-.48s')" kor "%s: thread %ld의 강제 종료 user: '%-.48s'" nla "%s: Afsluiten afgedwongen van thread %ld gebruiker: '%-.48s'" nor "%s: Påtvinget avslutning av tråd %ld bruker: '%-.48s'" norwegian-ny "%s: Påtvinga avslutning av tråd %ld brukar: '%-.48s'" pol "%s: Wymuszenie zamknięcia w?tku %ld użytkownik: '%-.48s'" por "%s: Forçando finalização da 'thread' %ld - usuário '%-.48s'" rum "%s: Terminare fortata a thread-ului %ld utilizatorului: '%-.48s'" rus "%s: Принудительно закрываем поток %ld пользователя: '%-.48s'" serbian "%s: Usiljeno gašenje thread-a %ld koji pripada korisniku: '%-.48s'" slo "%s: násilné ukončenie vlákna %ld užívateľa '%-.48s'" spa "%s: Forzando a cerrar el hilo (thread) %ld usuario: '%-.48s'" swe "%s: Stänger av tråd %ld; användare: '%-.48s'" ukr "%s: Прискорюю закриття гілки %ld користувача: '%-.48s'" ER_IPSOCK_ERROR 08S01 chi "无法创建IP插口" cze "Nemohu vytvořit IP socket" dan "Kan ikke oprette IP socket" eng "Can't create IP socket" est "Ei suuda luua IP socketit" fre "Ne peut créer la connexion IP (socket)" ger "Kann IP-Socket nicht erzeugen" greek "Δεν είναι δυνατή η δημιουργία IP socket" hindi "IP SOCKET नहीं बना सकते" hun "Az IP socket nem hozhato letre" ita "Impossibile creare il socket IP" jpn "IPソケットを作成できません。" kor "IP 소켓을 만들지 못했습니다." nla "Kan IP-socket niet openen" nor "Kan ikke opprette IP socket" norwegian-ny "Kan ikkje opprette IP socket" pol "Nie można stworzyć socket'u IP" por "Não pode criar o soquete IP" rum "Nu pot crea IP socket" rus "Невозможно создать IP-сокет" serbian "Ne mogu da kreiram IP socket" slo "Nemôžem vytvoriť IP socket" spa "No puedo crear IP socket" swe "Kan inte skapa IP-socket" ukr "Не можу створити IP роз'єм" ER_NO_SUCH_INDEX 42S12 S1009 chi "表 '%-.192s' 没有像 CREATE INDEX 中使用的索引;重新创建表" cze "Tabulka '%-.192s' nemá index odpovídající CREATE INDEX. Vytvořte tabulku znovu" dan "Tabellen '%-.192s' har ikke den nøgle, som blev brugt i CREATE INDEX. Genopret tabellen" eng "Table '%-.192s' has no index like the one used in CREATE INDEX; recreate the table" est "Tabelil '%-.192s' puuduvad võtmed. Loo tabel uuesti" fre "La table '%-.192s' n'a pas d'index comme celle utilisée dans CREATE INDEX. Recréez la table" ger "Tabelle '%-.192s' besitzt keinen wie den in CREATE INDEX verwendeten Index. Tabelle neu anlegen" greek "Ο πίνακας '%-.192s' δεν έχει ευρετήριο (index) σαν αυτό που χρησιμοποιείτε στην CREATE INDEX. Παρακαλώ, ξαναδημιουργήστε τον πίνακα" hindi "CREATE INDEX में इस्तेमाल की गयी सूचि टेबल '%-.192s' में उपलब्ध नहीं है; टेबल को पुनः बनायें" hun "A(z) '%-.192s' tablahoz nincs meg a CREATE INDEX altal hasznalt index. Alakitsa at a tablat" ita "La tabella '%-.192s' non ha nessun indice come quello specificatato dalla CREATE INDEX. Ricrea la tabella" jpn "表 '%-.192s' に以前CREATE INDEXで作成された索引がありません。表を作り直してください。" kor "테이블 '%-.192s'는 인덱스를 만들지 않았습니다. alter 테이블명령을 이용하여 테이블을 수정하세요..." nla "Tabel '%-.192s' heeft geen INDEX zoals deze gemaakt worden met CREATE INDEX. Maak de tabel opnieuw" nor "Tabellen '%-.192s' har ingen index som den som er brukt i CREATE INDEX. Gjenopprett tabellen" norwegian-ny "Tabellen '%-.192s' har ingen index som den som er brukt i CREATE INDEX. Oprett tabellen på nytt" pol "Tabela '%-.192s' nie ma indeksu takiego jak w CREATE INDEX. Stwórz tabelę" por "Tabela '%-.192s' não possui um índice como o usado em CREATE INDEX. Recrie a tabela" rum "Tabela '%-.192s' nu are un index ca acela folosit in CREATE INDEX. Re-creeaza tabela" rus "В таблице '%-.192s' нет такого индекса, как в CREATE INDEX. Создайте таблицу заново" serbian "Tabela '%-.192s' nema isti indeks kao onaj upotrebljen pri komandi 'CREATE INDEX'. Napravite tabelu ponovo" slo "Tabuľka '%-.192s' nemá index zodpovedajúci CREATE INDEX. Vytvorte tabulku znova" spa "La tabla '%-.192s' no tiene un índice como el usado en CREATE INDEX. Crea de nuevo la tabla" swe "Tabellen '%-.192s' har inget index som motsvarar det angivna i CREATE INDEX. Skapa om tabellen" ukr "Таблиця '%-.192s' має індекс, що не співпадає з вказанним у CREATE INDEX. Створіть таблицю знову" ER_WRONG_FIELD_TERMINATORS 42000 S1009 chi "字段分隔符参数不合预期;查看文档" cze "Argument separátoru položek nebyl očekáván. Přečtěte si manuál" dan "Felt adskiller er ikke som forventet, se dokumentationen" eng "Field separator argument is not what is expected; check the manual" est "Väljade eraldaja erineb oodatust. Tutvu kasutajajuhendiga" fre "Séparateur de champs inconnu. Vérifiez dans le manuel" ger "Feldbegrenzer-Argument ist nicht in der erwarteten Form. Bitte im Handbuch nachlesen" greek "Ο διαχωριστής πεδίων δεν είναι αυτός που αναμενόταν. Παρακαλώ ανατρέξτε στο manual" hindi "फील्ड विभाजक आर्गुमेंट गलत है; मैनुअल की जाँच करें" hun "A mezoelvalaszto argumentumok nem egyeznek meg a varttal. Nezze meg a kezikonyvben!" ita "L'argomento 'Field separator' non e` quello atteso. Controlla il manuale" jpn "フィールド区切り文字が予期せぬ使われ方をしています。マニュアルを確認して下さい。" kor "필드 구분자 인수들이 완전하지 않습니다. 메뉴얼을 찾아 보세요." nla "De argumenten om velden te scheiden zijn anders dan verwacht. Raadpleeg de handleiding" nor "Felt skiller argumentene er ikke som forventet, se dokumentasjonen" norwegian-ny "Felt skiljer argumenta er ikkje som venta, sjå dokumentasjonen" pol "Nie oczekiwano separatora. SprawdĽ podręcznik" por "Argumento separador de campos não é o esperado. Cheque o manual" rum "Argumentul pentru separatorul de cimpuri este diferit de ce ma asteptam. Verifica manualul" rus "Аргумент разделителя полей - не тот, который ожидался. Обращайтесь к документации" serbian "Argument separatora polja nije ono što se očekivalo. Proverite uputstvo MariaDB server-a" slo "Argument oddeľovač polí nezodpovedá požiadavkám. Skontrolujte v manuáli" spa "Los separadores de argumentos del campo no son los especificados. Compruebe el manual" swe "Fältseparatorerna är vad som förväntades. Kontrollera mot manualen" ukr "Хибний розділювач полів. Почитайте документацію" ER_BLOBS_AND_NO_TERMINATED 42000 S1009 chi "您不能对 BLOB 使用固定的行长度;请使用 'fields terminated by'" cze "Není možné použít pevný rowlength s BLOBem. Použijte 'fields terminated by'" dan "Man kan ikke bruge faste feltlængder med BLOB. Brug i stedet 'fields terminated by'" eng "You can't use fixed rowlength with BLOBs; please use 'fields terminated by'" est "BLOB-tüüpi väljade olemasolul ei saa kasutada fikseeritud väljapikkust. Vajalik 'fields terminated by' määrang" fre "Vous ne pouvez utiliser des lignes de longueur fixe avec des BLOBs. Utiliser 'fields terminated by'" ger "Eine feste Zeilenlänge kann für BLOB-Felder nicht verwendet werden. Bitte 'fields terminated by' verwenden" greek "Δεν μπορείτε να χρησιμοποιήσετε fixed rowlength σε BLOBs. Παρακαλώ χρησιμοποιείστε 'fields terminated by'" hindi "BLOBs को निश्चित लंबाई की पंक्ति के साथ प्रयोग नहीं किया जा सकता है; 'FIELDS TERMINATED BY' का इस्तेमाल करें" hun "Fix hosszusagu BLOB-ok nem hasznalhatok. Hasznalja a 'mezoelvalaszto jelet' " ita "Non possono essere usate righe a lunghezza fissa con i BLOB. Usa 'FIELDS TERMINATED BY'" jpn "BLOBには固定長レコードが使用できません。'FIELDS TERMINATED BY'句を使用して下さい。" kor "BLOB로는 고정길이의 lowlength를 사용할 수 없습니다. 'fields terminated by'를 사용하세요." nla "Bij het gebruik van BLOBs is het niet mogelijk om vaste rijlengte te gebruiken. Maak s.v.p. gebruik van 'fields terminated by'" nor "En kan ikke bruke faste feltlengder med BLOB. Vennlisgt bruk 'fields terminated by'" norwegian-ny "Ein kan ikkje bruke faste feltlengder med BLOB. Vennlisgt bruk 'fields terminated by'" pol "Nie można użyć stałej długo?ci wiersza z polami typu BLOB. Użyj 'fields terminated by'" por "Você não pode usar comprimento de linha fixo com BLOBs. Por favor, use campos com comprimento limitado" rum "Nu poti folosi lungime de cimp fix pentru BLOB-uri. Foloseste 'fields terminated by'" rus "Фиксированный размер записи с полями типа BLOB использовать нельзя, применяйте 'fields terminated by'" serbian "Ne možete koristiti fiksnu veličinu sloga kada imate BLOB polja. Molim koristite 'fields terminated by' opciju" slo "Nie je možné použiť fixnú dĺžku s BLOBom. Použite 'fields terminated by'" spa "No se pueden usar longitudes fijas de filas con BLOBs. Por favor, use 'campos terminados por'" swe "Man kan inte använda fast radlängd med blobs. Använd 'fields terminated by'" ukr "Не можна використовувати сталу довжину строки з BLOB. Зкористайтеся 'fields terminated by'" ER_TEXTFILE_NOT_READABLE chi "文件'%-.128s'必须位于数据库目录中,或所有人都可以读取" cze "Soubor '%-.128s' musí být v adresáři databáze nebo čitelný pro všechny" dan "Filen '%-.128s' skal være i database-folderen, eller kunne læses af alle" eng "The file '%-.128s' must be in the database directory or be readable by all" est "Fail '%-.128s' peab asuma andmebaasi kataloogis või olema kõigile loetav" fre "Le fichier '%-.128s' doit être dans le répertoire de la base et lisible par tous" ger "Datei '%-.128s' muss im Datenbank-Verzeichnis vorhanden oder lesbar für alle sein" greek "Το αρχείο '%-.128s' πρέπει να υπάρχει στο database directory ή να μπορεί να διαβαστεί από όλους" hindi "फ़ाइल '%-.128s' डेटाबेस डायरेक्टरी में या सभी के द्वारा पठनीय होना चाहिए" hun "A(z) '%-.128s'-nak az adatbazis konyvtarban kell lennie, vagy mindenki szamara olvashatonak" ita "Il file '%-.128s' deve essere nella directory del database e deve essere leggibile da tutti" jpn "ファイル '%-.128s' はデータベースディレクトリにあるか、全てのユーザーから読める必要があります。" kor "'%-.128s' 화일는 데이타베이스 디렉토리에 존재하거나 모두에게 읽기 가능하여야 합니다." nla "Het bestand '%-.128s' dient in de database directory voor the komen of leesbaar voor iedereen te zijn" nor "Filen '%-.128s' må være i database-katalogen for å være lesbar for alle" norwegian-ny "Filen '%-.128s' må være i database-katalogen for å være lesbar for alle" pol "Plik '%-.128s' musi znajdować sie w katalogu bazy danych lub mieć prawa czytania przez wszystkich" por "Arquivo '%-.128s' tem que estar no diretório do banco de dados ou ter leitura possível para todos" rum "Fisierul '%-.128s' trebuie sa fie in directorul bazei de data sau trebuie sa poata sa fie citit de catre toata lumea (verifica permisiile)" rus "Файл '%-.128s' должен находиться в том же каталоге, что и база данных, или быть общедоступным для чтения" serbian "File '%-.128s' mora biti u direktorijumu gde su file-ovi baze i mora imati odgovarajuća prava pristupa" slo "Súbor '%-.128s' musí byť v adresári databázy, alebo čitateľný pre všetkých" spa "El fichero/archivo '%-.128s' debe de estar en el directorio de la base de datos o debe de ser legible por todos" swe "Textfilen '%-.128s' måste finnas i databasbiblioteket eller vara läsbar för alla" ukr "Файл '%-.128s' повинен бути у теці бази данних або мати встановлене право на читання для усіх" ER_FILE_EXISTS_ERROR chi "文件'%-.200s'已经存在" cze "Soubor '%-.200s' již existuje" dan "Filen '%-.200s' eksisterer allerede" eng "File '%-.200s' already exists" est "Fail '%-.200s' juba eksisteerib" fre "Le fichier '%-.200s' existe déjà" ger "Datei '%-.200s' bereits vorhanden" greek "Το αρχείο '%-.200s' υπάρχει ήδη" hindi "फ़ाइल '%-.200s' पहले से मौजूद है" hun "A '%-.200s' file mar letezik" ita "Il file '%-.200s' esiste gia`" jpn "ファイル '%-.200s' はすでに存在します。" kor "'%-.200s' 화일은 이미 존재합니다." nla "Het bestand '%-.200s' bestaat reeds" nor "Filen '%-.200s' eksisterte allerede" norwegian-ny "Filen '%-.200s' eksisterte allereide" pol "Plik '%-.200s' już istnieje" por "Arquivo '%-.200s' já existe" rum "Fisierul '%-.200s' exista deja" rus "Файл '%-.200s' уже существует" serbian "File '%-.200s' već postoji" slo "Súbor '%-.200s' už existuje" spa "El fichero/archivo '%-.200s' ya existe" swe "Filen '%-.200s' existerar redan" ukr "Файл '%-.200s' вже існує" ER_LOAD_INFO chi "记录:%ld删除:%ld跳过:%ld警告:%ld" cze "Záznamů: %ld Vymazáno: %ld Přeskočeno: %ld Varování: %ld" dan "Poster: %ld Fjernet: %ld Sprunget over: %ld Advarsler: %ld" eng "Records: %ld Deleted: %ld Skipped: %ld Warnings: %ld" est "Kirjeid: %ld Kustutatud: %ld Vahele jäetud: %ld Hoiatusi: %ld" fre "Enregistrements: %ld Effacés: %ld Non traités: %ld Avertissements: %ld" ger "Datensätze: %ld Gelöscht: %ld Ausgelassen: %ld Warnungen: %ld" greek "Εγγραφές: %ld Διαγραφές: %ld Παρεκάμφθησαν: %ld Προειδοποιήσεις: %ld" hindi "रिकॉर्ड: %ld हटाए गए: %ld छोड़ दिए गए: %ld चेतावनी: %ld" hun "Rekordok: %ld Torolve: %ld Skipped: %ld Warnings: %ld" ita "Records: %ld Cancellati: %ld Saltati: %ld Avvertimenti: %ld" jpn "レコード数: %ld 削除: %ld スキップ: %ld 警告: %ld" kor "레코드: %ld개 삭제: %ld개 스킵: %ld개 경고: %ld개" nla "Records: %ld Verwijderd: %ld Overgeslagen: %ld Waarschuwingen: %ld" nor "Poster: %ld Fjernet: %ld Hoppet over: %ld Advarsler: %ld" norwegian-ny "Poster: %ld Fjerna: %ld Hoppa over: %ld Åtvaringar: %ld" pol "Recordów: %ld Usuniętych: %ld Pominiętych: %ld Ostrzeżeń: %ld" por "Registros: %ld - Deletados: %ld - Ignorados: %ld - Avisos: %ld" rum "Recorduri: %ld Sterse: %ld Sarite (skipped): %ld Atentionari (warnings): %ld" rus "Записей: %ld Удалено: %ld Пропущено: %ld Предупреждений: %ld" serbian "Slogova: %ld Izbrisano: %ld Preskočeno: %ld Upozorenja: %ld" slo "Záznamov: %ld Zmazaných: %ld Preskočených: %ld Varovania: %ld" spa "Registros: %ld Borrados: %ld Saltados: %ld Avisos: %ld" swe "Rader: %ld Bortagna: %ld Dubletter: %ld Varningar: %ld" ukr "Записів: %ld Видалено: %ld Пропущено: %ld Застережень: %ld" ER_ALTER_INFO chi "记录: %ld 重复: %ld" cze "Záznamů: %ld Zdvojených: %ld" dan "Poster: %ld Ens: %ld" eng "Records: %ld Duplicates: %ld" est "Kirjeid: %ld Kattuvaid: %ld" fre "Enregistrements: %ld Doublons: %ld" ger "Datensätze: %ld Duplikate: %ld" greek "Εγγραφές: %ld Επαναλήψεις: %ld" hindi "रिकॉर्ड: %ld डुप्लिकेट: %ld" hun "Rekordok: %ld Duplikalva: %ld" ita "Records: %ld Duplicati: %ld" jpn "レコード数: %ld 重複: %ld" kor "레코드: %ld개 중복: %ld개" nla "Records: %ld Dubbel: %ld" nor "Poster: %ld Like: %ld" norwegian-ny "Poster: %ld Like: %ld" pol "Rekordów: %ld Duplikatów: %ld" por "Registros: %ld - Duplicados: %ld" rum "Recorduri: %ld Duplicate: %ld" rus "Записей: %ld Дубликатов: %ld" serbian "Slogova: %ld Duplikata: %ld" slo "Záznamov: %ld Opakovaných: %ld" spa "Registros: %ld Duplicados: %ld" swe "Rader: %ld Dubletter: %ld" ukr "Записів: %ld Дублікатів: %ld" ER_WRONG_SUB_KEY chi "前缀索引不正确;使用的索引部分不是字符串,使用的长度比索引部分长,或者存储引擎不支持独特前缀索引" cze "Chybná podčást klíče -- není to řetězec nebo je delší než délka části klíče" dan "Forkert indeksdel. Den anvendte nøgledel er ikke en streng eller længden er større end nøglelængden" eng "Incorrect prefix key; the used key part isn't a string, the used length is longer than the key part, or the storage engine doesn't support unique prefix keys" est "Vigane võtme osa. Kasutatud võtmeosa ei ole string tüüpi, määratud pikkus on pikem kui võtmeosa või tabelihandler ei toeta seda tüüpi võtmeid" fre "Mauvaise sous-clef. Ce n'est pas un 'string' ou la longueur dépasse celle définie dans la clef" ger "Falscher Unterteilschlüssel. Der verwendete Schlüsselteil ist entweder kein String, die verwendete Länge ist länger als der Teilschlüssel oder die Speicher-Engine unterstützt keine Unterteilschlüssel" greek "Εσφαλμένο sub part key. Το χρησιμοποιούμενο key part δεν είναι string ή το μήκος του είναι μεγαλύτερο" hun "Rossz alkulcs. A hasznalt kulcsresz nem karaktersorozat vagy hosszabb, mint a kulcsresz" ita "Sotto-parte della chiave errata. La parte di chiave utilizzata non e` una stringa o la lunghezza e` maggiore della parte di chiave" jpn "キーのプレフィックスが不正です。キーが文字列ではないか、プレフィックス長がキーよりも長いか、ストレージエンジンが一意索引のプレフィックス指定をサポートしていません。" kor "부정확한 서버 파트 키. 사용된 키 파트가 스트링이 아니거나 키 파트의 길이가 너무 깁니다." nla "Foutief sub-gedeelte van de zoeksleutel. De gebruikte zoeksleutel is geen onderdeel van een string of of de gebruikte lengte is langer dan de zoeksleutel" nor "Feil delnøkkel. Den brukte delnøkkelen er ikke en streng eller den oppgitte lengde er lengre enn nøkkel lengden" norwegian-ny "Feil delnykkel. Den brukte delnykkelen er ikkje ein streng eller den oppgitte lengda er lengre enn nykkellengden" pol "Błędna podczę?ć klucza. Użyta czę?ć klucza nie jest łańcuchem lub użyta długo?ć jest większa niż czę?ć klucza" por "Sub parte da chave incorreta. A parte da chave usada não é uma 'string' ou o comprimento usado é maior que parte da chave ou o manipulador de tabelas não suporta sub chaves únicas" rum "Componentul cheii este incorrect. Componentul folosit al cheii nu este un sir sau lungimea folosita este mai lunga decit lungimea cheii" rus "Некорректная часть ключа. Используемая часть ключа не является строкой, указанная длина больше, чем длина части ключа, или обработчик таблицы не поддерживает уникальные части ключа" serbian "Pogrešan pod-ključ dela ključa. Upotrebljeni deo ključa nije string, upotrebljena dužina je veća od dela ključa ili handler tabela ne podržava jedinstvene pod-ključeve" slo "Incorrect prefix key; the used key part isn't a string or the used length is longer than the key part" spa "Prefijo incorrecto de clave; la parte utilizada de la clave no es una cadena, la longitud usada es mayor que la parte de la clave o el motor de almacenaje no soporta claves con prefijo único" swe "Felaktig delnyckel. Nyckeldelen är inte en sträng eller den angivna längden är längre än kolumnlängden" ukr "Невірна частина ключа. Використана частина ключа не є строкою, задовга або вказівник таблиці не підтримує унікальних частин ключей" ER_CANT_REMOVE_ALL_FIELDS 42000 chi "您不能使用 ALTER TABLE 删除所有列;改用 DROP TABLE" cze "Není možné vymazat všechny položky s ALTER TABLE. Použijte DROP TABLE" dan "Man kan ikke slette alle felter med ALTER TABLE. Brug DROP TABLE i stedet" eng "You can't delete all columns with ALTER TABLE; use DROP TABLE instead" est "ALTER TABLE kasutades ei saa kustutada kõiki tulpasid. Kustuta tabel DROP TABLE abil" fre "Vous ne pouvez effacer tous les champs avec ALTER TABLE. Utilisez DROP TABLE" ger "Mit ALTER TABLE können nicht alle Felder auf einmal gelöscht werden. Dafür DROP TABLE verwenden" greek "Δεν είναι δυνατή η διαγραφή όλων των πεδίων με ALTER TABLE. Παρακαλώ χρησιμοποιείστε DROP TABLE" hindi "ALTER TABLE का इस्तेमाल कर सभी कॉलम्स को हटाया नहीं जा सकता; DROP TABLE का इस्तेमाल करें" hun "Az osszes mezo nem torolheto az ALTER TABLE-lel. Hasznalja a DROP TABLE-t helyette" ita "Non si possono cancellare tutti i campi con una ALTER TABLE. Utilizzare DROP TABLE" jpn "ALTER TABLE では全ての列の削除はできません。DROP TABLE を使用してください。" kor "ALTER TABLE 명령으로는 모든 칼럼을 지울 수 없습니다. DROP TABLE 명령을 이용하세요." nla "Het is niet mogelijk alle velden te verwijderen met ALTER TABLE. Gebruik a.u.b. DROP TABLE hiervoor!" nor "En kan ikke slette alle felt med ALTER TABLE. Bruk DROP TABLE isteden" norwegian-ny "Ein kan ikkje slette alle felt med ALTER TABLE. Bruk DROP TABLE istadenfor" pol "Nie można usun?ć wszystkich pól wykorzystuj?c ALTER TABLE. W zamian użyj DROP TABLE" por "Você não pode deletar todas as colunas com ALTER TABLE; use DROP TABLE em seu lugar" rum "Nu poti sterge toate coloanele cu ALTER TABLE. Foloseste DROP TABLE in schimb" rus "Нельзя удалить все столбцы с помощью ALTER TABLE. Используйте DROP TABLE" serbian "Ne možete da izbrišete sve kolone pomoću komande 'ALTER TABLE'. Upotrebite komandu 'DROP TABLE' ako želite to da uradite" slo "One nemôžem zmazať all fields with ALTER TABLE; use DROP TABLE instead" spa "No se pueden borrar todas las columnas con ALTER TABLE. Use DROP TABLE para hacerlo" swe "Man kan inte radera alla fält med ALTER TABLE. Använd DROP TABLE istället" ukr "Не можливо видалити всі стовбці за допомогою ALTER TABLE. Для цього скористайтеся DROP TABLE" ER_CANT_DROP_FIELD_OR_KEY 42000 chi "不能 DROP %s %`-.192s; 检查它是否存在" cze "Nemohu zrušit (DROP %s) %`-.192s. Zkontrolujte, zda neexistují záznamy/klíče" dan "Kan ikke udføre DROP %s %`-.192s. Undersøg om feltet/nøglen eksisterer" eng "Can't DROP %s %`-.192s; check that it exists" est "Ei suuda kustutada (DROP %s) %`-.192s. Kontrolli kas tulp/võti eksisteerib" fre "Ne peut effacer (DROP %s) %`-.192s. Vérifiez s'il existe" ger "DROP %s: Kann %`-.192s nicht löschen. Existiert es?" greek "Αδύνατη η διαγραφή (DROP %s) %`-.192s. Παρακαλώ ελέγξτε αν το πεδίο/κλειδί υπάρχει" hindi "%s %`-.192s को ड्रॉप नहीं कर सकते हैं; कृपया जाँच करें कि यह मौजूद है" hun "A DROP %s %`-.192s nem lehetseges. Ellenorizze, hogy a mezo/kulcs letezik-e" ita "Impossibile cancellare (DROP %s) %`-.192s. Controllare che il campo chiave esista" nla "DROP %s: Kan %`-.192s niet weggooien. Controleer of het veld of de zoeksleutel daadwerkelijk bestaat" nor "Kan ikke DROP %s %`-.192s. Undersøk om felt/nøkkel eksisterer" norwegian-ny "Kan ikkje DROP %s %`-.192s. Undersøk om felt/nøkkel eksisterar" pol "Nie można wykonać operacji DROP %s %`-.192s. SprawdĽ, czy to pole/klucz istnieje" por "Não se pode fazer DROP %s %`-.192s. Confira se esta coluna/chave existe" rum "Nu pot sa DROP %s %`-.192s. Verifica daca coloana/cheia exista" rus "Невозможно удалить (DROP %s) %`-.192s. Убедитесь что он действительно существует" serbian "Ne mogu da izvršim komandu drop 'DROP %s' na %`-.192s. Proverite da li ta kolona (odnosno ključ) postoji" slo "Nemôžem zrušiť (DROP %s) %`-.192s. Skontrolujte, či neexistujú záznamy/kľúče" spa "No puedo eliminar %s %`-.192s; compruebe que ya existe" swe "Kan inte ta bort (DROP %s) %`-.192s. Kontrollera att begränsningen/fältet/nyckel finns" ukr "Не можу DROP %s %`-.192s. Перевірте, чи він існує" ER_INSERT_INFO chi "记录: %ld 重复: %ld 警告: %ld" cze "Záznamů: %ld Zdvojených: %ld Varování: %ld" dan "Poster: %ld Ens: %ld Advarsler: %ld" eng "Records: %ld Duplicates: %ld Warnings: %ld" est "Kirjeid: %ld Kattuvaid: %ld Hoiatusi: %ld" fre "Enregistrements: %ld Doublons: %ld Avertissements: %ld" ger "Datensätze: %ld Duplikate: %ld Warnungen: %ld" greek "Εγγραφές: %ld Επαναλήψεις: %ld Προειδοποιήσεις: %ld" hindi "रिकॉर्ड: %ld डुप्लिकेट: %ld चेतावनी: %ld" hun "Rekordok: %ld Duplikalva: %ld Warnings: %ld" ita "Records: %ld Duplicati: %ld Avvertimenti: %ld" jpn "レコード数: %ld 重複数: %ld 警告: %ld" kor "레코드: %ld개 중복: %ld개 경고: %ld개" nla "Records: %ld Dubbel: %ld Waarschuwing: %ld" nor "Poster: %ld Like: %ld Advarsler: %ld" norwegian-ny "Postar: %ld Like: %ld Åtvaringar: %ld" pol "Rekordów: %ld Duplikatów: %ld Ostrzeżeń: %ld" por "Registros: %ld - Duplicados: %ld - Avisos: %ld" rum "Recorduri: %ld Duplicate: %ld Atentionari (warnings): %ld" rus "Записей: %ld Дубликатов: %ld Предупреждений: %ld" serbian "Slogova: %ld Duplikata: %ld Upozorenja: %ld" slo "Záznamov: %ld Opakovaných: %ld Varovania: %ld" spa "Registros: %ld Duplicados: %ld Avisos: %ld" swe "Rader: %ld Dubletter: %ld Varningar: %ld" ukr "Записів: %ld Дублікатів: %ld Застережень: %ld" ER_UPDATE_TABLE_USED chi "表 '%-.192s' 被指定了两次, 即作为 '%s' 的目标,又作为数据的独立源" eng "Table '%-.192s' is specified twice, both as a target for '%s' and as a separate source for data" swe "Table '%-.192s' är använd två gånger. Både för '%s' och för att hämta data" ukr "Таблиця '%-.192s' вказується двічі, як цільова для '%s', так і як окреме джерело даних" ER_NO_SUCH_THREAD chi "未知线程ID:%lu" cze "Neznámá identifikace threadu: %lu" dan "Ukendt tråd id: %lu" eng "Unknown thread id: %lu" est "Tundmatu lõim: %lu" fre "Numéro de tâche inconnu: %lu" ger "Unbekannte Thread-ID: %lu" greek "Αγνωστο thread id: %lu" hindi "अज्ञात थ्रेड ID: %lu" hun "Ervenytelen szal (thread) id: %lu" ita "Thread id: %lu sconosciuto" jpn "不明なスレッドIDです: %lu" kor "알수 없는 쓰레드 id: %lu" nla "Onbekend thread id: %lu" nor "Ukjent tråd id: %lu" norwegian-ny "Ukjent tråd id: %lu" pol "Nieznany identyfikator w?tku: %lu" por "'Id' de 'thread' %lu desconhecido" rum "Id-ul: %lu thread-ului este necunoscut" rus "Неизвестный номер потока: %lu" serbian "Nepoznat thread identifikator: %lu" slo "Neznáma identifikácia vlákna: %lu" spa "Identificador del hilo (thread): %lu desconocido" swe "Finns ingen tråd med id %lu" ukr "Невідомий ідентифікатор гілки: %lu" ER_KILL_DENIED_ERROR chi "你不是线程%lld的所有者" cze "Nejste vlastníkem threadu %lld" dan "Du er ikke ejer af tråden %lld" eng "You are not owner of thread %lld" est "Ei ole lõime %lld omanik" fre "Vous n'êtes pas propriétaire de la tâche no: %lld" ger "Sie sind nicht Eigentümer von Thread %lld" greek "Δεν είσθε owner του thread %lld" hindi "आप थ्रेड %lld के OWNER नहीं हैं" hun "A %lld thread-nek mas a tulajdonosa" ita "Utente non proprietario del thread %lld" jpn "スレッド %lld のオーナーではありません。" kor "쓰레드(Thread) %lld의 소유자가 아닙니다." nla "U bent geen bezitter van thread %lld" nor "Du er ikke eier av tråden %lld" norwegian-ny "Du er ikkje eigar av tråd %lld" pol "Nie jeste? wła?cicielem w?tku %lld" por "Você não é proprietário da 'thread' %lld" rum "Nu sinteti proprietarul threadului %lld" rus "Вы не являетесь владельцем потока %lld" serbian "Vi niste vlasnik thread-a %lld" slo "Nie ste vlastníkom vlákna %lld" spa "No eres el propietario del hilo (thread) %lld" swe "Du är inte ägare till tråd %lld" ukr "Ви не володар гілки %lld" ER_NO_TABLES_USED chi "没有使用表" cze "Nejsou použity žádné tabulky" dan "Ingen tabeller i brug" eng "No tables used" est "Ühtegi tabelit pole kasutusel" fre "Aucune table utilisée" ger "Keine Tabellen verwendet" greek "Δεν χρησιμοποιήθηκαν πίνακες" hindi "कोई टेबल का इस्तेमाल नहीं हुआ" hun "Nincs hasznalt tabla" ita "Nessuna tabella usata" jpn "表が指定されていません。" kor "어떤 테이블도 사용되지 않았습니다." nla "Geen tabellen gebruikt" nor "Ingen tabeller i bruk" norwegian-ny "Ingen tabellar i bruk" pol "Nie ma żadej użytej tabeli" por "Nenhuma tabela usada" rum "Nici o tabela folosita" rus "Никакие таблицы не использованы" serbian "Nema upotrebljenih tabela" slo "Nie je použitá žiadna tabuľka" spa "No se están usando tablas" swe "Inga tabeller angivna" ukr "Не використано таблиць" ER_TOO_BIG_SET chi "列 %-.192s 和SET的字符串过多" cze "Příliš mnoho řetězců pro sloupec %-.192s a SET" dan "For mange tekststrenge til specifikationen af SET i kolonne %-.192s" eng "Too many strings for column %-.192s and SET" est "Liiga palju string tulbale %-.192s tüübile SET" fre "Trop de chaînes dans la colonne %-.192s avec SET" ger "Zu viele Strings für Feld %-.192s und SET angegeben" greek "Πάρα πολλά strings για το πεδίο %-.192s και SET" hun "Tul sok karakter: %-.192s es SET" ita "Troppe stringhe per la colonna %-.192s e la SET" jpn "SET型の列 '%-.192s' のメンバーの数が多すぎます。" kor "칼럼 %-.192s와 SET에서 스트링이 너무 많습니다." nla "Teveel strings voor kolom %-.192s en SET" nor "For mange tekststrenger kolonne %-.192s og SET" norwegian-ny "For mange tekststrengar felt %-.192s og SET" pol "Zbyt wiele łańcuchów dla kolumny %-.192s i polecenia SET" por "'Strings' demais para coluna '%-.192s' e SET" rum "Prea multe siruri pentru coloana %-.192s si SET" rus "Слишком много значений для столбца %-.192s в SET" serbian "Previše string-ova za kolonu '%-.192s' i komandu 'SET'" slo "Príliš mnoho reťazcov pre pole %-.192s a SET" spa "Demasiadas cadenas para la columna %-.192s y SET" swe "För många alternativ till kolumn %-.192s för SET" ukr "Забагато строк для стовбця %-.192s та SET" ER_NO_UNIQUE_LOGFILE chi "无法生成唯一的log-filename%-.200s.(1-999)" cze "Nemohu vytvořit jednoznačné jméno logovacího souboru %-.200s.(1-999)" dan "Kan ikke lave unikt log-filnavn %-.200s.(1-999)" eng "Can't generate a unique log-filename %-.200s.(1-999)" est "Ei suuda luua unikaalset logifaili nime %-.200s.(1-999)" fre "Ne peut générer un unique nom de journal %-.200s.(1-999)" ger "Kann keinen eindeutigen Dateinamen für die Logdatei %-.200s(1-999) erzeugen" greek "Αδύνατη η δημιουργία unique log-filename %-.200s.(1-999)" hindi "एक अनूठा लॉग-फ़ाइल नाम %-.200s.(1-999) उत्पन्न नहीं कर सके" hun "Egyedi log-filenev nem generalhato: %-.200s.(1-999)" ita "Impossibile generare un nome del file log unico %-.200s.(1-999)" jpn "一意なログファイル名 %-.200s.(1-999) を生成できません。" kor "Unique 로그화일 '%-.200s'를 만들수 없습니다.(1-999)" nla "Het is niet mogelijk een unieke naam te maken voor de logfile %-.200s.(1-999)" nor "Kan ikke lage unikt loggfilnavn %-.200s.(1-999)" norwegian-ny "Kan ikkje lage unikt loggfilnavn %-.200s.(1-999)" pol "Nie można stworzyć unikalnej nazwy pliku z logiem %-.200s.(1-999)" por "Não pode gerar um nome de arquivo de 'log' único '%-.200s'.(1-999)" rum "Nu pot sa generez un nume de log unic %-.200s.(1-999)" rus "Невозможно создать уникальное имя файла журнала %-.200s.(1-999)" serbian "Ne mogu da generišem jedinstveno ime log-file-a: '%-.200s.(1-999)'" slo "Nemôžem vytvoriť unikátne meno log-súboru %-.200s.(1-999)" spa "No puedo generar un único fichero/archivo de historial (log) llamado %-.200s.(1-999)" swe "Kan inte generera ett unikt filnamn %-.200s.(1-999)" ukr "Не можу згенерувати унікальне ім'я log-файлу %-.200s.(1-999)" ER_TABLE_NOT_LOCKED_FOR_WRITE chi "表 '%-.192s' 有 READ 锁,无法更新" cze "Tabulka '%-.192s' byla zamčena s READ a nemůže být změněna" dan "Tabellen '%-.192s' var låst med READ lås og kan ikke opdateres" eng "Table '%-.192s' was locked with a READ lock and can't be updated" est "Tabel '%-.192s' on lukustatud READ lukuga ning ei ole muudetav" fre "Table '%-.192s' verrouillée lecture (READ): modification impossible" ger "Tabelle '%-.192s' ist mit Lesesperre versehen und kann nicht aktualisiert werden" greek "Ο πίνακας '%-.192s' έχει κλειδωθεί με READ lock και δεν επιτρέπονται αλλαγές" hindi "टेबल '%-.192s' READ लॉक से बंद है और उसे बदल नहीं सकते" hun "A(z) '%-.192s' tabla zarolva lett (READ lock) es nem lehet frissiteni" ita "La tabella '%-.192s' e` soggetta a lock in lettura e non puo` essere aggiornata" jpn "表 '%-.192s' はREADロックされていて、更新できません。" kor "테이블 '%-.192s'는 READ 락이 잠겨있어서 갱신할 수 없습니다." nla "Tabel '%-.192s' was gelocked met een lock om te lezen. Derhalve kunnen geen wijzigingen worden opgeslagen" nor "Tabellen '%-.192s' var låst med READ lås og kan ikke oppdateres" norwegian-ny "Tabellen '%-.192s' var låst med READ lås og kan ikkje oppdaterast" pol "Tabela '%-.192s' została zablokowana przez READ i nie może zostać zaktualizowana" por "Tabela '%-.192s' foi travada com trava de leitura e não pode ser atualizada" rum "Tabela '%-.192s' a fost locked cu un READ lock si nu poate fi actualizata" rus "Таблица '%-.192s' заблокирована уровнем READ lock и не может быть изменена" serbian "Tabela '%-.192s' je zaključana READ lock-om; iz nje se može samo čitati ali u nju se ne može pisati" slo "Tabuľka '%-.192s' bola zamknutá s READ a nemôže byť zmenená" spa "La tabla '%-.192s' ha sido bloqueada con un READ lock y no puede ser actualizada" swe "Tabell '%-.192s' kan inte uppdateras emedan den är låst för läsning" ukr "Таблицю '%-.192s' заблоковано тільки для читання, тому її не можна оновити" ER_TABLE_NOT_LOCKED chi "表 '%-.192s' 未使用 LOCK TABLES 锁定" cze "Tabulka '%-.192s' nebyla zamčena s LOCK TABLES" dan "Tabellen '%-.192s' var ikke låst med LOCK TABLES" eng "Table '%-.192s' was not locked with LOCK TABLES" est "Tabel '%-.192s' ei ole lukustatud käsuga LOCK TABLES" fre "Table '%-.192s' non verrouillée: utilisez LOCK TABLES" ger "Tabelle '%-.192s' wurde nicht mit LOCK TABLES gesperrt" greek "Ο πίνακας '%-.192s' δεν έχει κλειδωθεί με LOCK TABLES" hindi "टेबल '%-.192s' LOCK TABLES से बंद नहीं है" hun "A(z) '%-.192s' tabla nincs zarolva a LOCK TABLES-szel" ita "Non e` stato impostato il lock per la tabella '%-.192s' con LOCK TABLES" jpn "表 '%-.192s' は LOCK TABLES でロックされていません。" kor "테이블 '%-.192s'는 LOCK TABLES 명령으로 잠기지 않았습니다." nla "Tabel '%-.192s' was niet gelocked met LOCK TABLES" nor "Tabellen '%-.192s' var ikke låst med LOCK TABLES" norwegian-ny "Tabellen '%-.192s' var ikkje låst med LOCK TABLES" pol "Tabela '%-.192s' nie została zablokowana poleceniem LOCK TABLES" por "Tabela '%-.192s' não foi travada com LOCK TABLES" rum "Tabela '%-.192s' nu a fost locked cu LOCK TABLES" rus "Таблица '%-.192s' не была заблокирована с помощью LOCK TABLES" serbian "Tabela '%-.192s' nije bila zaključana komandom 'LOCK TABLES'" slo "Tabuľka '%-.192s' nebola zamknutá s LOCK TABLES" spa "La tabla '%-.192s' no fue bloqueada con LOCK TABLES" swe "Tabell '%-.192s' är inte låst med LOCK TABLES" ukr "Таблицю '%-.192s' не було блоковано з LOCK TABLES" ER_UNUSED_17 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_WRONG_DB_NAME 42000 chi "数据库名称不正确'%-.100T'" cze "Nepřípustné jméno databáze '%-.100T'" dan "Ugyldigt database navn '%-.100T'" eng "Incorrect database name '%-.100T'" est "Vigane andmebaasi nimi '%-.100T'" fre "Nom de base de donnée illégal: '%-.100T'" ger "Unerlaubter Datenbankname '%-.100T'" greek "Λάθος όνομα βάσης δεδομένων '%-.100T'" hindi "डेटाबेस नाम '%-.100T' गलत है" hun "Hibas adatbazisnev: '%-.100T'" ita "Nome database errato '%-.100T'" jpn "データベース名 '%-.100T' は不正です。" kor "'%-.100T' 데이타베이스의 이름이 부정확합니다." nla "Databasenaam '%-.100T' is niet getoegestaan" nor "Ugyldig database navn '%-.100T'" norwegian-ny "Ugyldig database namn '%-.100T'" pol "Niedozwolona nazwa bazy danych '%-.100T'" por "Nome de banco de dados '%-.100T' incorreto" rum "Numele bazei de date este incorect '%-.100T'" rus "Некорректное имя базы данных '%-.100T'" serbian "Pogrešno ime baze '%-.100T'" slo "Neprípustné meno databázy '%-.100T'" spa "Nombre incorrecto de base de datos '%-.100T'" swe "Felaktigt databasnamn '%-.100T'" ukr "Невірне ім'я бази данних '%-.100T'" ER_WRONG_TABLE_NAME 42000 chi "表名不正确'%-.100s'" cze "Nepřípustné jméno tabulky '%-.100s'" dan "Ugyldigt tabel navn '%-.100s'" eng "Incorrect table name '%-.100s'" est "Vigane tabeli nimi '%-.100s'" fre "Nom de table illégal: '%-.100s'" ger "Unerlaubter Tabellenname '%-.100s'" greek "Λάθος όνομα πίνακα '%-.100s'" hindi "टेबल नाम '%-.100s' गलत है" hun "Hibas tablanev: '%-.100s'" ita "Nome tabella errato '%-.100s'" jpn "表名 '%-.100s' は不正です。" kor "'%-.100s' 테이블 이름이 부정확합니다." nla "Niet toegestane tabelnaam '%-.100s'" nor "Ugyldig tabell navn '%-.100s'" norwegian-ny "Ugyldig tabell namn '%-.100s'" pol "Niedozwolona nazwa tabeli '%-.100s'..." por "Nome de tabela '%-.100s' incorreto" rum "Numele tabelei este incorect '%-.100s'" rus "Некорректное имя таблицы '%-.100s'" serbian "Pogrešno ime tabele '%-.100s'" slo "Neprípustné meno tabuľky '%-.100s'" spa "Nombre incorrecto de tabla '%-.100s'" swe "Felaktigt tabellnamn '%-.100s'" ukr "Невірне ім'я таблиці '%-.100s'" ER_TOO_BIG_SELECT 42000 chi "SELECT 将检查超过 MAX_JOIN_SIZE 行;检查您的 WHERE 并使用 SET SQL_BIG_SELECTS=1 或 SET MAX_JOIN_SIZE=# 如果 SELECT 没问题" cze "Zadaný SELECT by procházel příliš mnoho záznamů a trval velmi dlouho. Zkontrolujte tvar WHERE a je-li SELECT v pořádku, použijte SET SQL_BIG_SELECTS=1" dan "SELECT ville undersøge for mange poster og ville sandsynligvis tage meget lang tid. Undersøg WHERE delen og brug SET SQL_BIG_SELECTS=1 hvis udtrykket er korrekt" eng "The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET MAX_JOIN_SIZE=# if the SELECT is okay" est "SELECT lause peab läbi vaatama suure hulga kirjeid ja võtaks tõenäoliselt liiga kaua aega. Tasub kontrollida WHERE klauslit ja vajadusel kasutada käsku SET SQL_BIG_SELECTS=1" fre "SELECT va devoir examiner beaucoup d'enregistrements ce qui va prendre du temps. Vérifiez la clause WHERE et utilisez SET SQL_BIG_SELECTS=1 si SELECT se passe bien" ger "Die Ausführung des SELECT würde zu viele Datensätze untersuchen und wahrscheinlich sehr lange dauern. Bitte WHERE-Klausel überprüfen und gegebenenfalls SET SQL_BIG_SELECTS=1 oder SET MAX_JOIN_SIZE=# verwenden" greek "Το SELECT θα εξετάσει μεγάλο αριθμό εγγραφών και πιθανώς θα καθυστερήσει. Παρακαλώ εξετάστε τις παραμέτρους του WHERE και χρησιμοποιείστε SET SQL_BIG_SELECTS=1 αν το SELECT είναι σωστό" hindi "SELECT कमांड MAX_JOIN_SIZE पंक्तियों से भी ज्यादा की जांच करेगा; कृपया WHERE क्लॉज़ को जाचें अथवा SET SQL_BIG_SELECTS=1 या SET MAX_JOIN_SIZE=# का इस्तेमाल करें" hun "A SELECT tul sok rekordot fog megvizsgalni es nagyon sokaig fog tartani. Ellenorizze a WHERE-t es hasznalja a SET SQL_BIG_SELECTS=1 beallitast, ha a SELECT okay" ita "La SELECT dovrebbe esaminare troppi record e usare troppo tempo. Controllare la WHERE e usa SET SQL_BIG_SELECTS=1 se e` tutto a posto" jpn "SELECTがMAX_JOIN_SIZEを超える行数を処理しました。WHERE句を確認し、SELECT文に問題がなければ、 SET SQL_BIG_SELECTS=1 または SET MAX_JOIN_SIZE=# を使用して下さい。" kor "SELECT 명령에서 너무 많은 레코드를 찾기 때문에 많은 시간이 소요됩니다. 따라서 WHERE 문을 점검하거나, 만약 SELECT가 ok되면 SET SQL_BIG_SELECTS=1 옵션을 사용하세요." nla "Het SELECT-statement zou te veel records analyseren en dus veel tijd in beslagnemen. Kijk het WHERE-gedeelte van de query na en kies SET SQL_BIG_SELECTS=1 als het stament in orde is" nor "SELECT ville undersøke for mange poster og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET SQL_BIG_SELECTS=1 om SELECTen er korrekt" norwegian-ny "SELECT ville undersøkje for mange postar og ville sannsynligvis ta veldig lang tid. Undersøk WHERE klausulen og bruk SET SQL_BIG_SELECTS=1 om SELECTen er korrekt" pol "Operacja SELECT będzie dotyczyła zbyt wielu rekordów i prawdopodobnie zajmie bardzo dużo czasu. SprawdĽ warunek WHERE i użyj SQL_OPTION BIG_SELECTS=1 je?li operacja SELECT jest poprawna" por "O SELECT examinaria registros demais e provavelmente levaria muito tempo. Cheque sua cláusula WHERE e use SET SQL_BIG_SELECTS=1, se o SELECT estiver correto" rum "SELECT-ul ar examina prea multe cimpuri si probabil ar lua prea mult timp; verifica clauza WHERE si foloseste SET SQL_BIG_SELECTS=1 daca SELECT-ul e okay" rus "Для такой выборки SELECT должен будет просмотреть слишком много записей и, видимо, это займет очень много времени. Проверьте ваше указание WHERE, и, если в нем все в порядке, укажите SET SQL_BIG_SELECTS=1" serbian "Komanda 'SELECT' će ispitati previše slogova i potrošiti previše vremena. Proverite vaš 'WHERE' filter i upotrebite 'SET OPTION SQL_BIG_SELECTS=1' ako želite baš ovakvu komandu" slo "Zadaná požiadavka SELECT by prechádzala príliš mnoho záznamov a trvala by príliš dlho. Skontrolujte tvar WHERE a ak je v poriadku, použite SET SQL_BIG_SELECTS=1" spa "El SELECT debería de examinar más de MAX_JOIN_SIZE filas; revise su WHERE y utilice SET SQL_BIG_SELECTS=1 o SET MAX_JOIN_SIZE=# si el SELECT está ok" swe "Den angivna frågan skulle läsa mer än MAX_JOIN_SIZE rader. Kontrollera din WHERE och använd SET SQL_BIG_SELECTS=1 eller SET MAX_JOIN_SIZE=# ifall du vill hantera stora joins" ukr "Запиту SELECT потрібно обробити багато записів, що, певне, займе дуже багато часу. Перевірте ваше WHERE та використовуйте SET SQL_BIG_SELECTS=1, якщо цей запит SELECT є вірним" ER_UNKNOWN_ERROR chi "未知错误" cze "Neznámá chyba" dan "Ukendt fejl" eng "Unknown error" est "Tundmatu viga" fre "Erreur inconnue" ger "Unbekannter Fehler" greek "Προέκυψε άγνωστο λάθος" hindi "अज्ञात त्रुटि हुई" hun "Ismeretlen hiba" ita "Errore sconosciuto" jpn "不明なエラー" kor "알수 없는 에러입니다." nla "Onbekende Fout" nor "Ukjent feil" norwegian-ny "Ukjend feil" por "Erro desconhecido" rum "Eroare unknown" rus "Неизвестная ошибка" serbian "Nepoznata greška" slo "Neznámá chyba" spa "Error desconocido" swe "Okänt fel" ukr "Невідома помилка" ER_UNKNOWN_PROCEDURE 42000 chi "未知存储过程 '%-.192s'" cze "Neznámá procedura %-.192s" dan "Ukendt procedure %-.192s" eng "Unknown procedure '%-.192s'" est "Tundmatu protseduur '%-.192s'" fre "Procédure %-.192s inconnue" ger "Unbekannte Prozedur '%-.192s'" greek "Αγνωστη διαδικασία '%-.192s'" hindi "अज्ञात प्रोसीजर '%-.192s'" hun "Ismeretlen eljaras: '%-.192s'" ita "Procedura '%-.192s' sconosciuta" jpn "'%-.192s' は不明なプロシージャです。" kor "알수 없는 수행문 : '%-.192s'" nla "Onbekende procedure %-.192s" nor "Ukjent prosedyre %-.192s" norwegian-ny "Ukjend prosedyre %-.192s" pol "Unkown procedure %-.192s" por "'Procedure' '%-.192s' desconhecida" rum "Procedura unknown '%-.192s'" rus "Неизвестная процедура '%-.192s'" serbian "Nepoznata procedura '%-.192s'" slo "Neznámá procedúra '%-.192s'" spa "Procedimiento desconocido %-.192s" swe "Okänd procedur: %-.192s" ukr "Невідома процедура '%-.192s'" ER_WRONG_PARAMCOUNT_TO_PROCEDURE 42000 chi "存储过程 '%-.192s' 需要的参数和提供的参数不吻合" cze "Chybný počet parametrů procedury %-.192s" dan "Forkert antal parametre til proceduren %-.192s" eng "Incorrect parameter count to procedure '%-.192s'" est "Vale parameetrite hulk protseduurile '%-.192s'" fre "Mauvais nombre de paramètres pour la procedure %-.192s" ger "Falsche Parameterzahl für Prozedur '%-.192s'" greek "Λάθος αριθμός παραμέτρων στη διαδικασία '%-.192s'" hindi "प्रोसीजर '%-.192s' के लिए पैरामीटर की संख्या गलत है" hun "Rossz parameter a(z) '%-.192s'eljaras szamitasanal" ita "Numero di parametri errato per la procedura '%-.192s'" jpn "プロシージャ '%-.192s' へのパラメータ数が不正です。" kor "'%-.192s' 수행문에 대한 부정확한 파라메터" nla "Foutief aantal parameters doorgegeven aan procedure %-.192s" nor "Feil parameter antall til prosedyren %-.192s" norwegian-ny "Feil parameter tal til prosedyra %-.192s" pol "Incorrect parameter count to procedure %-.192s" por "Número de parâmetros incorreto para a 'procedure' '%-.192s'" rum "Procedura '%-.192s' are un numar incorect de parametri" rus "Некорректное количество параметров для процедуры '%-.192s'" serbian "Pogrešan broj parametara za proceduru '%-.192s'" slo "Chybný počet parametrov procedúry '%-.192s'" spa "Contador de parámetros incorrecto para procedimiento %-.192s" swe "Felaktigt antal parametrar till procedur %-.192s" ukr "Хибна кількість параметрів процедури '%-.192s'" ER_WRONG_PARAMETERS_TO_PROCEDURE chi "存储过程 '%-.192s' 的参数不对" cze "Chybné parametry procedury %-.192s" dan "Forkert(e) parametre til proceduren %-.192s" eng "Incorrect parameters to procedure '%-.192s'" est "Vigased parameetrid protseduurile '%-.192s'" fre "Paramètre erroné pour la procedure %-.192s" ger "Falsche Parameter für Prozedur '%-.192s'" greek "Λάθος παράμετροι στην διαδικασία '%-.192s'" hindi "प्रोसीजर '%-.192s' के लिए पैरामीटर्स गलत हैं" hun "Rossz parameter a(z) '%-.192s' eljarasban" ita "Parametri errati per la procedura '%-.192s'" jpn "プロシージャ '%-.192s' へのパラメータが不正です。" kor "'%-.192s' 수행문에 대한 부정확한 파라메터" nla "Foutieve parameters voor procedure %-.192s" nor "Feil parametre til prosedyren %-.192s" norwegian-ny "Feil parameter til prosedyra %-.192s" pol "Incorrect parameters to procedure %-.192s" por "Parâmetros incorretos para a 'procedure' '%-.192s'" rum "Procedura '%-.192s' are parametrii incorecti" rus "Некорректные параметры для процедуры '%-.192s'" serbian "Pogrešni parametri prosleđeni proceduri '%-.192s'" slo "Chybné parametre procedúry '%-.192s'" spa "Parámetros incorrectos para procedimiento %-.192s" swe "Felaktiga parametrar till procedur %-.192s" ukr "Хибний параметер процедури '%-.192s'" ER_UNKNOWN_TABLE 42S02 chi "未知表名 '%-.192s' 在 %-.32s" cze "Neznámá tabulka '%-.192s' v %-.32s" dan "Ukendt tabel '%-.192s' i %-.32s" eng "Unknown table '%-.192s' in %-.32s" est "Tundmatu tabel '%-.192s' %-.32s-s" fre "Table inconnue '%-.192s' dans %-.32s" ger "Unbekannte Tabelle '%-.192s' in '%-.32s'" greek "Αγνωστος πίνακας '%-.192s' σε %-.32s" hindi "टेबल '%-.192s', %-.32s में नहीं मिला" hun "Ismeretlen tabla: '%-.192s' %-.32s-ban" ita "Tabella '%-.192s' sconosciuta in %-.32s" jpn "'%-.192s' は %-.32s では不明な表です。" kor "알수 없는 테이블 '%-.192s' (데이타베이스 %-.32s)" nla "Onbekende tabel '%-.192s' in %-.32s" nor "Ukjent tabell '%-.192s' i %-.32s" norwegian-ny "Ukjend tabell '%-.192s' i %-.32s" pol "Unknown table '%-.192s' in %-.32s" por "Tabela '%-.192s' desconhecida em '%-.32s'" rum "Tabla '%-.192s' invalida in %-.32s" rus "Неизвестная таблица '%-.192s' в %-.32s" serbian "Nepoznata tabela '%-.192s' u '%-.32s'" slo "Neznáma tabuľka '%-.192s' v %-.32s" spa "Tabla desconocida '%-.192s' en %-.32s" swe "Okänd tabell '%-.192s' i '%-.32s'" ukr "Невідома таблиця '%-.192s' у %-.32s" ER_FIELD_SPECIFIED_TWICE 42000 chi "列 '%-.192s' 被指定了两次" cze "Položka '%-.192s' je zadána dvakrát" dan "Feltet '%-.192s' er anvendt to gange" eng "Column '%-.192s' specified twice" est "Tulp '%-.192s' on määratletud topelt" fre "Champ '%-.192s' spécifié deux fois" ger "Feld '%-.192s' wurde zweimal angegeben" greek "Το πεδίο '%-.192s' έχει ορισθεί δύο φορές" hindi "कॉलम '%-.192s' दो बार निर्दिष्ट किया गया है" hun "A(z) '%-.192s' mezot ketszer definialta" ita "Campo '%-.192s' specificato 2 volte" jpn "列 '%-.192s' は2回指定されています。" kor "칼럼 '%-.192s'는 두번 정의되어 있습니다." nla "Veld '%-.192s' is dubbel gespecificeerd" nor "Feltet '%-.192s' er spesifisert to ganger" norwegian-ny "Feltet '%-.192s' er spesifisert to gangar" pol "Field '%-.192s' specified twice" por "Coluna '%-.192s' especificada duas vezes" rum "Coloana '%-.192s' specificata de doua ori" rus "Столбец '%-.192s' указан дважды" serbian "Kolona '%-.192s' je navedena dva puta" slo "Pole '%-.192s' je zadané dvakrát" spa "Columna '%-.192s' especificada dos veces" swe "Fält '%-.192s' är redan använt" ukr "Стовбець '%-.192s' зазначено двічі" ER_INVALID_GROUP_FUNC_USE chi "组函数使用无效" cze "Nesprávné použití funkce group" dan "Forkert brug af grupperings-funktion" eng "Invalid use of group function" est "Vigane grupeerimisfunktsiooni kasutus" fre "Utilisation invalide de la clause GROUP" ger "Falsche Verwendung einer Gruppierungsfunktion" greek "Εσφαλμένη χρήση της group function" hindi "ग्रुप फंक्शन का अवैध उपयोग" hun "A group funkcio ervenytelen hasznalata" ita "Uso non valido di una funzione di raggruppamento" jpn "集計関数の使用方法が不正です。" kor "잘못된 그룹 함수를 사용하였습니다." nla "Ongeldig gebruik van GROUP-functie" por "Uso inválido de função de agrupamento (GROUP)" rum "Folosire incorecta a functiei group" rus "Неправильное использование групповых функций" serbian "Pogrešna upotreba 'GROUP' funkcije" slo "Nesprávne použitie funkcie GROUP" spa "Inválido uso de función de grupo" swe "Felaktig användning av SQL grupp function" ukr "Хибне використання функції групування" ER_UNSUPPORTED_EXTENSION 42000 chi "表'%-.192s'使用此MariaDB版本不存在的扩展" cze "Tabulka '%-.192s' používá rozšíření, které v této verzi MariaDB není" dan "Tabellen '%-.192s' bruger et filtypenavn som ikke findes i denne MariaDB version" eng "Table '%-.192s' uses an extension that doesn't exist in this MariaDB version" est "Tabel '%-.192s' kasutab laiendust, mis ei eksisteeri antud MariaDB versioonis" fre "Table '%-.192s' : utilise une extension invalide pour cette version de MariaDB" ger "Tabelle '%-.192s' verwendet eine Erweiterung, die in dieser MariaDB-Version nicht verfügbar ist" greek "Ο πίνακς '%-.192s' χρησιμοποιεί κάποιο extension που δεν υπάρχει στην έκδοση αυτή της MariaDB" hindi "टेबल '%-.192s' जिस इक्स्टेन्शन का उपयोग कर रहा है, वह इस MariaDB संस्करण में उपलब्ध नहीं है" hun "A(z) '%-.192s' tabla olyan bovitest hasznal, amely nem letezik ebben a MariaDB versioban" ita "La tabella '%-.192s' usa un'estensione che non esiste in questa versione di MariaDB" jpn "表 '%-.192s' は、このMariaDBバージョンには無い機能を使用しています。" kor "테이블 '%-.192s'는 확장명령을 이용하지만 현재의 MariaDB 버젼에서는 존재하지 않습니다." nla "Tabel '%-.192s' gebruikt een extensie, die niet in deze MariaDB-versie voorkomt" nor "Table '%-.192s' uses a extension that doesn't exist in this MariaDB version" norwegian-ny "Table '%-.192s' uses a extension that doesn't exist in this MariaDB version" pol "Table '%-.192s' uses a extension that doesn't exist in this MariaDB version" por "Tabela '%-.192s' usa uma extensão que não existe nesta versão do MariaDB" rum "Tabela '%-.192s' foloseste o extensire inexistenta in versiunea curenta de MariaDB" rus "В таблице '%-.192s' используются возможности, не поддерживаемые в этой версии MariaDB" serbian "Tabela '%-.192s' koristi ekstenziju koje ne postoji u ovoj verziji MariaDB-a" slo "Tabuľka '%-.192s' používa rozšírenie, ktoré v tejto verzii MariaDB nie je" spa "La tabla '%-.192s' usa una extensión que no existe en esta versión de MariaDB" swe "Tabell '%-.192s' har en extension som inte finns i denna version av MariaDB" ukr "Таблиця '%-.192s' використовує розширення, що не існує у цій версії MariaDB" ER_TABLE_MUST_HAVE_COLUMNS 42000 chi "表必须至少有1列" cze "Tabulka musí mít alespoň jeden sloupec" dan "En tabel skal have mindst een kolonne" eng "A table must have at least 1 column" est "Tabelis peab olema vähemalt üks tulp" fre "Une table doit comporter au moins une colonne" ger "Eine Tabelle muss mindestens eine Spalte besitzen" greek "Ενας πίνακας πρέπει να έχει τουλάχιστον ένα πεδίο" hindi "एक टेबल में कम से कम एक कॉलम होना चाहिए" hun "A tablanak legalabb egy oszlopot tartalmazni kell" ita "Una tabella deve avere almeno 1 colonna" jpn "表には最低でも1個の列が必要です。" kor "하나의 테이블에서는 적어도 하나의 칼럼이 존재하여야 합니다." nla "Een tabel moet minstens 1 kolom bevatten" por "Uma tabela tem que ter pelo menos uma (1) coluna" rum "O tabela trebuie sa aiba cel putin o coloana" rus "В таблице должен быть как минимум один столбец" serbian "Tabela mora imati najmanje jednu kolonu" slo "Tabuľka musí mať aspoň 1 pole" spa "Una tabla debe de tener al menos 1 columna" swe "Tabeller måste ha minst 1 kolumn" ukr "Таблиця повинна мати хочаб один стовбець" ER_RECORD_FILE_FULL chi "表'%-.192s'已满" cze "Tabulka '%-.192s' je plná" dan "Tabellen '%-.192s' er fuld" eng "The table '%-.192s' is full" est "Tabel '%-.192s' on täis" fre "La table '%-.192s' est pleine" ger "Tabelle '%-.192s' ist voll" greek "Ο πίνακας '%-.192s' είναι γεμάτος" hindi "टेबल '%-.192s' पूरा भरा है" hun "A '%-.192s' tabla megtelt" ita "La tabella '%-.192s' e` piena" jpn "表 '%-.192s' は満杯です。" kor "테이블 '%-.192s'가 full났습니다. " nla "De tabel '%-.192s' is vol" por "Tabela '%-.192s' está cheia" rum "Tabela '%-.192s' e plina" rus "Таблица '%-.192s' переполнена" serbian "Tabela '%-.192s' je popunjena do kraja" slo "Tabuľka '%-.192s' je plná" spa "La tabla '%-.192s' está llena" swe "Tabellen '%-.192s' är full" ukr "Таблиця '%-.192s' заповнена" ER_UNKNOWN_CHARACTER_SET 42000 chi "未知字符集:'%-.64s'" cze "Neznámá znaková sada: '%-.64s'" dan "Ukendt tegnsæt: '%-.64s'" eng "Unknown character set: '%-.64s'" est "Vigane kooditabel '%-.64s'" fre "Jeu de caractères inconnu: '%-.64s'" ger "Unbekannter Zeichensatz: '%-.64s'" greek "Αγνωστο character set: '%-.64s'" hindi "अज्ञात CHARACTER SET: '%-.64s'" hun "Ervenytelen karakterkeszlet: '%-.64s'" ita "Set di caratteri '%-.64s' sconosciuto" jpn "不明な文字コードセット: '%-.64s'" kor "알수없는 언어 Set: '%-.64s'" nla "Onbekende character set: '%-.64s'" por "Conjunto de caracteres '%-.64s' desconhecido" rum "Set de caractere invalid: '%-.64s'" rus "Неизвестная кодировка '%-.64s'" serbian "Nepoznati karakter-set: '%-.64s'" slo "Neznáma znaková sada: '%-.64s'" spa "Juego desconocido de caracteres: '%-.64s'" swe "Okänd teckenuppsättning: '%-.64s'" ukr "Невідома кодова таблиця: '%-.64s'" ER_TOO_MANY_TABLES chi "表太多; MariaDB 只能在join中使用 %d 个表" cze "Příliš mnoho tabulek, MariaDB jich může mít v joinu jen %d" dan "For mange tabeller. MariaDB kan kun bruge %d tabeller i et join" eng "Too many tables; MariaDB can only use %d tables in a join" est "Liiga palju tabeleid. MariaDB suudab JOINiga ühendada kuni %d tabelit" fre "Trop de tables. MariaDB ne peut utiliser que %d tables dans un JOIN" ger "Zu viele Tabellen. MariaDB kann in einem Join maximal %d Tabellen verwenden" greek "Πολύ μεγάλος αριθμός πινάκων. Η MariaDB μπορεί να χρησιμοποιήσει %d πίνακες σε διαδικασία join" hindi "बहुत अधिक टेबल्स, MariaDB एक JOIN में केवल %d टेबल्स का उपयोग कर सकता है" hun "Tul sok tabla. A MariaDB csak %d tablat tud kezelni osszefuzeskor" ita "Troppe tabelle. MariaDB puo` usare solo %d tabelle in una join" jpn "表が多すぎます。MariaDBがJOINできる表は %d 個までです。" kor "너무 많은 테이블이 Join되었습니다. MariaDB에서는 JOIN시 %d개의 테이블만 사용할 수 있습니다." nla "Teveel tabellen. MariaDB kan slechts %d tabellen in een join bevatten" por "Tabelas demais. O MariaDB pode usar somente %d tabelas em uma junção (JOIN)" rum "Prea multe tabele. MariaDB nu poate folosi mai mult de %d tabele intr-un join" rus "Слишком много таблиц. MariaDB может использовать только %d таблиц в соединении" serbian "Previše tabela. MariaDB može upotrebiti maksimum %d tabela pri 'JOIN' operaciji" slo "Príliš mnoho tabuliek. MariaDB môže použiť len %d v JOIN-e" spa "Demasiadas tablas. MariaDB solamente puede usar %d tablas en un join" swe "För många tabeller. MariaDB can ha högst %d tabeller i en och samma join" ukr "Забагато таблиць. MariaDB може використовувати лише %d таблиць у об'єднанні" ER_TOO_MANY_FIELDS chi "太多列" cze "Příliš mnoho položek" dan "For mange felter" eng "Too many columns" est "Liiga palju tulpasid" fre "Trop de champs" ger "Zu viele Felder" greek "Πολύ μεγάλος αριθμός πεδίων" hindi "बहुत अधिक कॉलम्स" hun "Tul sok mezo" ita "Troppi campi" jpn "列が多すぎます。" kor "칼럼이 너무 많습니다." nla "Te veel velden" por "Colunas demais" rum "Prea multe coloane" rus "Слишком много столбцов" serbian "Previše kolona" slo "Príliš mnoho polí" spa "Demasiadas columnas" swe "För många fält" ukr "Забагато стовбців" ER_TOO_BIG_ROWSIZE 42000 chi "行尺寸太大. 不包括BLOB,表的最大的行大小是 %ld. 这包括存储开销,请查看文档。您必须将某些列更改为 TEXT 或 BLOB" cze "Řádek je příliš velký. Maximální velikost řádku, nepočítaje položky blob, je %ld. Musíte změnit některé položky na blob" dan "For store poster. Max post størrelse, uden BLOB's, er %ld. Du må lave nogle felter til BLOB's" eng "Row size too large. The maximum row size for the used table type, not counting BLOBs, is %ld. This includes storage overhead, check the manual. You have to change some columns to TEXT or BLOBs" est "Liiga pikk kirje. Kirje maksimumpikkus arvestamata BLOB-tüüpi välju on %ld. Muuda mõned väljad BLOB-tüüpi väljadeks" fre "Ligne trop grande. Le taille maximale d'une ligne, sauf les BLOBs, est %ld. Changez le type de quelques colonnes en BLOB" ger "Zeilenlänge zu groß. Die maximale Zeilenlänge für den verwendeten Tabellentyp (ohne BLOB-Felder) beträgt %ld. Einige Felder müssen in BLOB oder TEXT umgewandelt werden" greek "Πολύ μεγάλο μέγεθος εγγραφής. Το μέγιστο μέγεθος εγγραφής, χωρίς να υπολογίζονται τα blobs, είναι %ld. Πρέπει να ορίσετε κάποια πεδία σαν blobs" hun "Tul nagy sormeret. A maximalis sormeret (nem szamolva a blob objektumokat) %ld. Nehany mezot meg kell valtoztatnia" ita "Riga troppo grande. La massima grandezza di una riga, non contando i BLOB, e` %ld. Devi cambiare alcuni campi in BLOB" jpn "行サイズが大きすぎます。この表の最大行サイズは BLOB を含まずに %ld です。格納時のオーバーヘッドも含まれます(マニュアルを確認してください)。列をTEXTまたはBLOBに変更する必要があります。" kor "너무 큰 row 사이즈입니다. BLOB를 계산하지 않고 최대 row 사이즈는 %ld입니다. 일부열을 BLOB 또는 TEXT로 변경해야 합니다." nla "Rij-grootte is groter dan toegestaan. Maximale rij grootte, blobs niet meegeteld, is %ld. U dient sommige velden in blobs te veranderen" por "Tamanho de linha grande demais. O máximo tamanho de linha, não contando BLOBs, é %ld. Você tem que mudar alguns campos para BLOBs" rum "Marimea liniei (row) prea mare. Marimea maxima a liniei, excluzind BLOB-urile este de %ld. Trebuie sa schimbati unele cimpuri in BLOB-uri" rus "Слишком большой размер записи. Максимальный размер строки, исключая поля BLOB, - %ld. Возможно, вам следует изменить тип некоторых полей на BLOB" serbian "Prevelik slog. Maksimalna veličina sloga, ne računajući BLOB polja, je %ld. Trebali bi da promenite tip nekih polja u BLOB" slo "Riadok je príliš veľký. Maximálna veľkosť riadku, okrem 'BLOB', je %ld. Musíte zmeniť niektoré položky na BLOB" spa "Tamaño de fila muy grande. El máximo tamaño de fila para el tipo de tabla usada, sin contar BLOBs, es de %ld. Esto incluye sobrecarga de almacenaje, revise el manual. Tiene que cambiar algunas columnas a TEXT o BLOBs" swe "För stor total radlängd. Den högst tillåtna radlängden, förutom BLOBs, är %ld. Ändra några av dina fält till BLOB" ukr "Задовга строка. Найбільшою довжиною строки, не рахуючи BLOB, є %ld. Вам потрібно привести деякі стовбці до типу BLOB" ER_STACK_OVERRUN chi "线程栈溢出: 已使用了: %ld 堆栈 %ld. 使用 'mariadbd --thread_stack=#' 指定更大的堆栈" cze "Přetečení zásobníku threadu: použito %ld z %ld. Použijte 'mariadbd --thread_stack=#' k zadání většího zásobníku" dan "Thread stack brugt: Brugt: %ld af en %ld stak. Brug 'mariadbd --thread_stack=#' for at allokere en større stak om nødvendigt" eng "Thread stack overrun: Used: %ld of a %ld stack. Use 'mariadbd --thread_stack=#' to specify a bigger stack if needed" fre "Débordement de la pile des tâches (Thread stack). Utilisées: %ld pour une pile de %ld. Essayez 'mariadbd --thread_stack=#' pour indiquer une plus grande valeur" ger "Thread-Stack-Überlauf. Benutzt: %ld von %ld Stack. 'mariadbd --thread_stack=#' verwenden, um bei Bedarf einen größeren Stack anzulegen" greek "Stack overrun στο thread: Used: %ld of a %ld stack. Παρακαλώ χρησιμοποιείστε 'mariadbd --thread_stack=#' για να ορίσετε ένα μεγαλύτερο stack αν χρειάζεται" hun "Thread verem tullepes: Used: %ld of a %ld stack. Hasznalja a 'mariadbd --thread_stack=#' nagyobb verem definialasahoz" ita "Thread stack overrun: Usati: %ld di uno stack di %ld. Usa 'mariadbd --thread_stack=#' per specificare uno stack piu` grande" jpn "スレッドスタック不足です(使用: %ld ; サイズ: %ld)。必要に応じて、より大きい値で 'mariadbd --thread_stack=#' の指定をしてください。" kor "쓰레드 스택이 넘쳤습니다. 사용: %ld개 스택: %ld개. 만약 필요시 더큰 스택을 원할때에는 'mariadbd --thread_stack=#' 를 정의하세요" nla "Thread stapel overrun: Gebruikte: %ld van een %ld stack. Gebruik 'mariadbd --thread_stack=#' om een grotere stapel te definieren (indien noodzakelijk)" por "Estouro da pilha do 'thread'. Usados %ld de uma pilha de %ld. Use 'mariadbd --thread_stack=#' para especificar uma pilha maior, se necessário" rum "Stack-ul thread-ului a fost depasit (prea mic): Folositi: %ld intr-un stack de %ld. Folositi 'mariadbd --thread_stack=#' ca sa specifici un stack mai mare" rus "Стек потоков переполнен: использовано: %ld из %ld стека. Применяйте 'mariadbd --thread_stack=#' для указания большего размера стека, если необходимо" serbian "Prepisivanje thread stack-a: Upotrebljeno: %ld od %ld stack memorije. Upotrebite 'mariadbd --thread_stack=#' da navedete veći stack ako je potrebno" slo "Pretečenie zásobníku vlákna: použité: %ld z %ld. Použite 'mariadbd --thread_stack=#' k zadaniu väčšieho zásobníka" spa "Desbordamiento de la pila de hilos (threads): Usado: %ld de una pila de %ld. Considere el incrementar la variable de sistema thread_stack" swe "Trådstacken tog slut: Har använt %ld av %ld bytes. Använd 'mariadbd --thread_stack=#' ifall du behöver en större stack" ukr "Стек гілок переповнено: Використано: %ld з %ld. Використовуйте 'mariadbd --thread_stack=#' аби зазначити більший стек, якщо необхідно" ER_WRONG_OUTER_JOIN 42000 chi "在 OUTER JOIN 中发现交叉依赖;检查您的 ON 条件" cze "V OUTER JOIN byl nalezen křížový odkaz. Prověřte ON podmínky" dan "Krydsreferencer fundet i OUTER JOIN; check dine ON conditions" eng "Cross dependency found in OUTER JOIN; examine your ON conditions" est "Ristsõltuvus OUTER JOIN klauslis. Kontrolli oma ON tingimusi" fre "Dépendance croisée dans une clause OUTER JOIN. Vérifiez la condition ON" ger "OUTER JOIN enthält fehlerhafte Abhängigkeiten. In ON verwendete Bedingungen überprüfen" greek "Cross dependency βρέθηκε σε OUTER JOIN. Παρακαλώ εξετάστε τις συνθήκες που θέσατε στο ON" hun "Keresztfuggoseg van az OUTER JOIN-ban. Ellenorizze az ON felteteleket" ita "Trovata una dipendenza incrociata nella OUTER JOIN. Controlla le condizioni ON" jpn "OUTER JOINに相互依存が見つかりました。ON句の条件を確認して下さい。" nla "Gekruiste afhankelijkheid gevonden in OUTER JOIN. Controleer uw ON-conditions" por "Dependência cruzada encontrada em junção externa (OUTER JOIN); examine as condições utilizadas nas cláusulas 'ON'" rum "Dependinta incrucisata (cross dependency) gasita in OUTER JOIN. Examinati conditiile ON" rus "В OUTER JOIN обнаружена перекрестная зависимость. Внимательно проанализируйте свои условия ON" serbian "Unakrsna zavisnost pronađena u komandi 'OUTER JOIN'. Istražite vaše 'ON' uslove" slo "V OUTER JOIN bol nájdený krížový odkaz. Skontrolujte podmienky ON" spa "Dependencia cruzada hallada en OUTER JOIN. Examina tus condiciones ON" swe "Felaktigt referens i OUTER JOIN. Kontrollera ON-uttrycket" ukr "Перехресна залежність у OUTER JOIN. Перевірте умову ON" ER_NULL_COLUMN_IN_INDEX 42000 chi "表处理程序不支持给定索引中的 NULL. 请将列 '%-.192s' 改为 NOT NULL 或使用其他处理程序" eng "Table handler doesn't support NULL in given index. Please change column '%-.192s' to be NOT NULL or use another handler" spa "El manejador de tabla no soporta NULL en índice suministrado. Por favor, cambie la columna '%-.192s' para que sea NOT NULL o utilice otro manejador" swe "Tabell hanteraren kan inte indexera NULL kolumner för den givna index typen. Ändra '%-.192s' till NOT NULL eller använd en annan hanterare" ukr "Вказівник таблиці не підтримує NULL у зазначенному індексі. Будь ласка, зменіть стовпчик '%-.192s' на NOT NULL або використайте інший вказівник таблиці." ER_CANT_FIND_UDF chi "无法加载函数'%-.192s'" cze "Nemohu načíst funkci '%-.192s'" dan "Kan ikke læse funktionen '%-.192s'" eng "Can't load function '%-.192s'" est "Ei suuda avada funktsiooni '%-.192s'" fre "Imposible de charger la fonction '%-.192s'" ger "Kann Funktion '%-.192s' nicht laden" greek "Δεν είναι δυνατή η διαδικασία load για τη συνάρτηση '%-.192s'" hindi "फंक्शन '%-.192s' लोड नहीं किया जा सका" hun "A(z) '%-.192s' fuggveny nem toltheto be" ita "Impossibile caricare la funzione '%-.192s'" jpn "関数 '%-.192s' をロードできません。" kor "'%-.192s' 함수를 로드하지 못했습니다." nla "Kan functie '%-.192s' niet laden" por "Não pode carregar a função '%-.192s'" rum "Nu pot incarca functia '%-.192s'" rus "Невозможно загрузить функцию '%-.192s'" serbian "Ne mogu da učitam funkciju '%-.192s'" slo "Nemôžem načítať funkciu '%-.192s'" spa "No puedo cargar la función '%-.192s'" swe "Kan inte ladda funktionen '%-.192s'" ukr "Не можу завантажити функцію '%-.192s'" ER_CANT_INITIALIZE_UDF chi "无法初始化函数 '%-.192s'; %-.80s" cze "Nemohu inicializovat funkci '%-.192s'; %-.80s" dan "Kan ikke starte funktionen '%-.192s'; %-.80s" eng "Can't initialize function '%-.192s'; %-.80s" est "Ei suuda algväärtustada funktsiooni '%-.192s'; %-.80s" fre "Impossible d'initialiser la fonction '%-.192s'; %-.80s" ger "Kann Funktion '%-.192s' nicht initialisieren: %-.80s" greek "Δεν είναι δυνατή η έναρξη της συνάρτησης '%-.192s'; %-.80s" hindi "फंक्शन '%-.192s' को प्रारंभ नहीं किया जा सका; %-.80s" hun "A(z) '%-.192s' fuggveny nem inicializalhato; %-.80s" ita "Impossibile inizializzare la funzione '%-.192s'; %-.80s" jpn "関数 '%-.192s' を初期化できません。; %-.80s" kor "'%-.192s' 함수를 초기화 하지 못했습니다.; %-.80s" nla "Kan functie '%-.192s' niet initialiseren; %-.80s" por "Não pode inicializar a função '%-.192s' - '%-.80s'" rum "Nu pot initializa functia '%-.192s'; %-.80s" rus "Невозможно инициализировать функцию '%-.192s'; %-.80s" serbian "Ne mogu da inicijalizujem funkciju '%-.192s'; %-.80s" slo "Nemôžem inicializovať funkciu '%-.192s'; %-.80s" spa "No puedo inicializar la función '%-.192s'; %-.80s" swe "Kan inte initialisera funktionen '%-.192s'; '%-.80s'" ukr "Не можу ініціалізувати функцію '%-.192s'; %-.80s" ER_UDF_NO_PATHS chi "共享库不允许使用路径" cze "Pro sdílenou knihovnu nejsou povoleny cesty" dan "Angivelse af sti ikke tilladt for delt bibliotek" eng "No paths allowed for shared library" est "Teegi nimes ei tohi olla kataloogi" fre "Chemin interdit pour les bibliothèques partagées" ger "Keine Pfade gestattet für Shared Library" greek "Δεν βρέθηκαν paths για την shared library" hun "Nincs ut a megosztott konyvtarakhoz (shared library)" ita "Non sono ammessi path per le librerie condivisa" jpn "共有ライブラリにはパスを指定できません。" kor "공유 라이버러리를 위한 패스가 정의되어 있지 않습니다." nla "Geen pad toegestaan voor shared library" por "Não há caminhos (paths) permitidos para biblioteca compartilhada" rum "Nici un paths nu e permis pentru o librarie shared" rus "Недопустимо указывать пути для динамических библиотек" serbian "Ne postoje dozvoljene putanje do share-ovane biblioteke" slo "Neprípustné žiadne cesty k zdieľanej knižnici" spa "No existen rutas autorizadas para biblioteca compartida" swe "Man får inte ange sökväg för dynamiska bibliotek" ukr "Не дозволено використовувати путі для розділюваних бібліотек" ER_UDF_EXISTS chi "函数 '%-.192s' 已经存在" cze "Funkce '%-.192s' již existuje" dan "Funktionen '%-.192s' findes allerede" eng "Function '%-.192s' already exists" est "Funktsioon '%-.192s' juba eksisteerib" fre "La fonction '%-.192s' existe déjà" ger "Funktion '%-.192s' existiert schon" greek "Η συνάρτηση '%-.192s' υπάρχει ήδη" hindi "फंक्शन '%-.192s' पहले से मौजूद है" hun "A '%-.192s' fuggveny mar letezik" ita "La funzione '%-.192s' esiste gia`" jpn "関数 '%-.192s' はすでに定義されています。" kor "'%-.192s' 함수는 이미 존재합니다." nla "Functie '%-.192s' bestaat reeds" por "Função '%-.192s' já existe" rum "Functia '%-.192s' exista deja" rus "Функция '%-.192s' уже существует" serbian "Funkcija '%-.192s' već postoji" slo "Funkcia '%-.192s' už existuje" spa "La función '%-.192s' ya existe" swe "Funktionen '%-.192s' finns redan" ukr "Функція '%-.192s' вже існує" ER_CANT_OPEN_LIBRARY chi "不能打开共享库 '%-.192s' (错误号码: %d, %-.128s)" cze "Nemohu otevřít sdílenou knihovnu '%-.192s' (errno: %d, %-.128s)" dan "Kan ikke åbne delt bibliotek '%-.192s' (errno: %d, %-.128s)" eng "Can't open shared library '%-.192s' (errno: %d, %-.128s)" est "Ei suuda avada jagatud teeki '%-.192s' (veakood: %d, %-.128s)" fre "Impossible d'ouvrir la bibliothèque partagée '%-.192s' (errno: %d, %-.128s)" ger "Kann Shared Library '%-.192s' nicht öffnen (Fehler: %d, %-.128s)" greek "Δεν είναι δυνατή η ανάγνωση της shared library '%-.192s' (κωδικός λάθους: %d, %-.128s)" hun "A(z) '%-.192s' megosztott konyvtar nem hasznalhato (hibakod: %d, %-.128s)" ita "Impossibile aprire la libreria condivisa '%-.192s' (errno: %d, %-.128s)" jpn "共有ライブラリ '%-.192s' を開く事ができません。(エラー番号: %d, %-.128s)" kor "'%-.192s' 공유 라이버러리를 열수 없습니다.(에러번호: %d, %-.128s)" nla "Kan shared library '%-.192s' niet openen (Errcode: %d, %-.128s)" nor "Can't open shared library '%-.192s' (errno: %d, %-.128s)" norwegian-ny "Can't open shared library '%-.192s' (errno: %d, %-.128s)" pol "Can't open shared library '%-.192s' (errno: %d, %-.128s)" por "Não pode abrir biblioteca compartilhada '%-.192s' (erro no. %d, %-.128s)" rum "Nu pot deschide libraria shared '%-.192s' (Eroare: %d, %-.128s)" rus "Невозможно открыть динамическую библиотеку '%-.192s' (ошибка: %d, %-.128s)" serbian "Ne mogu da otvorim share-ovanu biblioteku '%-.192s' (errno: %d, %-.128s)" slo "Nemôžem otvoriť zdieľanú knižnicu '%-.192s' (chybový kód: %d, %-.128s)" spa "No puedo abrir la biblioteca compartida '%-.192s' (error: %d, %-.128s)" swe "Kan inte öppna det dynamiska biblioteket '%-.192s' (Felkod: %d, %-.128s)" ukr "Не можу відкрити розділювану бібліотеку '%-.192s' (помилка: %d, %-.128s)" ER_CANT_FIND_DL_ENTRY chi "在库中找不到符号 '%-.128s'" cze "Nemohu najít funkci '%-.128s' v knihovně" dan "Kan ikke finde funktionen '%-.128s' i bibliotek" eng "Can't find symbol '%-.128s' in library" est "Ei leia funktsiooni '%-.128s' antud teegis" fre "Impossible de trouver la fonction '%-.128s' dans la bibliothèque" ger "Kann Funktion '%-.128s' in der Library nicht finden" greek "Δεν είναι δυνατή η ανεύρεση της συνάρτησης '%-.128s' στην βιβλιοθήκη" hun "A(z) '%-.128s' fuggveny nem talalhato a konyvtarban" ita "Impossibile trovare la funzione '%-.128s' nella libreria" jpn "関数 '%-.128s' は共有ライブラリー中にありません。" kor "라이버러리에서 '%-.128s' 함수를 찾을 수 없습니다." nla "Kan functie '%-.128s' niet in library vinden" por "Não pode encontrar a função '%-.128s' na biblioteca" rum "Nu pot gasi functia '%-.128s' in libraria" rus "Невозможно отыскать символ '%-.128s' в библиотеке" serbian "Ne mogu da pronadjem funkciju '%-.128s' u biblioteci" slo "Nemôžem nájsť funkciu '%-.128s' v knižnici" spa "No puedo encontrar el símbolo '%-.128s' en biblioteca" swe "Hittar inte funktionen '%-.128s' in det dynamiska biblioteket" ukr "Не можу знайти функцію '%-.128s' у бібліотеці" ER_FUNCTION_NOT_DEFINED chi "未定义函数 '%-.192s'" cze "Funkce '%-.192s' není definována" dan "Funktionen '%-.192s' er ikke defineret" eng "Function '%-.192s' is not defined" est "Funktsioon '%-.192s' ei ole defineeritud" fre "La fonction '%-.192s' n'est pas définie" ger "Funktion '%-.192s' ist nicht definiert" greek "Η συνάρτηση '%-.192s' δεν έχει ορισθεί" hindi "फंक्शन '%-.192s' की परिभाषा नहीं मिली" hun "A '%-.192s' fuggveny nem definialt" ita "La funzione '%-.192s' non e` definita" jpn "関数 '%-.192s' は定義されていません。" kor "'%-.192s' 함수가 정의되어 있지 않습니다." nla "Functie '%-.192s' is niet gedefinieerd" por "Função '%-.192s' não está definida" rum "Functia '%-.192s' nu e definita" rus "Функция '%-.192s' не определена" serbian "Funkcija '%-.192s' nije definisana" slo "Funkcia '%-.192s' nie je definovaná" spa "La función '%-.192s' no está definida" swe "Funktionen '%-.192s' är inte definierad" ukr "Функцію '%-.192s' не визначено" ER_HOST_IS_BLOCKED chi "主机 '%-.64s' 由于许多连接错误而被阻止;使用 'mariadb-admin flush-hosts' 解除阻塞" cze "Stroj '%-.64s' je zablokován kvůli mnoha chybám při připojování. Odblokujete použitím 'mariadb-admin flush-hosts'" dan "Værten '%-.64s' er blokeret på grund af mange fejlforespørgsler. Lås op med 'mariadb-admin flush-hosts'" eng "Host '%-.64s' is blocked because of many connection errors; unblock with 'mariadb-admin flush-hosts'" est "Masin '%-.64s' on blokeeritud hulgaliste ühendusvigade tõttu. Blokeeringu saab tühistada 'mariadb-admin flush-hosts' käsuga" fre "L'hôte '%-.64s' est bloqué à cause d'un trop grand nombre d'erreur de connexion. Débloquer le par 'mariadb-admin flush-hosts'" ger "Host '%-.64s' blockiert wegen zu vieler Verbindungsfehler. Aufheben der Blockierung mit 'mariadb-admin flush-hosts'" greek "Ο υπολογιστής '%-.64s' έχει αποκλεισθεί λόγω πολλαπλών λαθών σύνδεσης. Προσπαθήστε να διορώσετε με 'mariadb-admin flush-hosts'" hindi "होस्ट '%-.64s' को कई कनेक्शन में त्रुटियों के कारण ब्लॉक कर दिया गया है; 'mariadb-admin flush-hosts' का इस्तेमाल कर अनब्लॉक करें" hun "A '%-.64s' host blokkolodott, tul sok kapcsolodasi hiba miatt. Hasznalja a 'mariadb-admin flush-hosts' parancsot" ita "Sistema '%-.64s' bloccato a causa di troppi errori di connessione. Per sbloccarlo: 'mariadb-admin flush-hosts'" jpn "接続エラーが多いため、ホスト '%-.64s' は拒否されました。'mariadb-admin flush-hosts' で解除できます。" kor "너무 많은 연결오류로 인하여 호스트 '%-.64s'는 블락되었습니다. 'mariadb-admin flush-hosts'를 이용하여 블락을 해제하세요" nla "Host '%-.64s' is geblokkeeerd vanwege te veel verbindings fouten. Deblokkeer met 'mariadb-admin flush-hosts'" por "'Host' '%-.64s' está bloqueado devido a muitos erros de conexão. Desbloqueie com 'mariadb-admin flush-hosts'" rum "Host-ul '%-.64s' e blocat din cauza multelor erori de conectie. Poti deploca folosind 'mariadb-admin flush-hosts'" rus "Хост '%-.64s' заблокирован из-за слишком большого количества ошибок соединения. Разблокировать его можно с помощью 'mariadb-admin flush-hosts'" serbian "Host '%-.64s' je blokiran zbog previše grešaka u konekciji. Možete ga odblokirati pomoću komande 'mariadb-admin flush-hosts'" spa "El equipo '%-.64s' está bloqueado debido a muchos errores de conexión; desbloquea con 'mariadb-admin flush-hosts'" swe "Denna dator, '%-.64s', är blockerad pga många felaktig paket. Gör 'mariadb-admin flush-hosts' för att ta bort alla blockeringarna" ukr "Хост '%-.64s' заблоковано з причини великої кількості помилок з'єднання. Для розблокування використовуйте 'mariadb-admin flush-hosts'" ER_HOST_NOT_PRIVILEGED chi "Host'%-.64s'不允许连接到此MariaDB服务器" cze "Stroj '%-.64s' nemá povoleno se k tomuto MariaDB serveru připojit" dan "Værten '%-.64s' kan ikke tilkoble denne MariaDB-server" eng "Host '%-.64s' is not allowed to connect to this MariaDB server" est "Masinal '%-.64s' puudub ligipääs sellele MariaDB serverile" fre "Le hôte '%-.64s' n'est pas authorisé à se connecter à ce serveur MariaDB" ger "Host '%-.64s' hat keine Berechtigung, sich mit diesem MariaDB-Server zu verbinden" greek "Ο υπολογιστής '%-.64s' δεν έχει δικαίωμα σύνδεσης με τον MariaDB server" hindi "होस्ट '%-.64s' को इस MariaDB सर्वर से कनेक्ट करने के लिए अनुमति नहीं है" hun "A '%-.64s' host szamara nem engedelyezett a kapcsolodas ehhez a MariaDB szerverhez" ita "Al sistema '%-.64s' non e` consentita la connessione a questo server MariaDB" jpn "ホスト '%-.64s' からのこの MariaDB server への接続は許可されていません。" kor "'%-.64s' 호스트는 이 MariaDB서버에 접속할 허가를 받지 못했습니다." nla "Het is host '%-.64s' is niet toegestaan verbinding te maken met deze MariaDB server" por "'Host' '%-.64s' não tem permissão para se conectar com este servidor MariaDB" rum "Host-ul '%-.64s' nu este permis a se conecta la aceste server MariaDB" rus "Хосту '%-.64s' не разрешается подключаться к этому серверу MariaDB" serbian "Host-u '%-.64s' nije dozvoljeno da se konektuje na ovaj MariaDB server" spa "El equipo '%-.64s' no está autorizado a conectar con este servidor MariaDB" swe "Denna dator, '%-.64s', har inte privileger att använda denna MariaDB server" ukr "Хосту '%-.64s' не доволено зв'язуватись з цим сервером MariaDB" ER_PASSWORD_ANONYMOUS_USER 42000 chi "您正在以匿名用户身份使用 MariaDB,匿名用户不能修改用户设置" cze "Používáte MariaDB jako anonymní uživatel a anonymní uživatelé nemají povoleno měnit hesla" dan "Du bruger MariaDB som anonym bruger. Anonyme brugere må ikke ændre adgangskoder" eng "You are using MariaDB as an anonymous user and anonymous users are not allowed to modify user settings" est "Te kasutate MariaDB-i anonüümse kasutajana, kelledel pole parooli muutmise õigust" fre "Vous utilisez un utilisateur anonyme et les utilisateurs anonymes ne sont pas autorisés à changer les mots de passe" ger "Sie benutzen MariaDB als anonymer Benutzer und dürfen daher keine Passwörter ändern" greek "Χρησιμοποιείτε την MariaDB σαν anonymous user και έτσι δεν μπορείτε να αλλάξετε τα passwords άλλων χρηστών" hindi "आप MariaDB का उपयोग एक बेनाम यूज़र की तरह कर रहे हैं; बेनाम यूज़र्स को 'यूज़र सेटिंग्स' बदलने की अनुमति नहीं है" hun "Nevtelen (anonymous) felhasznalokent nem negedelyezett a jelszovaltoztatas" ita "Impossibile cambiare la password usando MariaDB come utente anonimo" jpn "MariaDB を匿名ユーザーで使用しているので、パスワードの変更はできません。" kor "당신은 MariaDB서버에 익명의 사용자로 접속을 하셨습니다.익명의 사용자는 암호를 변경할 수 없습니다." nla "U gebruikt MariaDB als anonieme gebruiker en deze mogen geen wachtwoorden wijzigen" por "Você está usando o MariaDB como usuário anônimo e usuários anônimos não têm permissão para mudar senhas" rum "Dumneavoastra folositi MariaDB ca un utilizator anonim si utilizatorii anonimi nu au voie sa schimbe setarile utilizatorilor" rus "Вы используете MariaDB от имени анонимного пользователя, а анонимным пользователям не разрешается менять пароли" serbian "Vi koristite MariaDB kao anonimni korisnik a anonimnim korisnicima nije dozvoljeno da menjaju lozinke" spa "Está usando MariaDB como un usuario anónimo y lo usuarios anónimos no tienen permiso para cambiar las propiedades de usuario" swe "Du använder MariaDB som en anonym användare och som sådan får du inte ändra ditt lösenord" ukr "Ви використовуєте MariaDB як анонімний користувач, тому вам не дозволено змінювати паролі" ER_PASSWORD_NOT_ALLOWED 42000 chi "您必须具有更新 MariaDB 数据库中的表的权限才能更改其他人的密码" cze "Na změnu hesel ostatním musíte mít právo provést update tabulek v databázi mysql" dan "Du skal have tilladelse til at opdatere tabeller i MariaDB databasen for at ændre andres adgangskoder" eng "You must have privileges to update tables in the mysql database to be able to change passwords for others" est "Teiste paroolide muutmiseks on nõutav tabelite muutmisõigus 'mysql' andmebaasis" fre "Vous devez avoir le privilège update sur les tables de la base de donnée mysql pour pouvoir changer les mots de passe des autres" ger "Sie benötigen die Berechtigung zum Aktualisieren von Tabellen in der Datenbank 'mysql', um die Passwörter anderer Benutzer ändern zu können" greek "Πρέπει να έχετε δικαίωμα διόρθωσης πινάκων (update) στη βάση δεδομένων mysql για να μπορείτε να αλλάξετε τα passwords άλλων χρηστών" hun "Onnek tabla-update joggal kell rendelkeznie a mysql adatbazisban masok jelszavanak megvaltoztatasahoz" ita "E` necessario il privilegio di update sulle tabelle del database mysql per cambiare le password per gli altri utenti" jpn "他のユーザーのパスワードを変更するためには、mysqlデータベースの表を更新する権限が必要です。" kor "당신은 다른사용자들의 암호를 변경할 수 있도록 데이타베이스 변경권한을 가져야 합니다." nla "U moet tabel update priveleges hebben in de MariaDB database om wachtwoorden voor anderen te mogen wijzigen" por "Você deve ter privilégios para atualizar tabelas no banco de dados mysql para ser capaz de mudar a senha de outros" rum "Trebuie sa aveti privilegii sa actualizati tabelele in bazele de date mysql ca sa puteti sa schimati parolele altora" rus "Для того чтобы изменять пароли других пользователей, у вас должны быть привилегии на изменение таблиц в базе данных mysql" serbian "Morate imati privilegije da možete da update-ujete određene tabele ako želite da menjate lozinke za druge korisnike" spa "Vd debe de tener privilegios para actualizar tablas en la base de datos mysql para poder cambiar las contraseñas de otros" swe "För att ändra lösenord för andra måste du ha rättigheter att uppdatera mysql-databasen" ukr "Ви повині мати право на оновлення таблиць у базі данних mysql, аби мати можливість змінювати пароль іншим" ER_PASSWORD_NO_MATCH 28000 chi "在用户表中找不到任何匹配的行" cze "V tabulce user není žádný odpovídající řádek" dan "Kan ikke finde nogen tilsvarende poster i bruger tabellen" eng "Can't find any matching row in the user table" est "Ei leia vastavat kirjet kasutajate tabelis" fre "Impossible de trouver un enregistrement correspondant dans la table user" ger "Kann keinen passenden Datensatz in Tabelle 'user' finden" greek "Δεν είναι δυνατή η ανεύρεση της αντίστοιχης εγγραφής στον πίνακα των χρηστών" hindi "यूज़र टेबल में रिकॉर्ड नहीं मिला" hun "Nincs megegyezo sor a user tablaban" ita "Impossibile trovare la riga corrispondente nella tabella user" jpn "ユーザーテーブルに該当するレコードが見つかりません。" kor "사용자 테이블에서 일치하는 것을 찾을 수 없습니다." nla "Kan geen enkele passende rij vinden in de gebruikers tabel" por "Não pode encontrar nenhuma linha que combine na tabela usuário (user table)" rum "Nu pot gasi nici o linie corespunzatoare in tabela utilizatorului" rus "Невозможно отыскать подходящую запись в таблице пользователей" serbian "Ne mogu da pronađem odgovarajući slog u 'user' tabeli" spa "No puedo encontrar una fila coincidente en la tabla de usuario" swe "Hittade inte användaren i 'user'-tabellen" ukr "Не можу знайти відповідних записів у таблиці користувача" ER_UPDATE_INFO chi "匹配行:%ld已更改:%ld警告:%ld" cze "Nalezených řádků: %ld Změněno: %ld Varování: %ld" dan "Poster fundet: %ld Ændret: %ld Advarsler: %ld" eng "Rows matched: %ld Changed: %ld Warnings: %ld" est "Sobinud kirjeid: %ld Muudetud: %ld Hoiatusi: %ld" fre "Enregistrements correspondants: %ld Modifiés: %ld Warnings: %ld" ger "Datensätze gefunden: %ld Geändert: %ld Warnungen: %ld" hun "Megegyezo sorok szama: %ld Valtozott: %ld Warnings: %ld" ita "Rows riconosciute: %ld Cambiate: %ld Warnings: %ld" jpn "該当した行: %ld 変更: %ld 警告: %ld" kor "일치하는 Rows : %ld개 변경됨: %ld개 경고: %ld개" nla "Passende rijen: %ld Gewijzigd: %ld Waarschuwingen: %ld" por "Linhas que combinaram: %ld - Alteradas: %ld - Avisos: %ld" rum "Linii identificate (matched): %ld Schimbate: %ld Atentionari (warnings): %ld" rus "Совпало записей: %ld Изменено: %ld Предупреждений: %ld" serbian "Odgovarajućih slogova: %ld Promenjeno: %ld Upozorenja: %ld" spa "Líneas coincidentes: %ld Cambiadas: %ld Avisos: %ld" swe "Rader: %ld Uppdaterade: %ld Varningar: %ld" ukr "Записів відповідає: %ld Змінено: %ld Застережень: %ld" ER_CANT_CREATE_THREAD chi "无法创建新线程 (错误号码 %M); 如果您没有用完剩余内存,您可以查阅文档以了解可能与操作系统相关的错误" cze "Nemohu vytvořit nový thread (errno %M). Pokud je ještě nějaká volná paměť, podívejte se do manuálu na část o chybách specifických pro jednotlivé operační systémy" dan "Kan ikke danne en ny tråd (fejl nr. %M). Hvis computeren ikke er løbet tør for hukommelse, kan du se i brugervejledningen for en mulig operativ-system - afhængig fejl" eng "Can't create a new thread (errno %M); if you are not out of available memory, you can consult the manual for a possible OS-dependent bug" est "Ei suuda luua uut lõime (veakood %M). Kui mälu ei ole otsas, on tõenäoliselt tegemist operatsioonisüsteemispetsiifilise veaga" fre "Impossible de créer une nouvelle tâche (errno %M). S'il reste de la mémoire libre, consultez le manual pour trouver un éventuel bug dépendant de l'OS" ger "Kann keinen neuen Thread erzeugen (Fehler: %M). Sollte noch Speicher verfügbar sein, bitte im Handbuch wegen möglicher Fehler im Betriebssystem nachschlagen" hun "Uj thread letrehozasa nem lehetseges (Hibakod: %M). Amenyiben van meg szabad memoria, olvassa el a kezikonyv operacios rendszerfuggo hibalehetosegekrol szolo reszet" ita "Impossibile creare un nuovo thread (errno %M). Se non ci sono problemi di memoria disponibile puoi consultare il manuale per controllare possibili problemi dipendenti dal SO" jpn "新規にスレッドを作成できません。(エラー番号 %M) もしも使用可能メモリーの不足でなければ、OS依存のバグである可能性があります。" kor "새로운 쓰레드를 만들 수 없습니다.(에러번호 %M). 만약 여유메모리가 있다면 OS-dependent버그 의 메뉴얼 부분을 찾아보시오." nla "Kan geen nieuwe thread aanmaken (Errcode: %M). Indien er geen tekort aan geheugen is kunt u de handleiding consulteren over een mogelijke OS afhankelijke fout" nor "Can't create a new thread (errno %M); if you are not out of available memory you can consult the manual for any possible OS dependent bug" norwegian-ny "Can't create a new thread (errno %M); if you are not out of available memory you can consult the manual for any possible OS dependent bug" pol "Can't create a new thread (errno %M); if you are not out of available memory you can consult the manual for any possible OS dependent bug" por "Não pode criar uma nova 'thread' (erro no. %M). Se você não estiver sem memória disponível, você pode consultar o manual sobre um possível 'bug' dependente do sistema operacional" rum "Nu pot crea un thread nou (Eroare %M). Daca mai aveti memorie disponibila in sistem, puteti consulta manualul - ar putea exista un potential bug in legatura cu sistemul de operare" rus "Невозможно создать новый поток (ошибка %M). Если это не ситуация, связанная с нехваткой памяти, то вам следует изучить документацию на предмет описания возможной ошибки работы в конкретной ОС" serbian "Ne mogu da kreiram novi thread (errno %M). Ako imate još slobodne memorije, trebali biste da pogledate u priručniku da li je ovo specifična greška vašeg operativnog sistema" spa "No puedo crear un nuevo hilo (thread) (error %M). Si no está falto de memoria disponible, vd puede consultar el manual para un posible error dependiente del SO" swe "Kan inte skapa en ny tråd (errno %M)" ukr "Не можу створити нову гілку (помилка %M). Якщо ви не використали усю пам'ять, то прочитайте документацію до вашої ОС - можливо це помилка ОС" ER_WRONG_VALUE_COUNT_ON_ROW 21S01 chi "列计数与行%lu的值计数不匹配" cze "Počet sloupců neodpovídá počtu hodnot na řádku %lu" dan "Kolonne antallet stemmer ikke overens med antallet af værdier i post %lu" eng "Column count doesn't match value count at row %lu" est "Tulpade hulk erineb väärtuste hulgast real %lu" ger "Anzahl der Felder stimmt nicht mit der Anzahl der Werte in Zeile %lu überein" hun "Az oszlopban talalhato ertek nem egyezik meg a %lu sorban szamitott ertekkel" ita "Il numero delle colonne non corrisponde al conteggio alla riga %lu" jpn "%lu 行目で、列の数が値の数と一致しません。" kor "Row %lu에서 칼럼 카운트와 value 카운터와 일치하지 않습니다." nla "Kolom aantal komt niet overeen met waarde aantal in rij %lu" por "Contagem de colunas não confere com a contagem de valores na linha %lu" rum "Numarul de coloane nu corespunde cu numarul de valori la linia %lu" rus "Количество столбцов не совпадает с количеством значений в записи %lu" serbian "Broj kolona ne odgovara broju vrednosti u slogu %lu" spa "El número de columnas no se corresponde con el número de valores en la línea %lu" swe "Antalet kolumner motsvarar inte antalet värden på rad: %lu" ukr "Кількість стовбців не співпадає з кількістю значень у строці %lu" ER_CANT_REOPEN_TABLE chi "无法重新打开表:'%-.192s'" cze "Nemohu znovuotevřít tabulku: '%-.192s" dan "Kan ikke genåbne tabel '%-.192s" eng "Can't reopen table: '%-.192s'" est "Ei suuda taasavada tabelit '%-.192s'" fre "Impossible de réouvrir la table: '%-.192s" ger "Kann Tabelle'%-.192s' nicht erneut öffnen" hindi "टेबल '%-.192s' फिर से खोल नहीं सकते" hun "Nem lehet ujra-megnyitni a tablat: '%-.192s" ita "Impossibile riaprire la tabella: '%-.192s'" jpn "表を再オープンできません。: '%-.192s'" kor "테이블을 다시 열수 없군요: '%-.192s" nla "Kan tabel niet opnieuw openen: '%-.192s" nor "Can't reopen table: '%-.192s" norwegian-ny "Can't reopen table: '%-.192s" pol "Can't reopen table: '%-.192s" por "Não pode reabrir a tabela '%-.192s" rum "Nu pot redeschide tabela: '%-.192s'" rus "Невозможно заново открыть таблицу '%-.192s'" serbian "Ne mogu da ponovo otvorim tabelu '%-.192s'" slo "Can't reopen table: '%-.192s" spa "No puedo reabrir la tabla: '%-.192s" swe "Kunde inte stänga och öppna tabell '%-.192s" ukr "Не можу перевідкрити таблицю: '%-.192s'" ER_INVALID_USE_OF_NULL 22004 chi "无效使用 NULL 值" cze "Neplatné užití hodnoty NULL" dan "Forkert brug af nulværdi (NULL)" eng "Invalid use of NULL value" est "NULL väärtuse väärkasutus" fre "Utilisation incorrecte de la valeur NULL" ger "Unerlaubte Verwendung eines NULL-Werts" hindi "NULL मान का अवैध उपयोग" hun "A NULL ervenytelen hasznalata" ita "Uso scorretto del valore NULL" jpn "NULL 値の使用方法が不適切です。" kor "NULL 값을 잘못 사용하셨군요..." nla "Foutief gebruik van de NULL waarde" por "Uso inválido do valor NULL" rum "Folosirea unei value NULL e invalida" rus "Неправильное использование величины NULL" serbian "Pogrešna upotreba vrednosti NULL" spa "Uso inválido del valor NULL" swe "Felaktig använding av NULL" ukr "Хибне використання значення NULL" ER_REGEXP_ERROR 42000 chi "正则表达错误 '%s'" cze "Regulární výraz vrátil chybu: %s" dan "Fik fejl '%s' fra regexp" eng "Regex error '%s'" est "regexp tagastas vea: %s" fre "Erreur '%s' provenant de regexp" ger "Regexp Fehler %s" hindi "regexp में '%s' त्रुटि हुई" hun "'%s' hiba a regularis kifejezes hasznalata soran (regexp)" ita "Errore '%s' da regexp" jpn "regexp がエラー '%s' を返しました。" kor "regexp에서 '%s'가 났습니다." nla "Fout '%s' ontvangen van regexp" por "Obteve erro '%s' em regexp" rum "Eroarea '%s' obtinuta din expresia regulara (regexp)" rus "Ошибка регулярного выражения: %s" serbian "Funkcija regexp je vratila grešku: %s" spa "Obtenido error '%s' de regexp" swe "Fick fel '%s' från REGEXP" ukr "Помилка регулярного виразу: %s" ER_MIX_OF_GROUP_FUNC_AND_FIELDS 42000 chi "如果没有 GROUP BY 子句,不能混合没有 GROUP 列的 GROUP 列 (MIN(),MAX(),COUNT(),...)" cze "Pokud není žádná GROUP BY klauzule, není dovoleno současné použití GROUP položek (MIN(),MAX(),COUNT()...) s ne GROUP položkami" dan "Sammenblanding af GROUP kolonner (MIN(),MAX(),COUNT()...) uden GROUP kolonner er ikke tilladt, hvis der ikke er noget GROUP BY prædikat" eng "Mixing of GROUP columns (MIN(),MAX(),COUNT(),...) with no GROUP columns is illegal if there is no GROUP BY clause" est "GROUP tulpade (MIN(),MAX(),COUNT()...) kooskasutamine tavaliste tulpadega ilma GROUP BY klauslita ei ole lubatud" fre "Mélanger les colonnes GROUP (MIN(),MAX(),COUNT()...) avec des colonnes normales est interdit s'il n'y a pas de clause GROUP BY" ger "Das Vermischen von GROUP-Feldern (MIN(),MAX(),COUNT()...) mit Nicht-GROUP-Feldern ist nicht zulässig, wenn keine GROUP-BY-Klausel vorhanden ist" hun "A GROUP mezok (MIN(),MAX(),COUNT()...) kevert hasznalata nem lehetseges GROUP BY hivatkozas nelkul" ita "Il mescolare funzioni di aggregazione (MIN(),MAX(),COUNT()...) e non e` illegale se non c'e` una clausula GROUP BY" jpn "GROUP BY句が無い場合、集計関数(MIN(),MAX(),COUNT(),...)と通常の列を同時に使用できません。" kor "GROUP BY 절 없이 혼합된 GROUP 함수 (MIN(),MAX(),COUNT(),...) 를 사용할 수 없습니다." nla "Het mixen van GROUP kolommen (MIN(),MAX(),COUNT()...) met no-GROUP kolommen is foutief indien er geen GROUP BY clausule is" por "Mistura de colunas agrupadas (com MIN(), MAX(), COUNT(), ...) com colunas não agrupadas é ilegal, se não existir uma cláusula de agrupamento (cláusula GROUP BY)" rum "Amestecarea de coloane GROUP (MIN(),MAX(),COUNT()...) fara coloane GROUP este ilegala daca nu exista o clauza GROUP BY" rus "Одновременное использование сгруппированных (GROUP) столбцов (MIN(),MAX(),COUNT(),...) с несгруппированными столбцами является некорректным, если в выражении есть GROUP BY" serbian "Upotreba agregatnih funkcija (MIN(),MAX(),COUNT()...) bez 'GROUP' kolona je pogrešna ako ne postoji 'GROUP BY' iskaz" spa "La mezcla de columnas GROUP (MIN(),MAX(),COUNT()...) con columnas no GROUP es ilegal si no exite la cláusula GROUP BY" swe "Man får ha både GROUP-kolumner (MIN(),MAX(),COUNT()...) och fält i en fråga om man inte har en GROUP BY-del" ukr "Змішування GROUP стовбців (MIN(),MAX(),COUNT()...) з не GROUP стовбцями є забороненим, якщо не має GROUP BY" ER_NONEXISTING_GRANT 42000 chi "用户 '%-.48s' 来自主机 '%-.64s'没有此类授权" cze "Neexistuje odpovídající grant pro uživatele '%-.48s' na stroji '%-.64s'" dan "Denne tilladelse findes ikke for brugeren '%-.48s' på vært '%-.64s'" eng "There is no such grant defined for user '%-.48s' on host '%-.64s'" est "Sellist õigust ei ole defineeritud kasutajale '%-.48s' masinast '%-.64s'" fre "Un tel droit n'est pas défini pour l'utilisateur '%-.48s' sur l'hôte '%-.64s'" ger "Für Benutzer '%-.48s' auf Host '%-.64s' gibt es keine solche Berechtigung" hun "A '%-.48s' felhasznalonak nincs ilyen joga a '%-.64s' host-on" ita "GRANT non definita per l'utente '%-.48s' dalla macchina '%-.64s'" jpn "ユーザー '%-.48s' (ホスト '%-.64s' 上) は許可されていません。" kor "사용자 '%-.48s' (호스트 '%-.64s')를 위하여 정의된 그런 승인은 없습니다." nla "Deze toegang (GRANT) is niet toegekend voor gebruiker '%-.48s' op host '%-.64s'" por "Não existe tal permissão (grant) definida para o usuário '%-.48s' no 'host' '%-.64s'" rum "Nu exista un astfel de grant definit pentru utilzatorul '%-.48s' de pe host-ul '%-.64s'" rus "Такие права не определены для пользователя '%-.48s' на хосте '%-.64s'" serbian "Ne postoji odobrenje za pristup korisniku '%-.48s' na host-u '%-.64s'" spa "No existe tal concesión (grant) definida para usuario '%-.48s' en el equipo '%-.64s'" swe "Det finns inget privilegium definierat för användare '%-.48s' på '%-.64s'" ukr "Повноважень не визначено для користувача '%-.48s' з хосту '%-.64s'" ER_TABLEACCESS_DENIED_ERROR 42000 chi "%-.100T 命令的权限拒绝用户 '%s'@'%s' 用在表 %`s.%`s" cze "%-.100T příkaz nepřístupný pro uživatele: '%s'@'%s' pro tabulku %`s.%`s" dan "%-.100T-kommandoen er ikke tilladt for brugeren '%s'@'%s' for tabellen %`s.%`s" nla "%-.100T commando geweigerd voor gebruiker: '%s'@'%s' voor tabel %`s.%`s" eng "%-.100T command denied to user '%s'@'%s' for table %`s.%`s" est "%-.100T käsk ei ole lubatud kasutajale '%s'@'%s' tabelis %`s.%`s" fre "La commande '%-.100T' est interdite à l'utilisateur: '%s'@'%s' sur la table %`s.%`s" ger "%-.100T Befehl nicht erlaubt für Benutzer '%s'@'%s' auf Tabelle %`s.%`s" hun "%-.100T parancs a '%s'@'%s' felhasznalo szamara nem engedelyezett a %`s.%`s tablaban" ita "Comando %-.100T negato per l'utente: '%s'@'%s' sulla tabella %`s.%`s" jpn "コマンド %-.100T は ユーザー '%s'@'%s' ,テーブル %`s.%`s に対して許可されていません" kor "'%-.100T' 명령은 다음 사용자에게 거부되었습니다. : '%s'@'%s' for 테이블 %`s.%`s" por "Comando '%-.100T' negado para o usuário '%s'@'%s' na tabela %`s.%`s" rum "Comanda %-.100T interzisa utilizatorului: '%s'@'%s' pentru tabela %`s.%`s" rus "Команда %-.100T запрещена пользователю '%s'@'%s' для таблицы %`s.%`s" serbian "%-.100T komanda zabranjena za korisnika '%s'@'%s' za tabelu %`s.%`s" spa "%-.100T comando denegado a usuario '%s'@'%s' para la tabla %`s.%`s" swe "%-.100T ej tillåtet för '%s'@'%s' för tabell %`s.%`s" ukr "%-.100T команда заборонена користувачу: '%s'@'%s' у таблиці %`s.%`s" ER_COLUMNACCESS_DENIED_ERROR 42000 chi "%-.32s 命令的权限拒绝用户 '%s'@'%s' 用在列 '%-.192s' 在表 '%-.192s'" cze "%-.32s příkaz nepřístupný pro uživatele: '%s'@'%s' pro sloupec '%-.192s' v tabulce '%-.192s'" dan "%-.32s-kommandoen er ikke tilladt for brugeren '%s'@'%s' for kolonne '%-.192s' in tabellen '%-.192s'" eng "%-.32s command denied to user '%s'@'%s' for column '%-.192s' in table '%-.192s'" est "%-.32s käsk ei ole lubatud kasutajale '%s'@'%s' tulbale '%-.192s' tabelis '%-.192s'" fre "La commande '%-.32s' est interdite à l'utilisateur: '%s'@'%s' sur la colonne '%-.192s' de la table '%-.192s'" ger "%-.32s Befehl nicht erlaubt für Benutzer '%s'@'%s' und Feld '%-.192s' in Tabelle '%-.192s'" hun "%-.32s parancs a '%s'@'%s' felhasznalo szamara nem engedelyezett a '%-.192s' mezo eseten a '%-.192s' tablaban" ita "Comando %-.32s negato per l'utente: '%s'@'%s' sulla colonna '%-.192s' della tabella '%-.192s'" jpn "コマンド %-.32s は ユーザー '%s'@'%s'\n カラム '%-.192s' テーブル '%-.192s' に対して許可されていません" kor "'%-.32s' 명령은 다음 사용자에게 거부되었습니다. : '%s'@'%s' for 칼럼 '%-.192s' in 테이블 '%-.192s'" nla "%-.32s commando geweigerd voor gebruiker: '%s'@'%s' voor kolom '%-.192s' in tabel '%-.192s'" por "Comando '%-.32s' negado para o usuário '%s'@'%s' na coluna '%-.192s', na tabela '%-.192s'" rum "Comanda %-.32s interzisa utilizatorului: '%s'@'%s' pentru coloana '%-.192s' in tabela '%-.192s'" rus "Команда %-.32s запрещена пользователю '%s'@'%s' для столбца '%-.192s' в таблице '%-.192s'" serbian "%-.32s komanda zabranjena za korisnika '%s'@'%s' za kolonu '%-.192s' iz tabele '%-.192s'" spa "%-.32s comando denegado a el usuario '%s'@'%s' para la columna '%-.192s' en la tabla '%-.192s'" swe "%-.32s ej tillåtet för '%s'@'%s' för kolumn '%-.192s' i tabell '%-.192s'" ukr "%-.32s команда заборонена користувачу: '%s'@'%s' для стовбця '%-.192s' у таблиці '%-.192s'" ER_ILLEGAL_GRANT_FOR_TABLE 42000 chi "非法的 GRANT/REVOKE 命令;请查阅文档查看可以使用哪些权限" cze "Neplatný příkaz GRANT/REVOKE. Prosím, přečtěte si v manuálu, jaká privilegia je možné použít" dan "Forkert GRANT/REVOKE kommando. Se i brugervejledningen hvilke privilegier der kan specificeres" eng "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used" est "Vigane GRANT/REVOKE käsk. Tutvu kasutajajuhendiga" fre "Commande GRANT/REVOKE incorrecte. Consultez le manuel" ger "Unzulässiger GRANT- oder REVOKE-Befehl. Verfügbare Berechtigungen sind im Handbuch aufgeführt" greek "Illegal GRANT/REVOKE command; please consult the manual to see which privileges can be used" hun "Ervenytelen GRANT/REVOKE parancs. Kerem, nezze meg a kezikonyvben, milyen jogok lehetsegesek" ita "Comando GRANT/REVOKE illegale. Prego consultare il manuale per sapere quali privilegi possono essere usati" jpn "不正な GRANT/REVOKE コマンドです。どの権限で利用可能かはマニュアルを参照して下さい。" kor "잘못된 GRANT/REVOKE 명령. 어떤 권리와 승인이 사용되어 질 수 있는지 메뉴얼을 보시오." nla "Foutief GRANT/REVOKE commando. Raadpleeg de handleiding welke priveleges gebruikt kunnen worden" nor "Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used" norwegian-ny "Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used" pol "Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used" por "Comando GRANT/REVOKE ilegal. Por favor consulte no manual quais privilégios podem ser usados" rum "Comanda GRANT/REVOKE ilegala. Consultati manualul in privinta privilegiilor ce pot fi folosite" rus "Неверная команда GRANT или REVOKE. Обратитесь к документации, чтобы выяснить, какие привилегии можно использовать" serbian "Pogrešna 'GRANT' odnosno 'REVOKE' komanda. Molim Vas pogledajte u priručniku koje vrednosti mogu biti upotrebljene" slo "Illegal GRANT/REVOKE command; please consult the manual to see which privleges can be used" spa "Comando GRANT/REVOKE ilegal; por favor, consulte el manual para ver los permisos que se pueden usar" swe "Felaktigt GRANT-privilegium använt" ukr "Хибна GRANT/REVOKE команда; прочитайте документацію стосовно того, які права можна використовувати" ER_GRANT_WRONG_HOST_OR_USER 42000 chi "GRANT 语句的主机或用户参数太长" cze "Argument příkazu GRANT uživatel nebo stroj je příliš dlouhý" dan "Værts- eller brugernavn for langt til GRANT" eng "The host or user argument to GRANT is too long" est "Masina või kasutaja nimi GRANT lauses on liiga pikk" fre "L'hôte ou l'utilisateur donné en argument à GRANT est trop long" ger "Das Host- oder User-Argument für GRANT ist zu lang" hindi "GRANT के लिए होस्ट या यूज़र आर्गुमेंट बहुत लंबा है" hun "A host vagy felhasznalo argumentuma tul hosszu a GRANT parancsban" ita "L'argomento host o utente per la GRANT e` troppo lungo" jpn "GRANTコマンドへの、ホスト名やユーザー名が長すぎます。" kor "승인(GRANT)을 위하여 사용한 사용자나 호스트의 값들이 너무 깁니다." nla "De host of gebruiker parameter voor GRANT is te lang" por "Argumento de 'host' ou de usuário para o GRANT é longo demais" rum "Argumentul host-ului sau utilizatorului pentru GRANT e prea lung" rus "Слишком длинное имя пользователя/хоста для GRANT" serbian "Argument 'host' ili 'korisnik' prosleđen komandi 'GRANT' je predugačak" spa "El argumento de GRANT para el equipo o usuario es demasiado grande" swe "Felaktigt maskinnamn eller användarnamn använt med GRANT" ukr "Аргумент host або user для GRANT задовгий" ER_NO_SUCH_TABLE 42S02 chi "表 '%-.192s.%-.192s' 不存在" cze "Tabulka '%-.192s.%-.192s' neexistuje" dan "Tabellen '%-.192s.%-.192s' eksisterer ikke" eng "Table '%-.192s.%-.192s' doesn't exist" est "Tabelit '%-.192s.%-.192s' ei eksisteeri" fre "La table '%-.192s.%-.192s' n'existe pas" ger "Tabelle '%-.192s.%-.192s' existiert nicht" hindi "टेबल '%-.192s.%-.192s' मौजूद नहीं है" hun "A '%-.192s.%-.192s' tabla nem letezik" ita "La tabella '%-.192s.%-.192s' non esiste" jpn "表 '%-.192s.%-.192s' は存在しません。" kor "테이블 '%-.192s.%-.192s' 는 존재하지 않습니다." nla "Tabel '%-.192s.%-.192s' bestaat niet" nor "Table '%-.192s.%-.192s' doesn't exist" norwegian-ny "Table '%-.192s.%-.192s' doesn't exist" pol "Table '%-.192s.%-.192s' doesn't exist" por "Tabela '%-.192s.%-.192s' não existe" rum "Tabela '%-.192s.%-.192s' nu exista" rus "Таблица '%-.192s.%-.192s' не существует" serbian "Tabela '%-.192s.%-.192s' ne postoji" slo "Table '%-.192s.%-.192s' doesn't exist" spa "La tabla '%-.192s.%-.192s' no existe" swe "Det finns ingen tabell som heter '%-.192s.%-.192s'" ukr "Таблиця '%-.192s.%-.192s' не існує" ER_NONEXISTING_TABLE_GRANT 42000 chi "没有为用户 '%-.48s' 来自主机 '%-.64s' 在表 '%-.192s' 上授权" cze "Neexistuje odpovídající grant pro uživatele '%-.48s' na stroji '%-.64s' pro tabulku '%-.192s'" dan "Denne tilladelse eksisterer ikke for brugeren '%-.48s' på vært '%-.64s' for tabellen '%-.192s'" eng "There is no such grant defined for user '%-.48s' on host '%-.64s' on table '%-.192s'" est "Sellist õigust ei ole defineeritud kasutajale '%-.48s' masinast '%-.64s' tabelile '%-.192s'" fre "Un tel droit n'est pas défini pour l'utilisateur '%-.48s' sur l'hôte '%-.64s' sur la table '%-.192s'" ger "Eine solche Berechtigung ist für User '%-.48s' auf Host '%-.64s' an Tabelle '%-.192s' nicht definiert" hun "A '%-.48s' felhasznalo szamara a '%-.64s' host '%-.192s' tablajaban ez a parancs nem engedelyezett" ita "GRANT non definita per l'utente '%-.48s' dalla macchina '%-.64s' sulla tabella '%-.192s'" jpn "ユーザー '%-.48s' (ホスト '%-.64s' 上) の表 '%-.192s' への権限は定義されていません。" kor "사용자 '%-.48s'(호스트 '%-.64s')는 테이블 '%-.192s'를 사용하기 위하여 정의된 승인은 없습니다. " nla "Deze toegang (GRANT) is niet toegekend voor gebruiker '%-.48s' op host '%-.64s' op tabel '%-.192s'" por "Não existe tal permissão (grant) definido para o usuário '%-.48s' no 'host' '%-.64s', na tabela '%-.192s'" rum "Nu exista un astfel de privilegiu (grant) definit pentru utilizatorul '%-.48s' de pe host-ul '%-.64s' pentru tabela '%-.192s'" rus "Такие права не определены для пользователя '%-.48s' на компьютере '%-.64s' для таблицы '%-.192s'" serbian "Ne postoji odobrenje za pristup korisniku '%-.48s' na host-u '%-.64s' tabeli '%-.192s'" spa "No existe tal concesión (grant) definida para el usuario '%-.48s' en el equipo '%-.64s' en la tabla '%-.192s'" swe "Det finns inget privilegium definierat för användare '%-.48s' på '%-.64s' för tabell '%-.192s'" ukr "Повноважень не визначено для користувача '%-.48s' з хосту '%-.64s' для таблиці '%-.192s'" ER_NOT_ALLOWED_COMMAND 42000 chi "本 MariaDB 版本不允许使用这个命令" cze "Použitý příkaz není v této verzi MariaDB povolen" dan "Den brugte kommando er ikke tilladt med denne udgave af MariaDB" eng "The used command is not allowed with this MariaDB version" est "Antud käsk ei ole lubatud käesolevas MariaDB versioonis" fre "Cette commande n'existe pas dans cette version de MariaDB" ger "Der verwendete Befehl ist in dieser MariaDB-Version nicht zulässig" hindi "यह कमांड इस MariaDB संस्करण के साथ इस्तेमाल नहीं किया जा सकता है" hun "A hasznalt parancs nem engedelyezett ebben a MariaDB verzioban" ita "Il comando utilizzato non e` supportato in questa versione di MariaDB" jpn "このMariaDBバージョンでは利用できないコマンドです。" kor "사용된 명령은 현재의 MariaDB 버젼에서는 이용되지 않습니다." nla "Het used commando is niet toegestaan in deze MariaDB versie" por "Comando usado não é permitido para esta versão do MariaDB" rum "Comanda folosita nu este permisa pentru aceasta versiune de MariaDB" rus "Эта команда не допускается в данной версии MariaDB" serbian "Upotrebljena komanda nije dozvoljena sa ovom verzijom MariaDB servera" spa "El comando usado no está permitido con esta versión de MariaDB" swe "Du kan inte använda detta kommando med denna MariaDB version" ukr "Використовувана команда не дозволена у цій версії MariaDB" ER_SYNTAX_ERROR 42000 chi "您的 SQL 语法有错误;请查看相关文档" cze "Vaše syntaxe je nějaká divná" dan "Der er en fejl i SQL syntaksen" eng "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use" est "Viga SQL süntaksis" fre "Erreur de syntaxe" ger "Fehler in der SQL-Syntax. Bitte die korrekte Syntax im Handbuch nachschlagen" greek "You have an error in your SQL syntax" hindi "आपके SQL सिंटेक्स मैं गलती है; सही सिंटेक्स के लिए अपने MariaDB सर्वर संस्करण के मैन्युअल की सहायता लें" hun "Szintaktikai hiba" ita "Errore di sintassi nella query SQL" jpn "SQL構文エラーです。バージョンに対応するマニュアルを参照して正しい構文を確認してください。" kor "SQL 구문에 오류가 있습니다." nla "Er is iets fout in de gebruikte syntax" nor "Something is wrong in your syntax" norwegian-ny "Something is wrong in your syntax" pol "Something is wrong in your syntax" por "Você tem um erro de sintaxe no seu SQL" rum "Aveti o eroare in sintaxa RSQL" rus "У вас ошибка в запросе. Изучите документацию по используемой версии MariaDB на предмет корректного синтаксиса" serbian "Imate grešku u vašoj SQL sintaksi" slo "Something is wrong in your syntax" spa "Existe un error en su sintaxis SQL; revise el manual que se corresponde con su versión del servidor MariaDB para averiguar la sintaxis correcta a utilizar" swe "Du har något fel i din syntax" ukr "У вас помилка у синтаксисі SQL" ER_DELAYED_CANT_CHANGE_LOCK chi "延迟插入线程无法获得 %-.192s 的请求锁定" cze "Zpožděný insert threadu nebyl schopen získat požadovaný zámek pro tabulku %-.192s" dan "Forsinket indsættelse tråden (delayed insert thread) kunne ikke opnå lås på tabellen %-.192s" eng "Delayed insert thread couldn't get requested lock for table %-.192s" est "INSERT DELAYED lõim ei suutnud saada soovitud lukku tabelile %-.192s" fre "La tâche 'delayed insert' n'a pas pu obtenir le verrou démandé sur la table %-.192s" ger "Verzögerter (DELAYED) Einfüge-Thread konnte die angeforderte Sperre für Tabelle '%-.192s' nicht erhalten" hun "A kesleltetett beillesztes (delayed insert) thread nem kapott zatolast a %-.192s tablahoz" ita "Il thread di inserimento ritardato non riesce ad ottenere il lock per la tabella %-.192s" jpn "'Delayed insert'スレッドが表 '%-.192s' のロックを取得できませんでした。" kor "지연된 insert 쓰레드가 테이블 %-.192s의 요구된 락킹을 처리할 수 없었습니다." nla "'Delayed insert' thread kon de aangevraagde 'lock' niet krijgen voor tabel %-.192s" por "'Thread' de inserção retardada (atrasada) pois não conseguiu obter a trava solicitada para tabela '%-.192s'" rum "Thread-ul pentru inserarea aminata nu a putut obtine lacatul (lock) pentru tabela %-.192s" rus "Поток, обслуживающий отложенную вставку (delayed insert), не смог получить запрашиваемую блокировку на таблицу %-.192s" serbian "Prolongirani 'INSERT' thread nije mogao da dobije traženo zaključavanje tabele '%-.192s'" spa "El hilo (thread) de inserción retardada no pudo obtener bloqueo requerido para la tabla %-.192s" swe "DELAYED INSERT-tråden kunde inte låsa tabell '%-.192s'" ukr "Гілка для INSERT DELAYED не може отримати блокування для таблиці %-.192s" ER_TOO_MANY_DELAYED_THREADS chi "使用中的延迟线程太多" cze "Příliš mnoho zpožděných threadů" dan "For mange slettede tråde (threads) i brug" eng "Too many delayed threads in use" est "Liiga palju DELAYED lõimesid kasutusel" fre "Trop de tâche 'delayed' en cours" ger "Zu viele verzögerte (DELAYED) Threads in Verwendung" hindi "बहुत से DELAYED थ्रेड्स उपयोग में हैं" hun "Tul sok kesletetett thread (delayed)" ita "Troppi threads ritardati in uso" jpn "'Delayed insert'スレッドが多すぎます。" kor "너무 많은 지연 쓰레드를 사용하고 있습니다." nla "Te veel 'delayed' threads in gebruik" por "Excesso de 'threads' retardadas (atrasadas) em uso" rum "Prea multe threaduri aminate care sint in uz" rus "Слишком много потоков, обслуживающих отложенную вставку (delayed insert)" serbian "Previše prolongiranih thread-ova je u upotrebi" spa "Demasiados hilos (threads) retardados en uso" swe "Det finns redan 'max_delayed_threads' trådar i använding" ukr "Забагато затриманих гілок використовується" ER_ABORTING_CONNECTION 08S01 chi "终止连线 %ld 数据库: '%-.192s' 用户: '%-.48s' (%-.64s)" cze "Zrušeno spojení %ld do databáze: '%-.192s' uživatel: '%-.48s' (%-.64s)" dan "Afbrudt forbindelse %ld til database: '%-.192s' bruger: '%-.48s' (%-.64s)" eng "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)" est "Ühendus katkestatud %ld andmebaasile: '%-.192s' kasutajale: '%-.48s' (%-.64s)" fre "Connection %ld avortée vers la bd: '%-.192s' utilisateur: '%-.48s' (%-.64s)" ger "Abbruch der Verbindung %ld zur Datenbank '%-.192s'. Benutzer: '%-.48s' (%-.64s)" hun "Megszakitott kapcsolat %ld db: '%-.192s' adatbazishoz, felhasznalo: '%-.48s' (%-.64s)" ita "Interrotta la connessione %ld al db: '%-.192s' utente: '%-.48s' (%-.64s)" jpn "接続 %ld が中断されました。データベース: '%-.192s' ユーザー: '%-.48s' (%-.64s)" kor "데이타베이스 접속을 위한 연결 %ld가 중단됨 : '%-.192s' 사용자: '%-.48s' (%-.64s)" nla "Afgebroken verbinding %ld naar db: '%-.192s' gebruiker: '%-.48s' (%-.64s)" nor "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)" norwegian-ny "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)" pol "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)" por "Conexão %ld abortou para o banco de dados '%-.192s' - usuário '%-.48s' (%-.64s)" rum "Conectie terminata %ld la baza de date: '%-.192s' utilizator: '%-.48s' (%-.64s)" rus "Прервано соединение %ld к базе данных '%-.192s' пользователя '%-.48s' (%-.64s)" serbian "Prekinuta konekcija broj %ld ka bazi: '%-.192s' korisnik je bio: '%-.48s' (%-.64s)" slo "Aborted connection %ld to db: '%-.192s' user: '%-.48s' (%-.64s)" spa "Conexión %ld abortada para la base de datos: '%-.192s' usuario: '%-.48s' (%-.64s)" swe "Avbröt länken för tråd %ld till db '%-.192s', användare '%-.48s' (%-.64s)" ukr "Перервано з'єднання %ld до бази данних: '%-.192s' користувача: '%-.48s' (%-.64s)" ER_NET_PACKET_TOO_LARGE 08S01 chi "收到的数据包大于 'max_allowed_packet' 字节" cze "Zjištěn příchozí packet delší než 'max_allowed_packet'" dan "Modtog en datapakke som var større end 'max_allowed_packet'" eng "Got a packet bigger than 'max_allowed_packet' bytes" est "Saabus suurem pakett kui lubatud 'max_allowed_packet' muutujaga" fre "Paquet plus grand que 'max_allowed_packet' reçu" ger "Empfangenes Paket ist größer als 'max_allowed_packet' Bytes" hindi "'max_allowed_packet' से भी बड़ा एक पैकेट मिला" hun "A kapott csomag nagyobb, mint a maximalisan engedelyezett: 'max_allowed_packet'" ita "Ricevuto un pacchetto piu` grande di 'max_allowed_packet'" jpn "'max_allowed_packet'よりも大きなパケットを受信しました。" kor "'max_allowed_packet'보다 더큰 패킷을 받았습니다." nla "Groter pakket ontvangen dan 'max_allowed_packet'" por "Obteve um pacote maior do que a taxa máxima de pacotes definida (max_allowed_packet)" rum "Un packet mai mare decit 'max_allowed_packet' a fost primit" rus "Полученный пакет больше, чем 'max_allowed_packet'" serbian "Primio sam mrežni paket veći od definisane vrednosti 'max_allowed_packet'" spa "Obtenido un paquete mayor de 'max_allowed_packet' bytes" swe "Kommunkationspaketet är större än 'max_allowed_packet'" ukr "Отримано пакет більший ніж max_allowed_packet" ER_NET_READ_ERROR_FROM_PIPE 08S01 chi "连接管道读取错误" cze "Zjištěna chyba při čtení z roury spojení" dan "Fik læsefejl fra forbindelse (connection pipe)" eng "Got a read error from the connection pipe" est "Viga ühendustoru lugemisel" fre "Erreur de lecture reçue du pipe de connexion" ger "Lese-Fehler bei einer Verbindungs-Pipe" hindi "कनेक्शन पाइप से एक READ त्रुटि हुई" hun "Olvasasi hiba a kapcsolat soran" ita "Rilevato un errore di lettura dalla pipe di connessione" jpn "接続パイプの読み込みエラーです。" kor "연결 파이프로부터 에러가 발생하였습니다." nla "Kreeg leesfout van de verbindings pipe" por "Obteve um erro de leitura no 'pipe' da conexão" rum "Eroare la citire din cauza lui 'connection pipe'" rus "Получена ошибка чтения от потока соединения (connection pipe)" serbian "Greška pri čitanju podataka sa pipe-a" spa "Obtenido un error de lectura desde la tubería de la conexión" swe "Fick läsfel från klienten vid läsning från 'PIPE'" ukr "Отримано помилку читання з комунікаційного каналу" ER_NET_FCNTL_ERROR 08S01 chi "fcntl()的错误" cze "Zjištěna chyba fcntl()" dan "Fik fejlmeddelelse fra fcntl()" eng "Got an error from fcntl()" est "fcntl() tagastas vea" fre "Erreur reçue de fcntl() " ger "fcntl() lieferte einen Fehler" hindi "fcntl() से एक त्रुटि हुई" hun "Hiba a fcntl() fuggvenyben" ita "Rilevato un errore da fcntl()" jpn "fcntl()がエラーを返しました。" kor "fcntl() 함수로부터 에러가 발생하였습니다." nla "Kreeg fout van fcntl()" por "Obteve um erro em fcntl()" rum "Eroare obtinuta de la fcntl()" rus "Получена ошибка от fcntl()" serbian "Greška pri izvršavanju funkcije fcntl()" spa "Obtenido un error de fcntl()" swe "Fick fatalt fel från 'fcntl()'" ukr "Отримано помилкку від fcntl()" ER_NET_PACKETS_OUT_OF_ORDER 08S01 chi "数据包乱序" cze "Příchozí packety v chybném pořadí" dan "Modtog ikke datapakker i korrekt rækkefølge" eng "Got packets out of order" est "Paketid saabusid vales järjekorras" fre "Paquets reçus dans le désordre" ger "Pakete nicht in der richtigen Reihenfolge empfangen" hindi "पैकेट्स क्रम में नहीं प्राप्त हुए" hun "Helytelen sorrendben erkezett adatcsomagok" ita "Ricevuti pacchetti non in ordine" jpn "不正な順序のパケットを受信しました。" kor "순서가 맞지않는 패킷을 받았습니다." nla "Pakketten in verkeerde volgorde ontvangen" por "Obteve pacotes fora de ordem" rum "Packets care nu sint ordonati au fost gasiti" rus "Пакеты получены в неверном порядке" serbian "Primio sam mrežne pakete van reda" spa "Obtenidos paquetes desordenados" swe "Kommunikationspaketen kom i fel ordning" ukr "Отримано пакети у неналежному порядку" ER_NET_UNCOMPRESS_ERROR 08S01 chi "无法解压缩通信数据包" cze "Nemohu rozkomprimovat komunikační packet" dan "Kunne ikke dekomprimere kommunikations-pakke (communication packet)" eng "Couldn't uncompress communication packet" est "Viga andmepaketi lahtipakkimisel" fre "Impossible de décompresser le paquet reçu" ger "Kommunikationspaket lässt sich nicht entpacken" hindi "संचार पैकेट UNCOMPRESS नहीं कर सके" hun "A kommunikacios adatcsomagok nem tomorithetok ki" ita "Impossibile scompattare i pacchetti di comunicazione" jpn "圧縮パケットの展開ができませんでした。" kor "통신 패킷의 압축해제를 할 수 없었습니다." nla "Communicatiepakket kon niet worden gedecomprimeerd" por "Não conseguiu descomprimir pacote de comunicação" rum "Nu s-a putut decompresa pachetul de comunicatie (communication packet)" rus "Невозможно распаковать пакет, полученный через коммуникационный протокол" serbian "Ne mogu da dekompresujem mrežne pakete" spa "No pude descomprimir paquete de comunicación" swe "Kunde inte packa up kommunikationspaketet" ukr "Не можу декомпресувати комунікаційний пакет" ER_NET_READ_ERROR 08S01 chi "读取通信数据包出错" cze "Zjištěna chyba při čtení komunikačního packetu" dan "Fik fejlmeddelelse ved læsning af kommunikations-pakker (communication packets)" eng "Got an error reading communication packets" est "Viga andmepaketi lugemisel" fre "Erreur de lecture des paquets reçus" ger "Fehler beim Lesen eines Kommunikationspakets" hindi "संचार पैकेट्स पढ़ते समय एक त्रुटि हुई" hun "HIba a kommunikacios adatcsomagok olvasasa soran" ita "Rilevato un errore ricevendo i pacchetti di comunicazione" jpn "パケットの受信でエラーが発生しました。" kor "통신 패킷을 읽는 중 오류가 발생하였습니다." nla "Fout bij het lezen van communicatiepakketten" por "Obteve um erro na leitura de pacotes de comunicação" rum "Eroare obtinuta citind pachetele de comunicatie (communication packets)" rus "Получена ошибка в процессе получения пакета через коммуникационный протокол " serbian "Greška pri primanju mrežnih paketa" spa "Obtenido un error leyendo paquetes de comunicación" swe "Fick ett fel vid läsning från klienten" ukr "Отримано помилку читання комунікаційних пакетів" ER_NET_READ_INTERRUPTED 08S01 chi "读取通信包超时" cze "Zjištěn timeout při čtení komunikačního packetu" dan "Timeout-fejl ved læsning af kommunukations-pakker (communication packets)" eng "Got timeout reading communication packets" est "Kontrollaja ületamine andmepakettide lugemisel" fre "Timeout en lecture des paquets reçus" ger "Zeitüberschreitung beim Lesen eines Kommunikationspakets" hindi "संचार पैकेट्स पढ़ने के दौरान टाइमआउट" hun "Idotullepes a kommunikacios adatcsomagok olvasasa soran" ita "Rilevato un timeout ricevendo i pacchetti di comunicazione" jpn "パケットの受信でタイムアウトが発生しました。" kor "통신 패킷을 읽는 중 timeout이 발생하였습니다." nla "Timeout bij het lezen van communicatiepakketten" por "Obteve expiração de tempo (timeout) na leitura de pacotes de comunicação" rum "Timeout obtinut citind pachetele de comunicatie (communication packets)" rus "Получен таймаут ожидания пакета через коммуникационный протокол " serbian "Vremenski limit za čitanje mrežnih paketa je istekao" spa "Obtenido tiempo agotado (timeout) leyendo paquetes de comunicación" swe "Fick 'timeout' vid läsning från klienten" ukr "Отримано затримку читання комунікаційних пакетів" ER_NET_ERROR_ON_WRITE 08S01 chi "写入通信包时出错" cze "Zjištěna chyba při zápisu komunikačního packetu" dan "Fik fejlmeddelelse ved skrivning af kommunukations-pakker (communication packets)" eng "Got an error writing communication packets" est "Viga andmepaketi kirjutamisel" fre "Erreur d'écriture des paquets envoyés" ger "Fehler beim Schreiben eines Kommunikationspakets" hindi "संचार पैकेट्स लिखते समय एक त्रुटि हुई" hun "Hiba a kommunikacios csomagok irasa soran" ita "Rilevato un errore inviando i pacchetti di comunicazione" jpn "パケットの送信でエラーが発生しました。" kor "통신 패킷을 기록하는 중 오류가 발생하였습니다." nla "Fout bij het schrijven van communicatiepakketten" por "Obteve um erro na escrita de pacotes de comunicação" rum "Eroare in scrierea pachetelor de comunicatie (communication packets)" rus "Получена ошибка при передаче пакета через коммуникационный протокол " serbian "Greška pri slanju mrežnih paketa" spa "Obtenido un error escribiendo paquetes de comunicación" swe "Fick ett fel vid skrivning till klienten" ukr "Отримано помилку запису комунікаційних пакетів" ER_NET_WRITE_INTERRUPTED 08S01 chi "写入通信包超时" cze "Zjištěn timeout při zápisu komunikačního packetu" dan "Timeout-fejl ved skrivning af kommunukations-pakker (communication packets)" eng "Got timeout writing communication packets" est "Kontrollaja ületamine andmepakettide kirjutamisel" fre "Timeout d'écriture des paquets envoyés" ger "Zeitüberschreitung beim Schreiben eines Kommunikationspakets" hindi "संचार पैकेट्स लिखने के दौरान टाइमआउट" hun "Idotullepes a kommunikacios csomagok irasa soran" ita "Rilevato un timeout inviando i pacchetti di comunicazione" jpn "パケットの送信でタイムアウトが発生しました。" kor "통신 패팃을 기록하는 중 timeout이 발생하였습니다." nla "Timeout bij het schrijven van communicatiepakketten" por "Obteve expiração de tempo ('timeout') na escrita de pacotes de comunicação" rum "Timeout obtinut scriind pachetele de comunicatie (communication packets)" rus "Получен таймаут в процессе передачи пакета через коммуникационный протокол " serbian "Vremenski limit za slanje mrežnih paketa je istekao" spa "Obtenido tiempo agotado (timeout) escribiendo paquetes de comunicación" swe "Fick 'timeout' vid skrivning till klienten" ukr "Отримано затримку запису комунікаційних пакетів" ER_TOO_LONG_STRING 42000 chi "结果字符串长于'max_allowed_packet'字节" cze "Výsledný řetězec je delší než 'max_allowed_packet'" dan "Strengen med resultater er større end 'max_allowed_packet'" eng "Result string is longer than 'max_allowed_packet' bytes" est "Tulemus on pikem kui lubatud 'max_allowed_packet' muutujaga" fre "La chaîne résultat est plus grande que 'max_allowed_packet'" ger "Ergebnis-String ist länger als 'max_allowed_packet' Bytes" hindi "रिजल्ट स्ट्रिंग 'max_allowed_packet' से लंबा है" hun "Ez eredmeny sztring nagyobb, mint a lehetseges maximum: 'max_allowed_packet'" ita "La stringa di risposta e` piu` lunga di 'max_allowed_packet'" jpn "結果の文字列が 'max_allowed_packet' よりも大きいです。" kor "결과 문자열이 설정된 max_allowed_packet 값보다 큽니다." nla "Resultaat string is langer dan 'max_allowed_packet'" por "'String' resultante é mais longa do que 'max_allowed_packet'" rum "Sirul rezultat este mai lung decit 'max_allowed_packet'" rus "Результирующая строка больше, чем 'max_allowed_packet'" serbian "Rezultujuči string je duži nego što to dozvoljava parametar servera 'max_allowed_packet'" spa "La cadena resultante es mayor de max_allowed_packet bytes" swe "Resultatsträngen är längre än max_allowed_packet" ukr "Строка результату довша ніж max_allowed_packet" ER_TABLE_CANT_HANDLE_BLOB 42000 chi "存储引擎%s不支持blob / text列" cze "Typ použité tabulky (%s) nepodporuje BLOB/TEXT sloupce" dan "Denne tabeltype (%s) understøtter ikke brug af BLOB og TEXT kolonner" eng "Storage engine %s doesn't support BLOB/TEXT columns" est "Valitud tabelitüüp (%s) ei toeta BLOB/TEXT tüüpi välju" fre "Ce type de table (%s) ne supporte pas les colonnes BLOB/TEXT" ger "Der verwendete Tabellentyp (%s) unterstützt keine BLOB- und TEXT-Felder" hindi "स्टोरेज इंजन %s BLOB/TEXT कॉलम्स को सपोर्ट नहीं करता" hun "A hasznalt tabla tipus (%s) nem tamogatja a BLOB/TEXT mezoket" ita "Il tipo di tabella usata (%s) non supporta colonne di tipo BLOB/TEXT" kor "스토리지 엔진 (%s)는 BLOB/TEXT 컬럼을 지원하지 않습니다." nla "Het gebruikte tabel type (%s) ondersteunt geen BLOB/TEXT kolommen" por "Tipo de tabela usado (%s) não permite colunas BLOB/TEXT" rum "Tipul de tabela folosit (%s) nu suporta coloane de tip BLOB/TEXT" rus "%s таблицы не поддерживают типы BLOB/TEXT" serbian "Iskorišteni tip tabele (%s) ne podržava kolone tipa 'BLOB' odnosno 'TEXT'" spa "El motor de almacenaje %s no soporta columnas de tipo BLOB/TEXT" swe "Den använda tabelltypen (%s) kan inte hantera BLOB/TEXT-kolumner" ukr "%s таблиці не підтримують BLOB/TEXT стовбці" ER_TABLE_CANT_HANDLE_AUTO_INCREMENT 42000 chi "存储引擎%s不支持auto_increment列" cze "Typ použité tabulky (%s) nepodporuje AUTO_INCREMENT sloupce" dan "Denne tabeltype understøtter (%s) ikke brug af AUTO_INCREMENT kolonner" eng "Storage engine %s doesn't support AUTO_INCREMENT columns" est "Valitud tabelitüüp (%s) ei toeta AUTO_INCREMENT tüüpi välju" fre "Ce type de table (%s) ne supporte pas les colonnes AUTO_INCREMENT" ger "Der verwendete Tabellentyp (%s) unterstützt keine AUTO_INCREMENT-Felder" hindi "स्टोरेज इंजन %s AUTO_INCREMENT कॉलम्स को सपोर्ट नहीं करता" hun "A hasznalt tabla tipus (%s) nem tamogatja az AUTO_INCREMENT tipusu mezoket" ita "Il tipo di tabella usata (%s) non supporta colonne di tipo AUTO_INCREMENT" kor "스토리지 엔진 (%s)는 AUTO_INCREMENT를 지원하지 않습니다." nla "Het gebruikte tabel type (%s) ondersteunt geen AUTO_INCREMENT kolommen" por "Tipo de tabela usado (%s) não permite colunas AUTO_INCREMENT" rum "Tipul de tabela folosit (%s) nu suporta coloane de tip AUTO_INCREMENT" rus "%s таблицы не поддерживают автоинкрементные столбцы" serbian "Iskorišteni tip tabele (%s) ne podržava kolone tipa 'AUTO_INCREMENT'" spa "El motor de almacenaje %s no soporta columnas AUTO_INCREMENT" swe "Den använda tabelltypen (%s) kan inte hantera AUTO_INCREMENT-kolumner" ukr "%s таблиці не підтримують AUTO_INCREMENT стовбці" ER_DELAYED_INSERT_TABLE_LOCKED chi "INSERT DELAYED 不能用在表 '%-.192s' 因为它被LOCK TABLES 锁定" cze "INSERT DELAYED není možno s tabulkou '%-.192s' použít, protože je zamčená pomocí LOCK TABLES" dan "INSERT DELAYED kan ikke bruges med tabellen '%-.192s', fordi tabellen er låst med LOCK TABLES" eng "INSERT DELAYED can't be used with table '%-.192s' because it is locked with LOCK TABLES" est "INSERT DELAYED ei saa kasutada tabeli '%-.192s' peal, kuna see on lukustatud LOCK TABLES käsuga" fre "INSERT DELAYED ne peut être utilisé avec la table '%-.192s', car elle est verrouée avec LOCK TABLES" ger "INSERT DELAYED kann für Tabelle '%-.192s' nicht verwendet werden, da sie mit LOCK TABLES gesperrt ist" greek "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" hun "Az INSERT DELAYED nem hasznalhato a '%-.192s' tablahoz, mert a tabla zarolt (LOCK TABLES)" ita "L'inserimento ritardato (INSERT DELAYED) non puo` essere usato con la tabella '%-.192s', perche` soggetta a lock da 'LOCK TABLES'" jpn "表 '%-.192s' はLOCK TABLESでロックされているため、INSERT DELAYEDを使用できません。" kor "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" nla "INSERT DELAYED kan niet worden gebruikt bij table '%-.192s', vanwege een 'lock met LOCK TABLES" nor "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" norwegian-ny "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" pol "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" por "INSERT DELAYED não pode ser usado com a tabela '%-.192s', porque ela está travada com LOCK TABLES" rum "INSERT DELAYED nu poate fi folosit cu tabela '%-.192s', deoarece este locked folosing LOCK TABLES" rus "Нельзя использовать INSERT DELAYED для таблицы '%-.192s', потому что она заблокирована с помощью LOCK TABLES" serbian "Komanda 'INSERT DELAYED' ne može biti iskorištena u tabeli '%-.192s', zbog toga što je zaključana komandom 'LOCK TABLES'" slo "INSERT DELAYED can't be used with table '%-.192s', because it is locked with LOCK TABLES" spa "INSERT DELAYED no puede ser usado con la tabla '%-.192s' porque esta bloqueada con LOCK TABLES" swe "INSERT DELAYED kan inte användas med tabell '%-.192s', emedan den är låst med LOCK TABLES" ukr "INSERT DELAYED не може бути використано з таблицею '%-.192s', тому що її заблоковано з LOCK TABLES" ER_WRONG_COLUMN_NAME 42000 chi "错误列名 '%-.100s'" cze "Nesprávné jméno sloupce '%-.100s'" dan "Forkert kolonnenavn '%-.100s'" eng "Incorrect column name '%-.100s'" est "Vigane tulba nimi '%-.100s'" fre "Nom de colonne '%-.100s' incorrect" ger "Falscher Spaltenname '%-.100s'" hindi "कॉलम नाम '%-.100s' गलत है" hun "Ervenytelen mezonev: '%-.100s'" ita "Nome colonna '%-.100s' non corretto" jpn "列名 '%-.100s' は不正です。" nla "Incorrecte kolom naam '%-.100s'" por "Nome de coluna '%-.100s' incorreto" rum "Nume increct de coloana '%-.100s'" rus "Неверное имя столбца '%-.100s'" serbian "Pogrešno ime kolone '%-.100s'" spa "Nombre Incorrecto de columna '%-.100s'" swe "Felaktigt kolumnnamn '%-.100s'" ukr "Невірне ім'я стовбця '%-.100s'" ER_WRONG_KEY_COLUMN 42000 chi "存储引擎 %s 不能给 %`s 列建索引" eng "The storage engine %s can't index column %`s" ger "Die Speicher-Engine %s kann die Spalte %`s nicht indizieren" hindi "स्टोरेज इंजन %s, कॉलम %`s को इंडेक्स नहीं कर सकता" rus "Обработчик таблиц %s не может проиндексировать столбец %`s" spa "El motor de almacenaje %s no puede indizar la columna %`s" ukr "Вказівник таблиц %s не може індексувати стовбець %`s" ER_WRONG_MRG_TABLE chi "无法打开定义不同或非 MyISAM 类型或不存在的表" cze "Všechny tabulky v MERGE tabulce nejsou definovány stejně" dan "Tabellerne i MERGE er ikke defineret ens" eng "Unable to open underlying table which is differently defined or of non-MyISAM type or doesn't exist" est "Kõik tabelid MERGE tabeli määratluses ei ole identsed" fre "Toutes les tables de la table de type MERGE n'ont pas la même définition" ger "Nicht alle Tabellen in der MERGE-Tabelle sind gleich definiert" hun "A MERGE tablaban talalhato tablak definicioja nem azonos" ita "Non tutte le tabelle nella tabella di MERGE sono definite in maniera identica" jpn "MERGE表の構成表がオープンできません。列定義が異なるか、MyISAM表ではないか、存在しません。" kor "All tables in the MERGE table are not defined identically" nla "Niet alle tabellen in de MERGE tabel hebben identieke gedefinities" nor "All tables in the MERGE table are not defined identically" norwegian-ny "All tables in the MERGE table are not defined identically" pol "All tables in the MERGE table are not defined identically" por "Todas as tabelas contidas na tabela fundida (MERGE) não estão definidas identicamente" rum "Toate tabelele din tabela MERGE nu sint definite identic" rus "Не все таблицы в MERGE определены одинаково" serbian "Tabele iskorištene u 'MERGE' tabeli nisu definisane na isti način" slo "All tables in the MERGE table are not defined identically" spa "Incapaz de abrir la tabla subyacente por estar definida de forma diferente o por no ser del tipo no-MyISAM o por no existir" swe "Tabellerna i MERGE-tabellen är inte identiskt definierade" ukr "Таблиці у MERGE TABLE мають різну структуру" ER_DUP_UNIQUE 23000 chi "因为表'%-.192s' 唯一约束,无法写入" cze "Kvůli unique constraintu nemozu zapsat do tabulky '%-.192s'" dan "Kan ikke skrive til tabellen '%-.192s' fordi det vil bryde CONSTRAINT regler" eng "Can't write, because of unique constraint, to table '%-.192s'" est "Ei suuda kirjutada tabelisse '%-.192s', kuna see rikub ühesuse kitsendust" fre "Écriture impossible à cause d'un index UNIQUE sur la table '%-.192s'" ger "Schreiben in Tabelle '%-.192s' nicht möglich wegen einer Eindeutigkeitsbeschränkung (unique constraint)" hun "A '%-.192s' nem irhato, az egyedi mezok miatt" ita "Impossibile scrivere nella tabella '%-.192s' per limitazione di unicita`" jpn "一意性制約違反のため、表 '%-.192s' に書き込めません。" nla "Kan niet opslaan naar table '%-.192s' vanwege 'unique' beperking" por "Não pode gravar, devido à restrição UNIQUE, na tabela '%-.192s'" rum "Nu pot scrie pe hard-drive, din cauza constraintului unic (unique constraint) pentru tabela '%-.192s'" rus "Невозможно записать в таблицу '%-.192s' из-за ограничений уникального ключа" serbian "Zbog provere jedinstvenosti ne mogu da upišem podatke u tabelu '%-.192s'" spa "No puedo grabar, debido a restricción única, en la tabla '%-.192s'" swe "Kan inte skriva till tabell '%-.192s'; UNIQUE-test" ukr "Не можу записати до таблиці '%-.192s', з причини вимог унікальності" ER_BLOB_KEY_WITHOUT_LENGTH 42000 chi "BLOB/TEXT 列 '%-.192s' 在没有索引长度的索引规范中使用" cze "BLOB sloupec '%-.192s' je použit ve specifikaci klíče bez délky" dan "BLOB kolonnen '%-.192s' brugt i nøglespecifikation uden nøglelængde" eng "BLOB/TEXT column '%-.192s' used in key specification without a key length" est "BLOB-tüüpi tulp '%-.192s' on kasutusel võtmes ilma pikkust määratlemata" fre "La colonne '%-.192s' de type BLOB est utilisée dans une définition d'index sans longueur d'index" ger "BLOB- oder TEXT-Spalte '%-.192s' wird in der Schlüsseldefinition ohne Schlüssellängenangabe verwendet" greek "BLOB column '%-.192s' used in key specification without a key length" hun "BLOB mezo '%-.192s' hasznalt a mezo specifikacioban, a mezohossz megadasa nelkul" ita "La colonna '%-.192s' di tipo BLOB e` usata in una chiave senza specificarne la lunghezza" jpn "BLOB列 '%-.192s' をキーに使用するには長さ指定が必要です。" kor "BLOB column '%-.192s' used in key specification without a key length" nla "BLOB kolom '%-.192s' gebruikt in zoeksleutel specificatie zonder zoeksleutel lengte" nor "BLOB column '%-.192s' used in key specification without a key length" norwegian-ny "BLOB column '%-.192s' used in key specification without a key length" pol "BLOB column '%-.192s' used in key specification without a key length" por "Coluna BLOB '%-.192s' usada na especificação de chave sem o comprimento da chave" rum "Coloana BLOB '%-.192s' este folosita in specificarea unei chei fara ca o lungime de cheie sa fie folosita" rus "Столбец типа BLOB '%-.192s' был указан в определении ключа без указания длины ключа" serbian "BLOB kolona '%-.192s' je upotrebljena u specifikaciji ključa bez navođenja dužine ključa" slo "BLOB column '%-.192s' used in key specification without a key length" spa "Columna BLOB/TEXT '%-.192s', usada en especificación de clave, sin tamaño" swe "Du har inte angett någon nyckellängd för BLOB '%-.192s'" ukr "Стовбець BLOB '%-.192s' використано у визначенні ключа без вказання довжини ключа" ER_PRIMARY_CANT_HAVE_NULL 42000 chi "PRIMARY KEY 的所有部分都不能为NULL;如果您需要在键中使用 NULL,请改用 UNIQUE" cze "Všechny části primárního klíče musejí být NOT NULL; pokud potřebujete NULL, použijte UNIQUE" dan "Alle dele af en PRIMARY KEY skal være NOT NULL; Hvis du skal bruge NULL i nøglen, brug UNIQUE istedet" eng "All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead" est "Kõik PRIMARY KEY peavad olema määratletud NOT NULL piiranguga; vajadusel kasuta UNIQUE tüüpi võtit" fre "Toutes les parties d'un index PRIMARY KEY doivent être NOT NULL; Si vous avez besoin d'un NULL dans l'index, utilisez un index UNIQUE" ger "Alle Teile eines PRIMARY KEY müssen als NOT NULL definiert sein. Wenn NULL in einem Schlüssel benötigt wird, muss ein UNIQUE-Schlüssel verwendet werden" hindi "PRIMARY KEY के सभी भागों को NOT NULL होना चाहिए; यदि आपको एक KEY में NULL की जरूरत है, तो UNIQUE का उपयोग करें" hun "Az elsodleges kulcs teljes egeszeben csak NOT NULL tipusu lehet; Ha NULL mezot szeretne a kulcskent, hasznalja inkabb a UNIQUE-ot" ita "Tutte le parti di una chiave primaria devono essere dichiarate NOT NULL; se necessitano valori NULL nelle chiavi utilizzare UNIQUE" jpn "PRIMARY KEYの列は全てNOT NULLでなければいけません。UNIQUE索引であればNULLを含むことが可能です。" nla "Alle delen van een PRIMARY KEY moeten NOT NULL zijn; Indien u NULL in een zoeksleutel nodig heeft kunt u UNIQUE gebruiken" por "Todas as partes de uma chave primária devem ser não-nulas. Se você precisou usar um valor nulo (NULL) em uma chave, use a cláusula UNIQUE em seu lugar" rum "Toate partile unei chei primare (PRIMARY KEY) trebuie sa fie NOT NULL; Daca aveti nevoie de NULL in vreo cheie, folositi UNIQUE in schimb" rus "Все части первичного ключа (PRIMARY KEY) должны быть определены как NOT NULL; Если вам нужна поддержка величин NULL в ключе, воспользуйтесь индексом UNIQUE" serbian "Svi delovi primarnog ključa moraju biti različiti od NULL; Ako Vam ipak treba NULL vrednost u ključu, upotrebite 'UNIQUE'" spa "Todas las partes de una PRIMARY KEY deben de ser NOT NULL; si necesita NULL en una clave, use UNIQUE en su lugar" swe "Alla delar av en PRIMARY KEY måste vara NOT NULL; Om du vill ha en nyckel med NULL, använd UNIQUE istället" ukr "Усі частини PRIMARY KEY повинні бути NOT NULL; Якщо ви потребуєте NULL у ключі, скористайтеся UNIQUE" ER_TOO_MANY_ROWS 42000 chi "结果多于一行" cze "Výsledek obsahuje více než jeden řádek" dan "Resultatet bestod af mere end een række" eng "Result consisted of more than one row" est "Tulemis oli rohkem kui üks kirje" fre "Le résultat contient plus d'un enregistrement" ger "Ergebnis besteht aus mehr als einer Zeile" hindi "परिणाम एक से अधिक पंक्ति का है" hun "Az eredmeny tobb, mint egy sort tartalmaz" ita "Il risultato consiste di piu` di una riga" jpn "結果が2行以上です。" nla "Resultaat bevatte meer dan een rij" por "O resultado consistiu em mais do que uma linha" rum "Resultatul constista din mai multe linii" rus "В результате возвращена более чем одна строка" serbian "Rezultat je sačinjen od više slogova" spa "Resultado compuesto de más de una fila" swe "Resultet bestod av mera än en rad" ukr "Результат знаходиться у більше ніж одній строці" ER_REQUIRES_PRIMARY_KEY 42000 chi "此表类型需要主索引" cze "Tento typ tabulky vyžaduje primární klíč" dan "Denne tabeltype kræver en primærnøgle" eng "This table type requires a primary key" est "Antud tabelitüüp nõuab primaarset võtit" fre "Ce type de table nécessite une clé primaire (PRIMARY KEY)" ger "Dieser Tabellentyp benötigt einen Primärschlüssel (PRIMARY KEY)" hindi "इस प्रकार के टेबल को एक PRIMARY KEY की आवश्यकता है" hun "Az adott tablatipushoz elsodleges kulcs hasznalata kotelezo" ita "Questo tipo di tabella richiede una chiave primaria" jpn "使用のストレージエンジンでは、PRIMARY KEYが必要です。" nla "Dit tabel type heeft een primaire zoeksleutel nodig" por "Este tipo de tabela requer uma chave primária" rum "Aceast tip de tabela are nevoie de o cheie primara" rus "Этот тип таблицы требует определения первичного ключа" serbian "Ovaj tip tabele zahteva da imate definisan primarni ključ" spa "Este tipo de tabla necesita de una clave primaria" swe "Denna tabelltyp kräver en PRIMARY KEY" ukr "Цей тип таблиці потребує первинного ключа" ER_NO_RAID_COMPILED chi "这个版本的 MariaDB 编译时不支持 RAID" cze "Tato verze MariaDB není zkompilována s podporou RAID" dan "Denne udgave af MariaDB er ikke oversat med understøttelse af RAID" eng "This version of MariaDB is not compiled with RAID support" est "Antud MariaDB versioon on kompileeritud ilma RAID toeta" fre "Cette version de MariaDB n'est pas compilée avec le support RAID" ger "Diese MariaDB-Version ist nicht mit RAID-Unterstützung kompiliert" hindi "MariaDB का यह संस्करण RAID सपोर्ट के साथ कॉम्पाईल्ड नहीं है" hun "Ezen leforditott MariaDB verzio nem tartalmaz RAID support-ot" ita "Questa versione di MariaDB non e` compilata con il supporto RAID" jpn "このバージョンのMariaDBはRAIDサポートを含めてコンパイルされていません。" nla "Deze versie van MariaDB is niet gecompileerd met RAID ondersteuning" por "Esta versão do MariaDB não foi compilada com suporte a RAID" rum "Aceasta versiune de MariaDB, nu a fost compilata cu suport pentru RAID" rus "Эта версия MariaDB скомпилирована без поддержки RAID" serbian "Ova verzija MariaDB servera nije kompajlirana sa podrškom za RAID uređaje" spa "Esta versión de MariaDB no ha sido compilada con soporte para RAID" swe "Denna version av MariaDB är inte kompilerad med RAID" ukr "Ця версія MariaDB не зкомпільована з підтримкою RAID" ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE chi "您正在使用安全更新模式,同时您尝试更新时没有使用含有 KEY 列的 WHERE 语句" cze "Update tabulky bez WHERE s klíčem není v módu bezpečných update dovoleno" dan "Du bruger sikker opdaterings modus ('safe update mode') og du forsøgte at opdatere en tabel uden en WHERE klausul, der gør brug af et KEY felt" eng "You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column" est "Katse muuta tabelit turvalises rezhiimis ilma WHERE klauslita" fre "Vous êtes en mode 'safe update' et vous essayez de faire un UPDATE sans clause WHERE utilisant un index" ger "MariaDB läuft im sicheren Aktualisierungsmodus (safe update mode). Sie haben versucht, eine Tabelle zu aktualisieren, ohne in der WHERE-Klausel ein KEY-Feld anzugeben" hun "On a biztonsagos update modot hasznalja, es WHERE that uses a KEY column" ita "In modalita` 'safe update' si e` cercato di aggiornare una tabella senza clausola WHERE su una chiave" jpn "'safe update mode'で、索引を利用するWHERE句の無い更新処理を実行しようとしました。" nla "U gebruikt 'safe update mode' en u probeerde een tabel te updaten zonder een WHERE met een KEY kolom" por "Você está usando modo de atualização seguro e tentou atualizar uma tabela sem uma cláusula WHERE que use uma coluna chave" rus "Вы работаете в режиме безопасных обновлений (safe update mode) и попробовали изменить таблицу без использования ключевого столбца в части WHERE" serbian "Vi koristite safe update mod servera, a probali ste da promenite podatke bez 'WHERE' komande koja koristi kolonu ključa" spa "Está usando modo de actualización segura y ha intentado actualizar una tabla sin un WHERE que use una columna KEY" swe "Du använder 'säker uppdateringsmod' och försökte uppdatera en tabell utan en WHERE-sats som använder sig av en nyckel" ukr "Ви у режимі безпечного оновлення та намагаєтесь оновити таблицю без оператора WHERE, що використовує KEY стовбець" ER_KEY_DOES_NOT_EXISTS 42000 S1009 chi "索引 '%-.192s' 在表 '%-.192s' 里不存在" cze "Klíč '%-.192s' v tabulce '%-.192s' neexistuje" dan "Nøglen '%-.192s' eksisterer ikke i tabellen '%-.192s'" eng "Key '%-.192s' doesn't exist in table '%-.192s'" est "Võti '%-.192s' ei eksisteeri tabelis '%-.192s'" fre "L'index '%-.192s' n'existe pas sur la table '%-.192s'" ger "Schlüssel '%-.192s' existiert in der Tabelle '%-.192s' nicht" hindi "KEY '%-.192s', टेबल '%-.192s' में मौजूद नहीं है" hun "A '%-.192s' kulcs nem letezik a '%-.192s' tablaban" ita "La chiave '%-.192s' non esiste nella tabella '%-.192s'" jpn "索引 '%-.192s' は表 '%-.192s' には存在しません。" nla "Zoeksleutel '%-.192s' bestaat niet in tabel '%-.192s'" por "Chave '%-.192s' não existe na tabela '%-.192s'" rus "Ключ '%-.192s' не существует в таблице '%-.192s'" serbian "Ključ '%-.192s' ne postoji u tabeli '%-.192s'" spa "La clave '%-.192s' no existe en la tabla '%-.192s'" swe "Nyckel '%-.192s' finns inte in tabell '%-.192s'" ukr "Ключ '%-.192s' не існує в таблиці '%-.192s'" ER_CHECK_NO_SUCH_TABLE 42000 chi "无法打开表" cze "Nemohu otevřít tabulku" dan "Kan ikke åbne tabellen" eng "Can't open table" est "Ei suuda avada tabelit" fre "Impossible d'ouvrir la table" ger "Kann Tabelle nicht öffnen" hindi "टेबल नहीं खुल सकता है" hun "Nem tudom megnyitni a tablat" ita "Impossibile aprire la tabella" jpn "表をオープンできません。" nla "Kan tabel niet openen" por "Não pode abrir a tabela" rus "Невозможно открыть таблицу" serbian "Ne mogu da otvorim tabelu" spa "No puedo abrir tabla" swe "Kan inte öppna tabellen" ukr "Не можу відкрити таблицю" ER_CHECK_NOT_IMPLEMENTED 42000 chi "该表的存储引擎不支持%s" cze "Handler tabulky nepodporuje %s" dan "Denne tabeltype understøtter ikke %s" eng "The storage engine for the table doesn't support %s" est "Antud tabelitüüp ei toeta %s käske" fre "Ce type de table ne supporte pas les %s" ger "Die Speicher-Engine für diese Tabelle unterstützt kein %s" greek "The handler for the table doesn't support %s" hindi "इस टेबल का स्टोरेज इंजन '%s' को सपोर्ट नहीं करता" hun "A tabla kezeloje (handler) nem tamogatja az %s" ita "Il gestore per la tabella non supporta il %s" jpn "この表のストレージエンジンは '%s' を利用できません。" kor "The handler for the table doesn't support %s" nla "De 'handler' voor de tabel ondersteund geen %s" nor "The handler for the table doesn't support %s" norwegian-ny "The handler for the table doesn't support %s" pol "The handler for the table doesn't support %s" por "O manipulador de tabela não suporta %s" rum "The handler for the table doesn't support %s" rus "Обработчик таблицы не поддерживает этого: %s" serbian "Handler za ovu tabelu ne dozvoljava %s komande" slo "The handler for the table doesn't support %s" spa "El motor de almacenaje para la tabla no soporta %s" swe "Tabellhanteraren för denna tabell kan inte göra %s" ukr "Вказівник таблиці не підтримуе %s" ER_CANT_DO_THIS_DURING_AN_TRANSACTION 25000 chi "不允许在事务中执行此命令" cze "Provedení tohoto příkazu není v transakci dovoleno" dan "Du må ikke bruge denne kommando i en transaktion" eng "You are not allowed to execute this command in a transaction" est "Seda käsku ei saa kasutada transaktsiooni sees" fre "Vous n'êtes pas autorisé à exécute cette commande dans une transaction" ger "Sie dürfen diesen Befehl nicht in einer Transaktion ausführen" hun "Az On szamara nem engedelyezett a parancs vegrehajtasa a tranzakcioban" ita "Non puoi eseguire questo comando in una transazione" jpn "このコマンドはトランザクション内で実行できません。" nla "Het is u niet toegestaan dit commando uit te voeren binnen een transactie" por "Não lhe é permitido executar este comando em uma transação" rus "Вам не разрешено выполнять эту команду в транзакции" serbian "Nije Vam dozvoljeno da izvršite ovu komandu u transakciji" spa "No tiene el permiso para ejecutar este comando en una transacción" swe "Du får inte utföra detta kommando i en transaktion" ukr "Вам не дозволено виконувати цю команду в транзакції" ER_ERROR_DURING_COMMIT chi "COMMIT时发生错误 %M " cze "Chyba %M při COMMIT" dan "Modtog fejl %M mens kommandoen COMMIT blev udført" eng "Got error %M during COMMIT" est "Viga %M käsu COMMIT täitmisel" fre "Erreur %M lors du COMMIT" ger "Fehler %M beim COMMIT" hindi "COMMIT के दौरान %M त्रुटि हुई" hun "%M hiba a COMMIT vegrehajtasa soran" ita "Rilevato l'errore %M durante il COMMIT" jpn "COMMIT中にエラー %M が発生しました。" nla "Kreeg fout %M tijdens COMMIT" por "Obteve erro %M durante COMMIT" rus "Получена ошибка %M в процессе COMMIT" serbian "Greška %M za vreme izvršavanja komande 'COMMIT'" spa "Obtenido error %M durante COMMIT" swe "Fick fel %M vid COMMIT" ukr "Отримано помилку %M під час COMMIT" ER_ERROR_DURING_ROLLBACK chi "回滚时出错%M" cze "Chyba %M při ROLLBACK" dan "Modtog fejl %M mens kommandoen ROLLBACK blev udført" eng "Got error %M during ROLLBACK" est "Viga %M käsu ROLLBACK täitmisel" fre "Erreur %M lors du ROLLBACK" ger "Fehler %M beim ROLLBACK" hindi "ROLLBACK के दौरान %M त्रुटि हुई" hun "%M hiba a ROLLBACK vegrehajtasa soran" ita "Rilevato l'errore %M durante il ROLLBACK" jpn "ROLLBACK中にエラー %M が発生しました。" nla "Kreeg fout %M tijdens ROLLBACK" por "Obteve erro %M durante ROLLBACK" rus "Получена ошибка %M в процессе ROLLBACK" serbian "Greška %M za vreme izvršavanja komande 'ROLLBACK'" spa "Obtenido error %M durante ROLLBACK" swe "Fick fel %M vid ROLLBACK" ukr "Отримано помилку %M під час ROLLBACK" ER_ERROR_DURING_FLUSH_LOGS chi "flush_logs时出错%M" cze "Chyba %M při FLUSH_LOGS" dan "Modtog fejl %M mens kommandoen FLUSH_LOGS blev udført" eng "Got error %M during FLUSH_LOGS" est "Viga %M käsu FLUSH_LOGS täitmisel" fre "Erreur %M lors du FLUSH_LOGS" ger "Fehler %M bei FLUSH_LOGS" hindi "FLUSH_LOGS के दौरान %M त्रुटि हुई" hun "%M hiba a FLUSH_LOGS vegrehajtasa soran" ita "Rilevato l'errore %M durante il FLUSH_LOGS" jpn "FLUSH_LOGS中にエラー %M が発生しました。" nla "Kreeg fout %M tijdens FLUSH_LOGS" por "Obteve erro %M durante FLUSH_LOGS" rus "Получена ошибка %M в процессе FLUSH_LOGS" serbian "Greška %M za vreme izvršavanja komande 'FLUSH_LOGS'" spa "Obtenido error %M durante FLUSH_LOGS" swe "Fick fel %M vid FLUSH_LOGS" ukr "Отримано помилку %M під час FLUSH_LOGS" ER_ERROR_DURING_CHECKPOINT chi "CHECKPOINT时出错%M " cze "Chyba %M při CHECKPOINT" dan "Modtog fejl %M mens kommandoen CHECKPOINT blev udført" eng "Got error %M during CHECKPOINT" est "Viga %M käsu CHECKPOINT täitmisel" fre "Erreur %M lors du CHECKPOINT" ger "Fehler %M bei CHECKPOINT" hindi "CHECKPOINT के दौरान %M त्रुटि हुई" hun "%M hiba a CHECKPOINT vegrehajtasa soran" ita "Rilevato l'errore %M durante il CHECKPOINT" jpn "CHECKPOINT中にエラー %M が発生しました。" nla "Kreeg fout %M tijdens CHECKPOINT" por "Obteve erro %M durante CHECKPOINT" rus "Получена ошибка %M в процессе CHECKPOINT" serbian "Greška %M za vreme izvršavanja komande 'CHECKPOINT'" spa "Obtenido error %M durante CHECKPOINT" swe "Fick fel %M vid CHECKPOINT" ukr "Отримано помилку %M під час CHECKPOINT" ER_NEW_ABORTING_CONNECTION 08S01 chi "终止的连接 %lld 到数据库: '%-.192s' 用户: '%-.48s' 主机: '%-.64s'%-.64s (%-.64s)" cze "Spojení %lld do databáze: '%-.192s' uživatel: '%-.48s' stroj: '%-.64s'%-.64s (%-.64s) bylo přerušeno" dan "Afbrød forbindelsen %lld til databasen '%-.192s' bruger: '%-.48s' vært: '%-.64s'%-.64s (%-.64s)" eng "Aborted connection %lld to db: '%-.192s' user: '%-.48s' host: '%-.64s'%-.64s (%-.64s)" est "Ühendus katkestatud %lld andmebaas: '%-.192s' kasutaja: '%-.48s' masin: '%-.64s'%-.64s (%-.64s)" fre "Connection %lld avortée vers la bd: '%-.192s' utilisateur: '%-.48s' hôte: '%-.64s'%-.64s (%-.64s)" ger "Abbruch der Verbindung %lld zur Datenbank '%-.192s'. Benutzer: '%-.48s', Host: '%-.64s'%-.64s (%-.64s)" ita "Interrotta la connessione %lld al db: ''%-.192s' utente: '%-.48s' host: '%-.64s'%-.64s (%-.64s)" jpn "接続 %lld が中断されました。データベース: '%-.192s' ユーザー: '%-.48s' ホスト: '%-.64s'%-.64s (%-.64s)" nla "Afgebroken verbinding %lld naar db: '%-.192s' gebruiker: '%-.48s' host: '%-.64s'%-.64s (%-.64s)" por "Conexão %lld abortada para banco de dados '%-.192s' - usuário '%-.48s' - 'host' '%-.64s'%-.64s ('%-.64s')" rus "Прервано соединение %lld к базе данных '%-.192s' пользователя '%-.48s' с хоста '%-.64s'%-.64s (%-.64s)" serbian "Prekinuta konekcija broj %lld ka bazi: '%-.192s' korisnik je bio: '%-.48s' a host: '%-.64s'%-.64s (%-.64s)" spa "Abortada conexión %lld a la base de datos: '%-.192s' usuario: '%-.48s' equipo: '%-.64s'%-.64s (%-.64s)" swe "Avbröt länken för tråd %lld till db '%-.192s', användare '%-.48s', host '%-.64s'%-.64s (%-.64s)" ukr "Перервано з'єднання %lld до бази данних: '%-.192s' користувач: '%-.48s' хост: '%-.64s'%-.64s (%-.64s)" ER_UNUSED_10 eng "You should never see it" spa "Nunca lo debería vd de ver" ER_FLUSH_MASTER_BINLOG_CLOSED chi "Binlog 已关闭, 不能 RESET MASTER" eng "Binlog closed, cannot RESET MASTER" ger "Binlog geschlossen. Kann RESET MASTER nicht ausführen" jpn "バイナリログがクローズされています。RESET MASTER を実行できません。" por "Binlog fechado. Não pode fazer RESET MASTER" rus "Двоичный журнал обновления закрыт, невозможно выполнить RESET MASTER" serbian "Binarni log file zatvoren, ne mogu da izvršim komandu 'RESET MASTER'" spa "Binlog cerrado, no puedo hacer RESET MASTER" ukr "Реплікаційний лог закрито, не можу виконати RESET MASTER" ER_INDEX_REBUILD chi "重建 dumped table '%-.192s' 的索引失败" cze "Přebudování indexu dumpnuté tabulky '%-.192s' nebylo úspěšné" dan "Kunne ikke genopbygge indekset for den dumpede tabel '%-.192s'" eng "Failed rebuilding the index of dumped table '%-.192s'" fre "La reconstruction de l'index de la table copiée '%-.192s' a échoué" ger "Neuerstellung des Index der Dump-Tabelle '%-.192s' fehlgeschlagen" greek "Failed rebuilding the index of dumped table '%-.192s'" hun "Failed rebuilding the index of dumped table '%-.192s'" ita "Fallita la ricostruzione dell'indice della tabella copiata '%-.192s'" jpn "ダンプ表 '%-.192s' の索引再構築に失敗しました。" nla "Gefaald tijdens heropbouw index van gedumpte tabel '%-.192s'" por "Falhou na reconstrução do índice da tabela 'dumped' '%-.192s'" rus "Ошибка перестройки индекса сохраненной таблицы '%-.192s'" serbian "Izgradnja indeksa dump-ovane tabele '%-.192s' nije uspela" spa "Fallo reconstruyendo el índice del volcado de la tabla '%-.192s'" ukr "Невдале відновлення індекса переданої таблиці '%-.192s'" ER_MASTER chi "Master错误:'%-.64s'" cze "Chyba masteru: '%-.64s'" dan "Fejl fra master: '%-.64s'" eng "Error from master: '%-.64s'" fre "Erreur reçue du maître: '%-.64s'" ger "Fehler vom Master: '%-.64s'" ita "Errore dal master: '%-.64s" jpn "マスターでエラーが発生: '%-.64s'" nla "Fout van master: '%-.64s'" por "Erro no 'master' '%-.64s'" rus "Ошибка от головного сервера: '%-.64s'" serbian "Greška iz glavnog servera '%-.64s' u klasteru" spa "Error del maestro (master): '%-.64s'" swe "Fel från master: '%-.64s'" ukr "Помилка від головного: '%-.64s'" ER_MASTER_NET_READ 08S01 chi "读master时有网络错误" cze "Síťová chyba při čtení z masteru" dan "Netværksfejl ved læsning fra master" eng "Net error reading from master" fre "Erreur de lecture réseau reçue du maître" ger "Netzfehler beim Lesen vom Master" ita "Errore di rete durante la ricezione dal master" jpn "マスターからのデータ受信中のネットワークエラー" nla "Net fout tijdens lezen van master" por "Erro de rede lendo do 'master'" rus "Возникла ошибка чтения в процессе коммуникации с головным сервером" serbian "Greška u primanju mrežnih paketa sa glavnog servera u klasteru" spa "Error de red leyendo del maestro (master)" swe "Fick nätverksfel vid läsning från master" ukr "Мережева помилка читання від головного" ER_MASTER_NET_WRITE 08S01 chi "写master时有网络错误" cze "Síťová chyba při zápisu na master" dan "Netværksfejl ved skrivning til master" eng "Net error writing to master" fre "Erreur d'écriture réseau reçue du maître" ger "Netzfehler beim Schreiben zum Master" ita "Errore di rete durante l'invio al master" jpn "マスターへのデータ送信中のネットワークエラー" nla "Net fout tijdens schrijven naar master" por "Erro de rede gravando no 'master'" rus "Возникла ошибка записи в процессе коммуникации с головным сервером" serbian "Greška u slanju mrežnih paketa na glavni server u klasteru" spa "Error de red grabando en maestro (master)" swe "Fick nätverksfel vid skrivning till master" ukr "Мережева помилка запису до головного" ER_FT_MATCHING_KEY_NOT_FOUND chi "找不到与列列表匹配的全文索引" cze "Žádný sloupec nemá vytvořen fulltextový index" dan "Kan ikke finde en FULLTEXT nøgle som svarer til kolonne listen" eng "Can't find FULLTEXT index matching the column list" est "Ei suutnud leida FULLTEXT indeksit, mis kattuks kasutatud tulpadega" fre "Impossible de trouver un index FULLTEXT correspondant à cette liste de colonnes" ger "Kann keinen FULLTEXT-Index finden, der der Feldliste entspricht" ita "Impossibile trovare un indice FULLTEXT che corrisponda all'elenco delle colonne" jpn "列リストに対応する全文索引(FULLTEXT)が見つかりません。" nla "Kan geen FULLTEXT index vinden passend bij de kolom lijst" por "Não pode encontrar um índice para o texto todo que combine com a lista de colunas" rus "Невозможно отыскать полнотекстовый (FULLTEXT) индекс, соответствующий списку столбцов" serbian "Ne mogu da pronađem 'FULLTEXT' indeks koli odgovara listi kolona" spa "No puedo encontrar índice FULLTEXT coincidente con la lista de columnas" swe "Hittar inte ett FULLTEXT-index i kolumnlistan" ukr "Не можу знайти FULLTEXT індекс, що відповідає переліку стовбців" ER_LOCK_OR_ACTIVE_TRANSACTION chi "无法执行给定的命令,因为表上有锁或有活动事务" cze "Nemohu provést zadaný příkaz, protože existují aktivní zamčené tabulky nebo aktivní transakce" dan "Kan ikke udføre den givne kommando fordi der findes aktive, låste tabeller eller fordi der udføres en transaktion" eng "Can't execute the given command because you have active locked tables or an active transaction" est "Ei suuda täita antud käsku kuna on aktiivseid lukke või käimasolev transaktsioon" fre "Impossible d'exécuter la commande car vous avez des tables verrouillées ou une transaction active" ger "Kann den angegebenen Befehl wegen einer aktiven Tabellensperre oder einer aktiven Transaktion nicht ausführen" ita "Impossibile eseguire il comando richiesto: tabelle sotto lock o transazione in atto" jpn "すでにアクティブな表ロックやトランザクションがあるため、コマンドを実行できません。" nla "Kan het gegeven commando niet uitvoeren, want u heeft actieve gelockte tabellen of een actieve transactie" por "Não pode executar o comando dado porque você tem tabelas ativas travadas ou uma transação ativa" rus "Невозможно выполнить указанную команду, поскольку у вас присутствуют активно заблокированные таблица или открытая транзакция" serbian "Ne mogu da izvršim datu komandu zbog toga što su tabele zaključane ili je transakcija u toku" spa "No puedo ejecutar el comando dado porque tiene tablas activas bloqueadas o una transacción activa" swe "Kan inte utföra kommandot emedan du har en låst tabell eller an aktiv transaktion" ukr "Не можу виконати подану команду тому, що таблиця заблокована або виконується транзакція" ER_UNKNOWN_SYSTEM_VARIABLE chi "未知系统变量 '%-.*s'" cze "Neznámá systémová proměnná '%-.*s'" dan "Ukendt systemvariabel '%-.*s'" eng "Unknown system variable '%-.*s'" est "Tundmatu süsteemne muutuja '%-.*s'" fre "Variable système '%-.*s' inconnue" ger "Unbekannte Systemvariable '%-.*s'" hindi "अज्ञात सिस्टम वैरिएबल '%-.*s'" ita "Variabile di sistema '%-.*s' sconosciuta" jpn "'%-.*s' は不明なシステム変数です。" nla "Onbekende systeem variabele '%-.*s'" por "Variável de sistema '%-.*s' desconhecida" rus "Неизвестная системная переменная '%-.*s'" serbian "Nepoznata sistemska promenljiva '%-.*s'" spa "Variable de sistema '%-.*s' desconocida" swe "Okänd systemvariabel: '%-.*s'" ukr "Невідома системна змінна '%-.*s'" ER_CRASHED_ON_USAGE chi "表'%-.192s'标记为崩溃,应该修复" cze "Tabulka '%-.192s' je označena jako porušená a měla by být opravena" dan "Tabellen '%-.192s' er markeret med fejl og bør repareres" eng "Table '%-.192s' is marked as crashed and should be repaired" est "Tabel '%-.192s' on märgitud vigaseks ja tuleb parandada" fre "La table '%-.192s' est marquée 'crashed' et devrait être réparée" ger "Tabelle '%-.192s' ist als defekt markiert und sollte repariert werden" ita "La tabella '%-.192s' e` segnalata come corrotta e deve essere riparata" jpn "表 '%-.192s' は壊れています。修復が必要です。" nla "Tabel '%-.192s' staat als gecrashed gemarkeerd en dient te worden gerepareerd" por "Tabela '%-.192s' está marcada como danificada e deve ser reparada" rus "Таблица '%-.192s' помечена как испорченная и должна пройти проверку и ремонт" serbian "Tabela '%-.192s' je markirana kao oštećena i trebala bi biti popravljena" spa "La tabla '%-.192s' está marcada como estropeada y debe de ser reparada" swe "Tabell '%-.192s' är trasig och bör repareras med REPAIR TABLE" ukr "Таблицю '%-.192s' марковано як зіпсовану та її потрібно відновити" ER_CRASHED_ON_REPAIR chi "表 '%-.192s' 被标记为崩溃,上一次的修复(自动?)失败" cze "Tabulka '%-.192s' je označena jako porušená a poslední (automatická?) oprava se nezdařila" dan "Tabellen '%-.192s' er markeret med fejl og sidste (automatiske?) REPAIR fejlede" eng "Table '%-.192s' is marked as crashed and last (automatic?) repair failed" est "Tabel '%-.192s' on märgitud vigaseks ja viimane (automaatne?) parandus ebaõnnestus" fre "La table '%-.192s' est marquée 'crashed' et le dernier 'repair' a échoué" ger "Tabelle '%-.192s' ist als defekt markiert und der letzte (automatische?) Reparaturversuch schlug fehl" ita "La tabella '%-.192s' e` segnalata come corrotta e l'ultima ricostruzione (automatica?) e` fallita" jpn "表 '%-.192s' は壊れています。修復(自動?)にも失敗しています。" nla "Tabel '%-.192s' staat als gecrashed gemarkeerd en de laatste (automatische?) reparatie poging mislukte" por "Tabela '%-.192s' está marcada como danificada e a última reparação (automática?) falhou" rus "Таблица '%-.192s' помечена как испорченная и последний (автоматический?) ремонт не был успешным" serbian "Tabela '%-.192s' je markirana kao oštećena, a zadnja (automatska?) popravka je bila neuspela" spa "La tabla '%-.192s' está marcada como estropeada y la última reparación (¿automática?) falló" swe "Tabell '%-.192s' är trasig och senast (automatiska?) reparation misslyckades" ukr "Таблицю '%-.192s' марковано як зіпсовану та останнє (автоматичне?) відновлення не вдалося" ER_WARNING_NOT_COMPLETE_ROLLBACK chi "某些非事务性更改的表无法回滚" dan "Advarsel: Visse data i tabeller der ikke understøtter transaktioner kunne ikke tilbagestilles" eng "Some non-transactional changed tables couldn't be rolled back" est "Hoiatus: mõnesid transaktsioone mittetoetavaid tabeleid ei suudetud tagasi kerida" fre "Attention: certaines tables ne supportant pas les transactions ont été changées et elles ne pourront pas être restituées" ger "Änderungen an einigen nicht transaktionalen Tabellen konnten nicht zurückgerollt werden" ita "Attenzione: Alcune delle modifiche alle tabelle non transazionali non possono essere ripristinate (roll back impossibile)" jpn "トランザクション対応ではない表への変更はロールバックされません。" nla "Waarschuwing: Roll back mislukt voor sommige buiten transacties gewijzigde tabellen" por "Aviso: Algumas tabelas não-transacionais alteradas não puderam ser reconstituídas (rolled back)" rus "Внимание: по некоторым измененным нетранзакционным таблицам невозможно будет произвести откат транзакции" serbian "Upozorenje: Neke izmenjene tabele ne podržavaju komandu 'ROLLBACK'" spa "Algunas tablas no transaccionales ya cambiadas no puedieron ser retrocedidas (rolled back)" swe "Warning: Några icke transaktionella tabeller kunde inte återställas vid ROLLBACK" ukr "Застереження: Деякі нетранзакційні зміни таблиць не можна буде повернути" ER_TRANS_CACHE_FULL chi "多语句事务需要超过 'max_binlog_cache_size' 字节的存储空间;增加这个 mariadbd 变量后再试一次" dan "Fler-udtryks transaktion krævede mere plads en 'max_binlog_cache_size' bytes. Forhøj værdien af denne variabel og prøv igen" eng "Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage; increase this mariadbd variable and try again" est "Mitme lausendiga transaktsioon nõudis rohkem ruumi kui lubatud 'max_binlog_cache_size' muutujaga. Suurenda muutuja väärtust ja proovi uuesti" fre "Cette transaction à commandes multiples nécessite plus de 'max_binlog_cache_size' octets de stockage, augmentez cette variable de mariadbd et réessayez" ger "Transaktionen, die aus mehreren Befehlen bestehen, benötigten mehr als 'max_binlog_cache_size' Bytes an Speicher. Btte vergrössern Sie diese Server-Variable versuchen Sie es noch einmal" ita "La transazione a comandi multipli (multi-statement) ha richiesto piu` di 'max_binlog_cache_size' bytes di disco: aumentare questa variabile di mariadbd e riprovare" jpn "複数ステートメントから成るトランザクションが 'max_binlog_cache_size' 以上の容量を必要としました。このシステム変数を増加して、再試行してください。" nla "Multi-statement transactie vereist meer dan 'max_binlog_cache_size' bytes opslag. Verhoog deze mariadbd variabele en probeer opnieuw" por "Transações multi-declaradas (multi-statement transactions) requeriram mais do que o valor limite (max_binlog_cache_size) de bytes para armazenagem. Aumente o valor desta variável do mariadbd e tente novamente" rus "Транзакции, включающей большое количество команд, потребовалось более чем 'max_binlog_cache_size' байт. Увеличьте эту переменную сервера mariadbd и попробуйте еще раз" spa "Transacción multi-sentencia requirió de más de 'max_binlog_cache_size' bytes de almacenamiento" swe "Transaktionen krävde mera än 'max_binlog_cache_size' minne. Öka denna mariadbd-variabel och försök på nytt" ukr "Транзакція з багатьма виразами вимагає більше ніж 'max_binlog_cache_size' байтів для зберігання. Збільште цю змінну mariadbd та спробуйте знову" ER_SLAVE_MUST_STOP chi "这个操作不能执行,因为你有个正在运行的 slave '%2$*1$s'; 先运行 STOP SLAVE '%2$*1$s' 后再试" dan "Denne handling kunne ikke udføres med kørende slave '%2$*1$s', brug først kommandoen STOP SLAVE '%2$*1$s'" eng "This operation cannot be performed as you have a running slave '%2$*1$s'; run STOP SLAVE '%2$*1$s' first" fre "Cette opération ne peut être réalisée avec un esclave '%2$*1$s' actif, faites STOP SLAVE '%2$*1$s' d'abord" ger "Diese Operation kann bei einem aktiven Slave '%2$*1$s' nicht durchgeführt werden. Bitte zuerst STOP SLAVE '%2$*1$s' ausführen" ita "Questa operazione non puo' essere eseguita con un database 'slave' '%2$*1$s' che gira, lanciare prima STOP SLAVE '%2$*1$s'" nla "Deze operatie kan niet worden uitgevoerd met een actieve slave '%2$*1$s', doe eerst STOP SLAVE '%2$*1$s'" por "Esta operação não pode ser realizada com um 'slave' '%2$*1$s' em execução. Execute STOP SLAVE '%2$*1$s' primeiro" rus "Эту операцию невозможно выполнить при работающем потоке подчиненного сервера %2$*1$s. Сначала выполните STOP SLAVE '%2$*1$s'" serbian "Ova operacija ne može biti izvršena dok je aktivan podređeni '%2$*1$s' server. Zadajte prvo komandu 'STOP SLAVE '%2$*1$s'' da zaustavite podređeni server" spa "Esta operación no puede ser realizada con el esclavo '%2$*1$s' en marcha; primero ejecute STOP SLAVE '%2$*1$s'" swe "Denna operation kan inte göras under replikering; Du har en aktiv förbindelse till '%2$*1$s'. Gör STOP SLAVE '%2$*1$s' först" ukr "Операція не може бути виконана з запущеним підлеглим '%2$*1$s', спочатку виконайте STOP SLAVE '%2$*1$s'" ER_SLAVE_NOT_RUNNING chi "这个操作需要一个正在运行的slave;配置从机并执行 START SLAVE" dan "Denne handling kræver en kørende slave. Konfigurer en slave og brug kommandoen START SLAVE" eng "This operation requires a running slave; configure slave and do START SLAVE" fre "Cette opération nécessite un esclave actif, configurez les esclaves et faites START SLAVE" ger "Diese Operation benötigt einen aktiven Slave. Bitte Slave konfigurieren und mittels START SLAVE aktivieren" ita "Questa operaione richiede un database 'slave', configurarlo ed eseguire START SLAVE" jpn "この処理は、稼働中のスレーブでなければ実行できません。スレーブの設定をしてSTART SLAVEコマンドを実行してください。" nla "Deze operatie vereist een actieve slave, configureer slave en doe dan START SLAVE" por "Esta operação requer um 'slave' em execução. Configure o 'slave' e execute START SLAVE" rus "Для этой операции требуется работающий подчиненный сервер. Сначала выполните START SLAVE" serbian "Ova operacija zahteva da je aktivan podređeni server. Konfigurišite prvo podređeni server i onda izvršite komandu 'START SLAVE'" spa "Esta operación requiere de un esclavo funcionando; configure el esclavo y haga el START SLAVE" swe "Denna operation kan endast göras under replikering; Konfigurera slaven och gör START SLAVE" ukr "Операція вимагає запущеного підлеглого, зконфігуруйте підлеглого та виконайте START SLAVE" ER_BAD_SLAVE chi "服务器未配置为从站;修复配置文件或使用CHANGE MASTER TO" dan "Denne server er ikke konfigureret som slave. Ret in config-filen eller brug kommandoen CHANGE MASTER TO" eng "The server is not configured as slave; fix in config file or with CHANGE MASTER TO" fre "Le server n'est pas configuré comme un esclave, changez le fichier de configuration ou utilisez CHANGE MASTER TO" ger "Der Server ist nicht als Slave konfiguriert. Bitte in der Konfigurationsdatei oder mittels CHANGE MASTER TO beheben" ita "Il server non e' configurato come 'slave', correggere il file di configurazione cambiando CHANGE MASTER TO" jpn "このサーバーはスレーブとして設定されていません。コンフィグファイルかCHANGE MASTER TOコマンドで設定して下さい。" nla "De server is niet geconfigureerd als slave, fix in configuratie bestand of met CHANGE MASTER TO" por "O servidor não está configurado como 'slave'. Acerte o arquivo de configuração ou use CHANGE MASTER TO" rus "Этот сервер не настроен как подчиненный. Внесите исправления в конфигурационном файле или с помощью CHANGE MASTER TO" serbian "Server nije konfigurisan kao podređeni server, ispravite konfiguracioni file ili na njemu izvršite komandu 'CHANGE MASTER TO'" spa "El servidor no está configurado como esclavo; arréglelo en el fichero/archivo de configuración o con CHANGE MASTER TO" swe "Servern är inte konfigurerade som en replikationsslav. Ändra konfigurationsfilen eller gör CHANGE MASTER TO" ukr "Сервер не зконфігуровано як підлеглий, виправте це у файлі конфігурації або з CHANGE MASTER TO" ER_MASTER_INFO chi "无法初始化'%.*s'的master info structure;MariaDB错误日志中可以找到更多错误消息" eng "Could not initialize master info structure for '%.*s'; more error messages can be found in the MariaDB error log" fre "Impossible d'initialiser les structures d'information de maître '%.*s', vous trouverez des messages d'erreur supplémentaires dans le journal des erreurs de MariaDB" ger "Konnte Master-Info-Struktur '%.*s' nicht initialisieren. Weitere Fehlermeldungen können im MariaDB-Error-Log eingesehen werden" jpn "'master info '%.*s''構造体の初期化ができませんでした。MariaDBエラーログでエラーメッセージを確認してください。" serbian "Nisam mogao da inicijalizujem informacionu strukturu glavnog servera, proverite da li imam privilegije potrebne za pristup file-u 'master.info' '%.*s'" spa "No pude inicializar estructura info de maestro (master) para '%.*s'; se pueden ver más mensajes de error en el historial (log) de errores de MariaDB" swe "Kunde inte initialisera replikationsstrukturerna för '%.*s'. See MariaDB fel fil för mera information" ukr "Інформаційна структура з'єднання головного і підлеглого (master.info) для '%.*s' не може бути ініціалізована" ER_SLAVE_THREAD chi "无法创建slave线程;检查系统资源" dan "Kunne ikke danne en slave-tråd; check systemressourcerne" eng "Could not create slave thread; check system resources" fre "Impossible de créer une tâche esclave, vérifiez les ressources système" ger "Konnte Slave-Thread nicht starten. Bitte System-Ressourcen überprüfen" ita "Impossibile creare il thread 'slave', controllare le risorse di sistema" jpn "スレーブスレッドを作成できません。システムリソースを確認してください。" nla "Kon slave thread niet aanmaken, controleer systeem resources" por "Não conseguiu criar 'thread' de 'slave'. Verifique os recursos do sistema" rus "Невозможно создать поток подчиненного сервера. Проверьте системные ресурсы" serbian "Nisam mogao da startujem thread za podređeni server, proverite sistemske resurse" spa "No puedo crear el hilo (thread) esclavo; verifique recursos del sistema" swe "Kunde inte starta en tråd för replikering" ukr "Не можу створити підлеглу гілку, перевірте системні ресурси" ER_TOO_MANY_USER_CONNECTIONS 42000 chi "用户%-.64s已经拥有超过“max_user_conections”的活连接" dan "Brugeren %-.64s har allerede mere end 'max_user_connections' aktive forbindelser" eng "User %-.64s already has more than 'max_user_connections' active connections" est "Kasutajal %-.64s on juba rohkem ühendusi kui lubatud 'max_user_connections' muutujaga" fre "L'utilisateur %-.64s possède déjà plus de 'max_user_connections' connexions actives" ger "Benutzer '%-.64s' hat mehr als 'max_user_connections' aktive Verbindungen" hindi "यूज़र %-.64s के पहले से ही 'max_user_connections' से अधिक सक्रिय कनेक्शन्स हैं" ita "L'utente %-.64s ha gia' piu' di 'max_user_connections' connessioni attive" jpn "ユーザー '%-.64s' はすでに 'max_user_connections' 以上のアクティブな接続を行っています。" nla "Gebruiker %-.64s heeft reeds meer dan 'max_user_connections' actieve verbindingen" por "Usuário '%-.64s' já possui mais que o valor máximo de conexões (max_user_connections) ativas" rus "У пользователя %-.64s уже больше чем 'max_user_connections' активных соединений" serbian "Korisnik %-.64s već ima više aktivnih konekcija nego što je to određeno 'max_user_connections' promenljivom" spa "El usuario %-.64s ya tiene más de 'max_user_connections' conexiones activas" swe "Användare '%-.64s' har redan 'max_user_connections' aktiva inloggningar" ukr "Користувач %-.64s вже має більше ніж 'max_user_connections' активних з'єднань" ER_SET_CONSTANTS_ONLY chi "您只能在此语句中使用常量表达式" dan "Du må kun bruge konstantudtryk med SET" eng "You may only use constant expressions in this statement" est "Ainult konstantsed suurused on lubatud SET klauslis" fre "Seules les expressions constantes sont autorisées avec SET" ger "Bei diesem Befehl dürfen nur konstante Ausdrücke verwendet werden" hindi "इस स्टेटमेंट में आप केवल CONSTANT EXPRESSIONS का उपयोग कर सकते हैं" ita "Si possono usare solo espressioni costanti con SET" jpn "SET処理が失敗しました。" nla "U mag alleen constante expressies gebruiken bij SET" por "Você pode usar apenas expressões constantes com SET" rus "С этой командой вы можете использовать только константные выражения" serbian "Možete upotrebiti samo konstantan iskaz sa komandom 'SET'" spa "Sólo puede usar expresiones constantes en esta sentencia" swe "Man kan endast använda konstantuttryck med SET" ukr "Можна використовувати лише вирази зі сталими у SET" ER_LOCK_WAIT_TIMEOUT chi "锁等待超时;尝试重新启动事务" dan "Lock wait timeout overskredet" eng "Lock wait timeout exceeded; try restarting transaction" est "Kontrollaeg ületatud luku järel ootamisel; Proovi transaktsiooni otsast alata" fre "Timeout sur l'obtention du verrou" ger "Beim Warten auf eine Sperre wurde die zulässige Wartezeit überschritten. Bitte versuchen Sie, die Transaktion neu zu starten" ita "E' scaduto il timeout per l'attesa del lock" jpn "ロック待ちがタイムアウトしました。トランザクションを再試行してください。" nla "Lock wacht tijd overschreden" por "Tempo de espera (timeout) de travamento excedido. Tente reiniciar a transação" rus "Таймаут ожидания блокировки истек; попробуйте перезапустить транзакцию" serbian "Vremenski limit za zaključavanje tabele je istekao; Probajte da ponovo startujete transakciju" spa "Tiempo de espera de bloqueo excedido; intente rearrancar la transacción" swe "Fick inte ett lås i tid ; Försök att starta om transaktionen" ukr "Затримку очікування блокування вичерпано" ER_LOCK_TABLE_FULL chi "锁的总数超过锁定表大小" dan "Det totale antal låse overstiger størrelsen på låse-tabellen" eng "The total number of locks exceeds the lock table size" est "Lukkude koguarv ületab lukutabeli suuruse" fre "Le nombre total de verrou dépasse la taille de la table des verrous" ger "Die Gesamtzahl der Sperren überschreitet die Größe der Sperrtabelle" hindi "लॉक्स की कुल संख्या लॉक टेबल के साइज से अधिक है" ita "Il numero totale di lock e' maggiore della grandezza della tabella di lock" jpn "ロックの数が多すぎます。" nla "Het totale aantal locks overschrijdt de lock tabel grootte" por "O número total de travamentos excede o tamanho da tabela de travamentos" rus "Общее количество блокировок превысило размеры таблицы блокировок" serbian "Broj totalnih zaključavanja tabele premašuje veličinu tabele zaključavanja" spa "El número total de bloqueos excede el tamaño de bloqueo de la tabla" swe "Antal lås överskrider antalet reserverade lås" ukr "Загальна кількість блокувань перевищила розмір блокувань для таблиці" ER_READ_ONLY_TRANSACTION 25000 chi "在READ UNCOMMITTED事务期间无法获取更新锁定" dan "Update lås kan ikke opnås under en READ UNCOMMITTED transaktion" eng "Update locks cannot be acquired during a READ UNCOMMITTED transaction" est "Uuenduslukke ei saa kasutada READ UNCOMMITTED transaktsiooni käigus" fre "Un verrou en update ne peut être acquit pendant une transaction READ UNCOMMITTED" ger "Während einer READ-UNCOMMITTED-Transaktion können keine UPDATE-Sperren angefordert werden" ita "I lock di aggiornamento non possono essere acquisiti durante una transazione 'READ UNCOMMITTED'" jpn "読み込み専用トランザクションです。" nla "Update locks kunnen niet worden verkregen tijdens een READ UNCOMMITTED transactie" por "Travamentos de atualização não podem ser obtidos durante uma transação de tipo READ UNCOMMITTED" rus "Блокировки обновлений нельзя получить в процессе чтения не принятой (в режиме READ UNCOMMITTED) транзакции" serbian "Zaključavanja izmena ne mogu biti realizovana sve dok traje 'READ UNCOMMITTED' transakcija" spa "No se pueden adquirir bloqueos de actualización durante una transacción READ UNCOMMITTED" swe "Updateringslås kan inte göras när man använder READ UNCOMMITTED" ukr "Оновити блокування не можливо на протязі транзакції READ UNCOMMITTED" ER_DROP_DB_WITH_READ_LOCK chi "线程持有全局读锁时,不允许删除数据库" dan "DROP DATABASE er ikke tilladt mens en tråd holder på globalt read lock" eng "DROP DATABASE not allowed while thread is holding global read lock" est "DROP DATABASE ei ole lubatud kui lõim omab globaalset READ lukku" fre "DROP DATABASE n'est pas autorisée pendant qu'une tâche possède un verrou global en lecture" ger "DROP DATABASE ist nicht erlaubt, solange der Thread eine globale Lesesperre hält" ita "DROP DATABASE non e' permesso mentre il thread ha un lock globale di lettura" jpn "グローバルリードロックを保持している間は、DROP DATABASE を実行できません。" nla "DROP DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit" por "DROP DATABASE não permitido enquanto uma 'thread' está mantendo um travamento global de leitura" rus "Не допускается DROP DATABASE, пока поток держит глобальную блокировку чтения" serbian "Komanda 'DROP DATABASE' nije dozvoljena dok thread globalno zaključava čitanje podataka" spa "DROP DATABASE no permitido mientras un hilo (thread) está ejerciendo un bloqueo de lectura global" swe "DROP DATABASE är inte tillåtet när man har ett globalt läslås" ukr "DROP DATABASE не дозволено доки гілка перебуває під загальним блокуванням читання" ER_CREATE_DB_WITH_READ_LOCK chi "线程持有全局读锁时,不允许创建数据库" dan "CREATE DATABASE er ikke tilladt mens en tråd holder på globalt read lock" eng "CREATE DATABASE not allowed while thread is holding global read lock" est "CREATE DATABASE ei ole lubatud kui lõim omab globaalset READ lukku" fre "CREATE DATABASE n'est pas autorisée pendant qu'une tâche possède un verrou global en lecture" ger "CREATE DATABASE ist nicht erlaubt, solange der Thread eine globale Lesesperre hält" ita "CREATE DATABASE non e' permesso mentre il thread ha un lock globale di lettura" jpn "グローバルリードロックを保持している間は、CREATE DATABASE を実行できません。" nla "CREATE DATABASE niet toegestaan terwijl thread een globale 'read lock' bezit" por "CREATE DATABASE não permitido enquanto uma 'thread' está mantendo um travamento global de leitura" rus "Не допускается CREATE DATABASE, пока поток держит глобальную блокировку чтения" serbian "Komanda 'CREATE DATABASE' nije dozvoljena dok thread globalno zaključava čitanje podataka" spa "CREATE DATABASE no permitido mientras un hilo (thread) está manteniendo un bloqueo de lectura global" swe "CREATE DATABASE är inte tillåtet när man har ett globalt läslås" ukr "CREATE DATABASE не дозволено доки гілка перебуває під загальним блокуванням читання" ER_WRONG_ARGUMENTS chi "%s的参数不正确" eng "Incorrect arguments to %s" est "Vigased parameetrid %s-le" fre "Mauvais arguments à %s" ger "Falsche Argumente für %s" hindi "%s को गलत आर्ग्यूमेंट्स" ita "Argomenti errati a %s" jpn "%s の引数が不正です" nla "Foutieve parameters voor %s" por "Argumentos errados para %s" rus "Неверные параметры для %s" serbian "Pogrešni argumenti prosleđeni na %s" spa "Argumentos incorrectos para %s" swe "Felaktiga argument till %s" ukr "Хибний аргумент для %s" ER_NO_PERMISSION_TO_CREATE_USER 42000 chi "'%s'@'%s'不允许创建新用户" eng "'%s'@'%s' is not allowed to create new users" est "Kasutajal '%s'@'%s' ei ole lubatud luua uusi kasutajaid" fre "'%s'@'%s' n'est pas autorisé à créer de nouveaux utilisateurs" ger "'%s'@'%s' ist nicht berechtigt, neue Benutzer hinzuzufügen" hindi "'%s'@'%s' को नए यूज़र्स बनाने की अनुमति नहीं है" ita "A '%s'@'%s' non e' permesso creare nuovi utenti" nla "'%s'@'%s' mag geen nieuwe gebruikers creeren" por "Não é permitido a '%s'@'%s' criar novos usuários" rus "'%s'@'%s' не разрешается создавать новых пользователей" serbian "Korisniku '%s'@'%s' nije dozvoljeno da kreira nove korisnike" spa "'%s'@'%s' no está permitido para crear nuevos usuarios" swe "'%s'@'%s' har inte rättighet att skapa nya användare" ukr "Користувачу '%s'@'%s' не дозволено створювати нових користувачів" ER_UNION_TABLES_IN_DIFFERENT_DIR chi "表定义不正确;所有合并表必须在同一数据库中" eng "Incorrect table definition; all MERGE tables must be in the same database" est "Vigane tabelimääratlus; kõik MERGE tabeli liikmed peavad asuma samas andmebaasis" fre "Définition de table incorrecte; toutes les tables MERGE doivent être dans la même base de donnée" ger "Falsche Tabellendefinition. Alle MERGE-Tabellen müssen sich in derselben Datenbank befinden" ita "Definizione della tabella errata; tutte le tabelle di tipo MERGE devono essere nello stesso database" jpn "不正な表定義です。MERGE表の構成表はすべて同じデータベース内になければなりません。" nla "Incorrecte tabel definitie; alle MERGE tabellen moeten tot dezelfde database behoren" por "Definição incorreta da tabela. Todas as tabelas contidas na junção devem estar no mesmo banco de dados" rus "Неверное определение таблицы; Все таблицы в MERGE должны принадлежать одной и той же базе данных" serbian "Pogrešna definicija tabele; sve 'MERGE' tabele moraju biti u istoj bazi podataka" spa "Definición incorrecta de la tabla; todas las tablas MERGE deben de estar en la misma base de datos" swe "Felaktig tabelldefinition; alla tabeller i en MERGE-tabell måste vara i samma databas" ukr "Хибне визначення таблиці; всі MERGE-таблиці повинні належити до однієї бази ланних." ER_LOCK_DEADLOCK 40001 chi "试图锁定时发现僵局;尝试重新启动事务" eng "Deadlock found when trying to get lock; try restarting transaction" est "Lukustamisel tekkis tupik (deadlock); alusta transaktsiooni otsast" fre "Deadlock découvert en essayant d'obtenir les verrous : essayez de redémarrer la transaction" ger "Beim Versuch, eine Sperre anzufordern, ist ein Deadlock aufgetreten. Versuchen Sie, die Transaktion neu zu starten" ita "Trovato deadlock durante il lock; Provare a far ripartire la transazione" jpn "ロック取得中にデッドロックが検出されました。トランザクションを再試行してください。" nla "Deadlock gevonden tijdens lock-aanvraag poging; Probeer herstart van de transactie" por "Encontrado um travamento fatal (deadlock) quando tentava obter uma trava. Tente reiniciar a transação" rus "Возникла тупиковая ситуация в процессе получения блокировки; Попробуйте перезапустить транзакцию" serbian "Unakrsno zaključavanje pronađeno kada sam pokušao da dobijem pravo na zaključavanje; Probajte da restartujete transakciju" spa "Encontrado estancamiento (deadlock) al intentar obtener el bloqueo; intente volver a comenzar la transacción" swe "Fick 'DEADLOCK' vid låsförsök av block/rad. Försök att starta om transaktionen" ukr "Взаємне блокування знайдено під час спроби отримати блокування; спробуйте перезапустити транзакцію." ER_TABLE_CANT_HANDLE_FT chi "存储引擎%s不支持fulltext索引" eng "The storage engine %s doesn't support FULLTEXT indexes" est "Antud tabelitüüp (%s) ei toeta FULLTEXT indekseid" fre "Le type de table utilisé (%s) ne supporte pas les index FULLTEXT" ger "Der verwendete Tabellentyp (%s) unterstützt keine FULLTEXT-Indizes" hindi "स्टोरेज इंजन '%s' FULLTEXT इन्डेक्सेस को सपोर्ट नहीं करता" ita "La tabella usata (%s) non supporta gli indici FULLTEXT" nla "Het gebruikte tabel type (%s) ondersteund geen FULLTEXT indexen" por "O tipo de tabela utilizado (%s) não suporta índices de texto completo (fulltext indexes)" rus "Используемый тип таблиц (%s) не поддерживает полнотекстовых индексов" serbian "Upotrebljeni tip tabele (%s) ne podržava 'FULLTEXT' indekse" spa "El motor de almacenaje %s no soporta índices FULLTEXT" swe "Tabelltypen (%s) har inte hantering av FULLTEXT-index" ukr "Використаний тип таблиці (%s) не підтримує FULLTEXT індексів" ER_CANNOT_ADD_FOREIGN chi "不能为`%s`添加外键约束" eng "Cannot add foreign key constraint for `%s`" fre "Impossible d'ajouter des contraintes d'index externe à `%s`" ger "Fremdschlüssel-Beschränkung kann nicht hinzugefügt werden für `%s`" ita "Impossibile aggiungere il vincolo di integrita' referenziale (foreign key constraint) a `%s`" jpn "`%s` 外部キー制約を追加できません。" nla "Kan foreign key beperking niet toevoegen vor `%s`" por "Não pode acrescentar uma restrição de chave estrangeira para `%s`" rus "Невозможно добавить ограничения внешнего ключа для `%s`" serbian "Ne mogu da dodam proveru spoljnog ključa na `%s`" spa "No puedo añadir restricción de clave foránea para `%s`" swe "Kan inte lägga till 'FOREIGN KEY constraint' för `%s`'" ukr "Не можу додати обмеження зовнішнього ключа Ha `%s`" ER_NO_REFERENCED_ROW 23000 chi "无法添加或更新子行:外键约束失败" eng "Cannot add or update a child row: a foreign key constraint fails" fre "Impossible d'ajouter un enregistrement fils : une constrainte externe l'empèche" ger "Hinzufügen oder Aktualisieren eines Kind-Datensatzes schlug aufgrund einer Fremdschlüssel-Beschränkung fehl" greek "Cannot add a child row: a foreign key constraint fails" hun "Cannot add a child row: a foreign key constraint fails" ita "Impossibile aggiungere la riga: un vincolo d'integrita' referenziale non e' soddisfatto" jpn "親キーがありません。外部キー制約違反です。" nla "Kan onderliggende rij niet toevoegen: foreign key beperking gefaald" norwegian-ny "Cannot add a child row: a foreign key constraint fails" por "Não pode acrescentar uma linha filha: uma restrição de chave estrangeira falhou" rus "Невозможно добавить или обновить дочернюю строку: проверка ограничений внешнего ключа не выполняется" spa "No puedo añadir o actualizar una fila hija: ha fallado una restrición de clave foránea" swe "FOREIGN KEY-konflikt: Kan inte skriva barn" ukr "Не вдається додати або оновити дочірній рядок: невдала перевірка обмеження зовнішнього ключа" ER_ROW_IS_REFERENCED 23000 chi "无法删除或更新父行:外键约束失败" eng "Cannot delete or update a parent row: a foreign key constraint fails" fre "Impossible de supprimer un enregistrement père : une constrainte externe l'empèche" ger "Löschen oder Aktualisieren eines Eltern-Datensatzes schlug aufgrund einer Fremdschlüssel-Beschränkung fehl" greek "Cannot delete a parent row: a foreign key constraint fails" hun "Cannot delete a parent row: a foreign key constraint fails" ita "Impossibile cancellare la riga: un vincolo d'integrita' referenziale non e' soddisfatto" jpn "子レコードがあります。外部キー制約違反です。" por "Não pode apagar uma linha pai: uma restrição de chave estrangeira falhou" rus "Невозможно удалить или обновить родительскую строку: проверка ограничений внешнего ключа не выполняется" serbian "Ne mogu da izbrišem roditeljski slog: provera spoljnog ključa je neuspela" spa "No puedo borrar o actualizar una fila padre: ha fallado una restrición de clave foránea" swe "FOREIGN KEY-konflikt: Kan inte radera fader" ER_CONNECT_TO_MASTER 08S01 chi "连接master时出错:%-.128s" eng "Error connecting to master: %-.128s" ger "Fehler bei der Verbindung zum Master: %-.128s" ita "Errore durante la connessione al master: %-.128s" jpn "マスターへの接続エラー: %-.128s" nla "Fout bij opbouwen verbinding naar master: %-.128s" por "Erro conectando com o master: %-.128s" rus "Ошибка соединения с головным сервером: %-.128s" spa "Error conectando al maestro (master): %-.128s" swe "Fick fel vid anslutning till master: %-.128s" ER_QUERY_ON_MASTER chi "在Master上运行查询时出错:%-.128s" eng "Error running query on master: %-.128s" ger "Beim Ausführen einer Abfrage auf dem Master trat ein Fehler auf: %-.128s" ita "Errore eseguendo una query sul master: %-.128s" jpn "マスターでのクエリ実行エラー: %-.128s" nla "Fout bij uitvoeren query op master: %-.128s" por "Erro rodando consulta no master: %-.128s" rus "Ошибка выполнения запроса на головном сервере: %-.128s" spa "Error ejecutando consulta (query) en maestro (master): %-.128s" swe "Fick fel vid utförande av command på mastern: %-.128s" ER_ERROR_WHEN_EXECUTING_COMMAND chi "执行命令%s时出错:%-.128s" eng "Error when executing command %s: %-.128s" est "Viga käsu %s täitmisel: %-.128s" ger "Fehler beim Ausführen des Befehls %s: %-.128s" ita "Errore durante l'esecuzione del comando %s: %-.128s" jpn "%s コマンドの実行エラー: %-.128s" nla "Fout tijdens uitvoeren van commando %s: %-.128s" por "Erro quando executando comando %s: %-.128s" rus "Ошибка при выполнении команды %s: %-.128s" serbian "Greška pri izvršavanju komande %s: %-.128s" spa "Error al ejecutar comando %s: %-.128s" swe "Fick fel vid utförande av %s: %-.128s" ER_WRONG_USAGE chi "%s和%s使用不正确" eng "Incorrect usage of %s and %s" est "Vigane %s ja %s kasutus" ger "Falsche Verwendung von %s und %s" ita "Uso errato di %s e %s" jpn "%s の %s に関する不正な使用法です。" nla "Foutief gebruik van %s en %s" por "Uso errado de %s e %s" rus "Неверное использование %s и %s" serbian "Pogrešna upotreba %s i %s" spa "Uso incorrecto de %s y %s" swe "Felaktig använding av %s and %s" ukr "Wrong usage of %s and %s" ER_WRONG_NUMBER_OF_COLUMNS_IN_SELECT 21000 chi "使用的SELECT语句具有不同数量的列" eng "The used SELECT statements have a different number of columns" est "Tulpade arv kasutatud SELECT lausetes ei kattu" ger "Die verwendeten SELECT-Befehle liefern unterschiedliche Anzahlen von Feldern zurück" ita "La SELECT utilizzata ha un numero di colonne differente" jpn "使用のSELECT文が返す列数が違います。" nla "De gebruikte SELECT commando's hebben een verschillend aantal kolommen" por "Os comandos SELECT usados têm diferente número de colunas" rus "Использованные операторы выборки (SELECT) дают разное количество столбцов" serbian "Upotrebljene 'SELECT' komande adresiraju različit broj kolona" spa "Las sentencias SELECT usadas tienen un número diferente de columnas" swe "SELECT-kommandona har olika antal kolumner" ER_CANT_UPDATE_WITH_READLOCK chi "无法执行查询,因为您有冲突的读锁" eng "Can't execute the query because you have a conflicting read lock" est "Ei suuda täita päringut konfliktse luku tõttu" ger "Augrund eines READ-LOCK-Konflikts kann die Abfrage nicht ausgeführt werden" ita "Impossibile eseguire la query perche' c'e' un conflitto con in lock di lettura" jpn "競合するリードロックを保持しているので、クエリを実行できません。" nla "Kan de query niet uitvoeren vanwege een conflicterende read lock" por "Não posso executar a consulta porque você tem um conflito de travamento de leitura" rus "Невозможно исполнить запрос, поскольку у вас установлены конфликтующие блокировки чтения" serbian "Ne mogu da izvršim upit zbog toga što imate zaključavanja čitanja podataka u konfliktu" spa "No puedo ejecutar la consulta (query) porque vd tiene un conflicto de bloqueo de lectura" swe "Kan inte utföra kommandot emedan du har ett READ-lås" ER_MIXING_NOT_ALLOWED chi "事务和非事务表的混合被禁用" eng "Mixing of transactional and non-transactional tables is disabled" est "Transaktsioone toetavate ning mittetoetavate tabelite kooskasutamine ei ole lubatud" ger "Die gleichzeitige Verwendung von Tabellen mit und ohne Transaktionsunterstützung ist deaktiviert" ita "E' disabilitata la possibilita' di mischiare tabelle transazionali e non-transazionali" jpn "トランザクション対応の表と非対応の表の同時使用は無効化されています。" nla "Het combineren van transactionele en niet-transactionele tabellen is uitgeschakeld" por "Mistura de tabelas transacional e não-transacional está desabilitada" rus "Использование транзакционных таблиц наряду с нетранзакционными запрещено" serbian "Mešanje tabela koje podržavaju transakcije i onih koje ne podržavaju transakcije je isključeno" spa "Desactivada la mezcla de tablas transaccionales y no transaccionales" swe "Blandning av transaktionella och icke-transaktionella tabeller är inaktiverat" ER_DUP_ARGUMENT chi "选项'%s'在语句中使用两次" eng "Option '%s' used twice in statement" est "Määrangut '%s' on lauses kasutatud topelt" ger "Option '%s' wird im Befehl zweimal verwendet" ita "L'opzione '%s' e' stata usata due volte nel comando" jpn "オプション '%s' が2度使用されています。" nla "Optie '%s' tweemaal gebruikt in opdracht" por "Opção '%s' usada duas vezes no comando" rus "Опция '%s' дважды использована в выражении" spa "Opción '%s' usada dos veces en la sentencia" swe "Option '%s' användes två gånger" ER_USER_LIMIT_REACHED 42000 chi "用户'%-.64s'已超过'%s'资源(当前值:%ld)" eng "User '%-.64s' has exceeded the '%s' resource (current value: %ld)" ger "Benutzer '%-.64s' hat die Ressourcenbeschränkung '%s' überschritten (aktueller Wert: %ld)" ita "L'utente '%-.64s' ha ecceduto la risorsa '%s' (valore corrente: %ld)" jpn "ユーザー '%-.64s' はリソースの上限 '%s' に達しました。(現在値: %ld)" nla "Gebruiker '%-.64s' heeft het maximale gebruik van de '%s' faciliteit overschreden (huidige waarde: %ld)" por "Usuário '%-.64s' tem excedido o '%s' recurso (atual valor: %ld)" rus "Пользователь '%-.64s' превысил использование ресурса '%s' (текущее значение: %ld)" spa "El usuario '%-.64s' ha excedido el recurso '%s' (valor actual: %ld)" swe "Användare '%-.64s' har överskridit '%s' (nuvarande värde: %ld)" ER_SPECIFIC_ACCESS_DENIED_ERROR 42000 chi "拒绝访问;您需要(至少一个)%-.128s特权用于此操作" eng "Access denied; you need (at least one of) the %-.128s privilege(s) for this operation" ger "Kein Zugriff. Hierfür wird die Berechtigung %-.128s benötigt" ita "Accesso non consentito. Serve il privilegio %-.128s per questa operazione" jpn "アクセスは拒否されました。この操作には %-.128s 権限が(複数の場合はどれか1つ)必要です。" nla "Toegang geweigerd. U moet het %-.128s privilege hebben voor deze operatie" por "Acesso negado. Você precisa o privilégio %-.128s para essa operação" rus "В доступе отказано. Вам нужны привилегии %-.128s для этой операции" spa "Acceso denegado. Usted necesita (al menos un(os)) privilegio(s) %-.128s para esta operación" swe "Du har inte privlegiet '%-.128s' som behövs för denna operation" ukr "Access denied. You need the %-.128s privilege for this operation" ER_LOCAL_VARIABLE chi "变量'%-.64s'是一个SESSION变量,不能与Set Global一起使用" eng "Variable '%-.64s' is a SESSION variable and can't be used with SET GLOBAL" ger "Variable '%-.64s' ist eine lokale Variable und kann nicht mit SET GLOBAL verändert werden" ita "La variabile '%-.64s' e' una variabile locale ( SESSION ) e non puo' essere cambiata usando SET GLOBAL" jpn "変数 '%-.64s' はセッション変数です。SET GLOBALでは使用できません。" nla "Variabele '%-.64s' is SESSION en kan niet worden gebruikt met SET GLOBAL" por "Variável '%-.64s' é uma SESSION variável e não pode ser usada com SET GLOBAL" rus "Переменная '%-.64s' является потоковой (SESSION) переменной и не может быть изменена с помощью SET GLOBAL" spa "La variable '%-.64s' es una variable de SESSION y no puede ser usada con SET GLOBAL" swe "Variabel '%-.64s' är en SESSION variabel och kan inte ändrad med SET GLOBAL" ER_GLOBAL_VARIABLE chi "变量'%-.64s'是全局变量,应该用SET GLOBAL设置" eng "Variable '%-.64s' is a GLOBAL variable and should be set with SET GLOBAL" ger "Variable '%-.64s' ist eine globale Variable und muss mit SET GLOBAL verändert werden" ita "La variabile '%-.64s' e' una variabile globale ( GLOBAL ) e deve essere cambiata usando SET GLOBAL" jpn "変数 '%-.64s' はグローバル変数です。SET GLOBALを使用してください。" nla "Variabele '%-.64s' is GLOBAL en dient te worden gewijzigd met SET GLOBAL" por "Variável '%-.64s' é uma GLOBAL variável e deve ser configurada com SET GLOBAL" rus "Переменная '%-.64s' является глобальной (GLOBAL) переменной, и ее следует изменять с помощью SET GLOBAL" spa "La variable '%-.64s' es una variable GLOBAL y debería de ser configurada con SET GLOBAL" swe "Variabel '%-.64s' är en GLOBAL variabel och bör sättas med SET GLOBAL" ER_NO_DEFAULT 42000 chi "变量'%-.64s'没有默认值" eng "Variable '%-.64s' doesn't have a default value" ger "Variable '%-.64s' hat keinen Vorgabewert" ita "La variabile '%-.64s' non ha un valore di default" jpn "変数 '%-.64s' にはデフォルト値がありません。" nla "Variabele '%-.64s' heeft geen standaard waarde" por "Variável '%-.64s' não tem um valor padrão" rus "Переменная '%-.64s' не имеет значения по умолчанию" spa "La variable '%-.64s' no tiene un valor por defecto" swe "Variabel '%-.64s' har inte ett DEFAULT-värde" ER_WRONG_VALUE_FOR_VAR 42000 chi "变量'%-.64s'无法设置为'%-.200T'的值" eng "Variable '%-.64s' can't be set to the value of '%-.200T'" ger "Variable '%-.64s' kann nicht auf '%-.200T' gesetzt werden" ita "Alla variabile '%-.64s' non puo' essere assegato il valore '%-.200T'" jpn "変数 '%-.64s' に値 '%-.200T' を設定できません。" nla "Variabele '%-.64s' kan niet worden gewijzigd naar de waarde '%-.200T'" por "Variável '%-.64s' não pode ser configurada para o valor de '%-.200T'" rus "Переменная '%-.64s' не может быть установлена в значение '%-.200T'" spa "La variable '%-.64s' no puede ser configurada para el valor de '%-.200T'" swe "Variabel '%-.64s' kan inte sättas till '%-.200T'" ER_WRONG_TYPE_FOR_VAR 42000 chi "变量'%-.64s'的参数类型不正确" eng "Incorrect argument type to variable '%-.64s'" ger "Falscher Argumenttyp für Variable '%-.64s'" ita "Tipo di valore errato per la variabile '%-.64s'" jpn "変数 '%-.64s' への値の型が不正です。" nla "Foutief argumenttype voor variabele '%-.64s'" por "Tipo errado de argumento para variável '%-.64s'" rus "Неверный тип аргумента для переменной '%-.64s'" spa "Tipo de argumento incorrecto para variable '%-.64s'" swe "Fel typ av argument till variabel '%-.64s'" ER_VAR_CANT_BE_READ chi "变量'%-.64s'只能设置,不能读" eng "Variable '%-.64s' can only be set, not read" ger "Variable '%-.64s' kann nur verändert, nicht gelesen werden" ita "Alla variabile '%-.64s' e' di sola scrittura quindi puo' essere solo assegnato un valore, non letto" jpn "変数 '%-.64s' は書き込み専用です。読み込みはできません。" nla "Variabele '%-.64s' kan alleen worden gewijzigd, niet gelezen" por "Variável '%-.64s' somente pode ser configurada, não lida" rus "Переменная '%-.64s' может быть только установлена, но не считана" spa "La variable '%-.64s' solamente puede ser configurada, no leída" swe "Variabeln '%-.64s' kan endast sättas, inte läsas" ER_CANT_USE_OPTION_HERE 42000 chi "'%s'的使用/放置不正确" eng "Incorrect usage/placement of '%s'" ger "Falsche Verwendung oder Platzierung von '%s'" ita "Uso/posizione di '%s' sbagliato" jpn "'%s' の使用法または場所が不正です。" nla "Foutieve toepassing/plaatsing van '%s'" por "Errado uso/colocação de '%s'" rus "Неверное использование или в неверном месте указан '%s'" spa "Incorrecto uso/colocación de '%s'" swe "Fel använding/placering av '%s'" ER_NOT_SUPPORTED_YET 42000 chi "此版本的MariaDB尚未支持'%s'" eng "This version of MariaDB doesn't yet support '%s'" ger "Diese MariaDB-Version unterstützt '%s' nicht" ita "Questa versione di MariaDB non supporta ancora '%s'" jpn "このバージョンのMariaDBでは、まだ '%s' を利用できません。" nla "Deze versie van MariaDB ondersteunt nog geen '%s'" por "Esta versão de MariaDB não suporta ainda '%s'" rus "Эта версия MariaDB пока еще не поддерживает '%s'" spa "Esta versión de MariaDB no soporta todavía '%s'" swe "Denna version av MariaDB kan ännu inte utföra '%s'" ER_MASTER_FATAL_ERROR_READING_BINLOG chi "从二进制日志读取数据时,从master遇到致命错误%d:'%-.320s'" eng "Got fatal error %d from master when reading data from binary log: '%-.320s'" ger "Schwerer Fehler %d: '%-.320s vom Master beim Lesen des binären Logs" ita "Errore fatale %d: '%-.320s' dal master leggendo i dati dal log binario" jpn "致命的なエラー %d: '%-.320s' がマスターでバイナリログ読み込み中に発生しました。" nla "Kreeg fatale fout %d: '%-.320s' van master tijdens lezen van data uit binaire log" por "Obteve fatal erro %d: '%-.320s' do master quando lendo dados do binary log" rus "Получена неисправимая ошибка %d: '%-.320s' от головного сервера в процессе выборки данных из двоичного журнала" spa "Obtenido error fatal %d del maestro (master) al leer datos del historial (log) binario: '%-.320s'" swe "Fick fatalt fel %d: '%-.320s' från master vid läsning av binärloggen" ER_SLAVE_IGNORED_TABLE chi "由于复制replicate-*-table规则,Slave SQL线程忽略了查询" eng "Slave SQL thread ignored the query because of replicate-*-table rules" ger "Slave-SQL-Thread hat die Abfrage aufgrund von replicate-*-table-Regeln ignoriert" jpn "replicate-*-table ルールに従って、スレーブSQLスレッドはクエリを無視しました。" nla "Slave SQL thread negeerde de query vanwege replicate-*-table opties" por "Slave SQL thread ignorado a consulta devido às normas de replicação-*-tabela" spa "El hilo (thread) SQL esclavo ha ignorado la consulta (query) debido a las reglas de replicar-*-tabla" swe "Slav SQL tråden ignorerade frågan pga en replicate-*-table regel" ER_INCORRECT_GLOBAL_LOCAL_VAR chi "变量'%-.192s'是一个%s变量" eng "Variable '%-.192s' is a %s variable" ger "Variable '%-.192s' ist eine %s-Variable" jpn "変数 '%-.192s' は %s 変数です。" nla "Variabele '%-.192s' is geen %s variabele" serbian "Promenljiva '%-.192s' je %s promenljiva" spa "La variable '%-.192s' es una variable %s" swe "Variabel '%-.192s' är av typ %s" ER_WRONG_FK_DEF 42000 chi "'%-.192s'的外键定义不正确:%s" eng "Incorrect foreign key definition for '%-.192s': %s" ger "Falsche Fremdschlüssel-Definition für '%-.192s': %s" jpn "外部キー '%-.192s' の定義の不正: %s" nla "Incorrecte foreign key definitie voor '%-.192s': %s" por "Definição errada da chave estrangeira para '%-.192s': %s" spa "Definición de clave foránea incorrecta para '%-.192s': %s" swe "Felaktig FOREIGN KEY-definition för '%-.192s': %s" ER_KEY_REF_DO_NOT_MATCH_TABLE_REF chi "索引参考和表参考不匹配" eng "Key reference and table reference don't match" ger "Schlüssel- und Tabellenverweis passen nicht zusammen" jpn "外部キーの参照表と定義が一致しません。" nla "Sleutel- en tabelreferentie komen niet overeen" por "Referência da chave e referência da tabela não coincidem" spa "La referencia de clave y la referencia de tabla no coinciden" swe "Nyckelreferensen och tabellreferensen stämmer inte överens" ER_OPERAND_COLUMNS 21000 chi "操作数应包含%d列" eng "Operand should contain %d column(s)" ger "Operand sollte %d Spalte(n) enthalten" jpn "オペランドに %d 個の列が必要です。" nla "Operand behoort %d kolommen te bevatten" rus "Операнд должен содержать %d колонок" spa "El operando debería de contener %d columna(s)" ukr "Операнд має складатися з %d стовбців" ER_SUBQUERY_NO_1_ROW 21000 chi "子查询返回超过1行" eng "Subquery returns more than 1 row" ger "Unterabfrage lieferte mehr als einen Datensatz zurück" jpn "サブクエリが2行以上の結果を返します。" nla "Subquery retourneert meer dan 1 rij" por "Subconsulta retorna mais que 1 registro" rus "Подзапрос возвращает более одной записи" spa "La subconsulta (subquery) devuelve más de 1 fila" swe "Subquery returnerade mer än 1 rad" ukr "Підзапит повертає більш нiж 1 запис" ER_UNKNOWN_STMT_HANDLER chi "未知prepared statement处理程序(%.*s)给予%s" dan "Unknown prepared statement handler (%.*s) given to %s" eng "Unknown prepared statement handler (%.*s) given to %s" ger "Unbekannter Prepared-Statement-Handler (%.*s) für %s angegeben" jpn "'%.*s' はプリペアードステートメントの不明なハンドルです。(%s で指定されました)" nla "Onebekende prepared statement handler (%.*s) voor %s aangegeven" por "Desconhecido manipulador de declaração preparado (%.*s) determinado para %s" spa "Manejador desconocido de sentencia preparada (%.*s) dado para %s" swe "Okänd PREPARED STATEMENT id (%.*s) var given till %s" ukr "Unknown prepared statement handler (%.*s) given to %s" ER_CORRUPT_HELP_DB chi "帮助数据库已损坏或不存在" eng "Help database is corrupt or does not exist" ger "Die Hilfe-Datenbank ist beschädigt oder existiert nicht" jpn "ヘルプデータベースは壊れているか存在しません。" nla "Help database is beschadigd of bestaat niet" por "Banco de dado de ajuda corrupto ou não existente" spa "O la Base de datos de Ayuda está corrupta o no existe" swe "Hjälpdatabasen finns inte eller är skadad" ER_CYCLIC_REFERENCE chi "亚查询的死环参考" eng "Cyclic reference on subqueries" ger "Zyklischer Verweis in Unterabfragen" jpn "サブクエリの参照がループしています。" nla "Cyclische verwijzing in subqueries" por "Referência cíclica em subconsultas" rus "Циклическая ссылка на подзапрос" spa "Referencia cíclica en subconsultas (subqueries)" swe "Cyklisk referens i subqueries" ukr "Циклічне посилання на підзапит" ER_AUTO_CONVERT chi "将列'%s'从%s转换为%s" eng "Converting column '%s' from %s to %s" ger "Feld '%s' wird von %s nach %s umgewandelt" jpn "列 '%s' を %s から %s へ変換します。" nla "Veld '%s' wordt van %s naar %s geconverteerd" por "Convertendo coluna '%s' de %s para %s" rus "Преобразование поля '%s' из %s в %s" spa "Convirtiendo la columna '%s' de %s a %s" swe "Konvertar kolumn '%s' från %s till %s" ukr "Перетворення стовбца '%s' з %s у %s" ER_ILLEGAL_REFERENCE 42S22 chi "参考'%-.64s'不支持(%s)" eng "Reference '%-.64s' not supported (%s)" ger "Verweis '%-.64s' wird nicht unterstützt (%s)" jpn "'%-.64s' の参照はできません。(%s)" nla "Verwijzing '%-.64s' niet ondersteund (%s)" por "Referência '%-.64s' não suportada (%s)" rus "Ссылка '%-.64s' не поддерживается (%s)" spa "Referencia '%-.64s' no soportada (%s)" swe "Referens '%-.64s' stöds inte (%s)" ukr "Посилання '%-.64s' не пiдтримуется (%s)" ER_DERIVED_MUST_HAVE_ALIAS 42000 chi "每个派生的表必须有自己的别名" eng "Every derived table must have its own alias" ger "Für jede abgeleitete Tabelle muss ein eigener Alias angegeben werden" jpn "導出表には別名が必須です。" nla "Voor elke afgeleide tabel moet een unieke alias worden gebruikt" por "Cada tabela derivada deve ter seu próprio alias" spa "Cada tabla derivada debe de tener su propio alias" swe "Varje 'derived table' måste ha sitt eget alias" ER_SELECT_REDUCED 01000 chi "SELECT %u在优化期间被减" eng "Select %u was reduced during optimization" ger "Select %u wurde während der Optimierung reduziert" jpn "Select %u は最適化によって減らされました。" nla "Select %u werd geredureerd tijdens optimtalisatie" por "Select %u foi reduzido durante otimização" rus "Select %u был упразднен в процессе оптимизации" spa "La selección %u fué reducida durante optimización" swe "Select %u reducerades vid optimiering" ukr "Select %u was скасовано при оптимiзацii" ER_TABLENAME_NOT_ALLOWED_HERE 42000 chi "表'%-.192s'从其中一个SELECT中不能用于%-.32s" eng "Table '%-.192s' from one of the SELECTs cannot be used in %-.32s" ger "Tabelle '%-.192s', die in einem der SELECT-Befehle verwendet wurde, kann nicht in %-.32s verwendet werden" jpn "特定のSELECTのみで使用の表 '%-.192s' は %-.32s では使用できません。" nla "Tabel '%-.192s' uit een van de SELECTS kan niet in %-.32s gebruikt worden" por "Tabela '%-.192s' de um dos SELECTs não pode ser usada em %-.32s" spa "La tabla '%-.192s' de uno de los SELECT no puede ser usada en %-.32s" swe "Tabell '%-.192s' från en SELECT kan inte användas i %-.32s" ER_NOT_SUPPORTED_AUTH_MODE 08004 chi "客户端不支持服务器请求的身份验证协议;考虑升级MariaDB客户端" eng "Client does not support authentication protocol requested by server; consider upgrading MariaDB client" ger "Client unterstützt das vom Server erwartete Authentifizierungsprotokoll nicht. Bitte aktualisieren Sie Ihren MariaDB-Client" jpn "クライアントはサーバーが要求する認証プロトコルに対応できません。MariaDBクライアントのアップグレードを検討してください。" nla "Client ondersteunt het door de server verwachtte authenticatieprotocol niet. Overweeg een nieuwere MariaDB client te gebruiken" por "Cliente não suporta o protocolo de autenticação exigido pelo servidor; considere a atualização do cliente MariaDB" spa "El cliente no soporta protocolo de autenticación requerido por el servidor; considere mejorar el cliente MariaDB" swe "Klienten stöder inte autentiseringsprotokollet som begärts av servern; överväg uppgradering av klientprogrammet" ER_SPATIAL_CANT_HAVE_NULL 42000 chi "SPATIAL索引的所有部分必须不为null" eng "All parts of a SPATIAL index must be NOT NULL" ger "Alle Teile eines SPATIAL-Index müssen als NOT NULL deklariert sein" jpn "空間索引のキー列は NOT NULL でなければいけません。" nla "Alle delete van een SPATIAL index dienen als NOT NULL gedeclareerd te worden" por "Todas as partes de uma SPATIAL index devem ser NOT NULL" spa "Todas las partes de un índice SPATIAL deben de ser NOT NULL" swe "Alla delar av en SPATIAL index måste vara NOT NULL" ER_COLLATION_CHARSET_MISMATCH 42000 chi "COLLATION'%s'无效地用于字符集'%s'" eng "COLLATION '%s' is not valid for CHARACTER SET '%s'" ger "COLLATION '%s' ist für CHARACTER SET '%s' ungültig" jpn "COLLATION '%s' は CHARACTER SET '%s' に適用できません。" nla "COLLATION '%s' is niet geldig voor CHARACTER SET '%s'" por "COLLATION '%s' não é válida para CHARACTER SET '%s'" spa "El COTEJO (COLLATION) '%s' no es válido para CHARACTER SET '%s'" swe "COLLATION '%s' är inte tillåtet för CHARACTER SET '%s'" ER_SLAVE_WAS_RUNNING chi "Slave已经在运行" eng "Slave is already running" ger "Slave läuft bereits" jpn "スレーブはすでに稼働中です。" nla "Slave is reeds actief" por "O slave já está rodando" spa "El esclavo ya está funcionando" swe "Slaven har redan startat" ER_SLAVE_WAS_NOT_RUNNING chi "slave已经停止了" eng "Slave already has been stopped" ger "Slave wurde bereits angehalten" jpn "スレーブはすでに停止しています。" nla "Slave is reeds gestopt" por "O slave já está parado" spa "El esclavo ya fué parado" swe "Slaven har redan stoppat" ER_TOO_BIG_FOR_UNCOMPRESS chi "未压缩的数据量太大;最大量为%d(可能未压缩数据的长度已损坏)" eng "Uncompressed data size too large; the maximum size is %d (probably, length of uncompressed data was corrupted)" ger "Unkomprimierte Daten sind zu groß. Die maximale Größe beträgt %d (wahrscheinlich wurde die Länge der unkomprimierten Daten beschädigt)" jpn "展開後のデータが大きすぎます。最大サイズは %d です。(展開後データの長さ情報が壊れている可能性もあります。)" nla "Ongecomprimeerder data is te groot; de maximum lengte is %d (waarschijnlijk, de lengte van de gecomprimeerde data was beschadigd)" por "Tamanho muito grande dos dados des comprimidos. O máximo tamanho é %d. (provavelmente, o comprimento dos dados descomprimidos está corrupto)" spa "Tamaño demasiado grande para datos descomprimidos; el máximo tamaño es %d. (probablemente, el tamaño de datos descomprimidos fué corrompido)" ER_ZLIB_Z_MEM_ERROR chi "ZLIB:内存不足" eng "ZLIB: Not enough memory" ger "ZLIB: Nicht genug Speicher" jpn "ZLIB: メモリ不足です。" nla "ZLIB: Onvoldoende geheugen" por "ZLIB: Não suficiente memória disponível" spa "ZLIB: No hay suficiente memoria" ER_ZLIB_Z_BUF_ERROR chi "ZLIB:输出缓冲区中没有足够的空间(可能未压缩数据的长度已损坏)" eng "ZLIB: Not enough room in the output buffer (probably, length of uncompressed data was corrupted)" ger "ZLIB: Im Ausgabepuffer ist nicht genug Platz vorhanden (wahrscheinlich wurde die Länge der unkomprimierten Daten beschädigt)" jpn "ZLIB: 出力バッファに十分な空きがありません。(展開後データの長さ情報が壊れている可能性もあります。)" nla "ZLIB: Onvoldoende ruimte in uitgaande buffer (waarschijnlijk, de lengte van de ongecomprimeerde data was beschadigd)" por "ZLIB: Não suficiente espaço no buffer emissor (provavelmente, o comprimento dos dados descomprimidos está corrupto)" spa "ZLIB: No hay suficiente espacio en el búfer de salida (probablemente, el tamaño de datos descomprimidos fué corrompido)" ER_ZLIB_Z_DATA_ERROR chi "ZLIB:输入数据已损坏" eng "ZLIB: Input data corrupted" ger "ZLIB: Eingabedaten beschädigt" jpn "ZLIB: 入力データが壊れています。" nla "ZLIB: Invoer data beschadigd" por "ZLIB: Dados de entrada está corrupto" spa "ZLIB: Dato de entrada corrupto" ER_CUT_VALUE_GROUP_CONCAT chi "group_concat()削减了行%u. %s" eng "Row %u was cut by %s)" spa "La fila %u ha sido cortada por %s)" ER_WARN_TOO_FEW_RECORDS 01000 chi "行%lu不包含所有列的数据" eng "Row %lu doesn't contain data for all columns" ger "Zeile %lu enthält nicht für alle Felder Daten" jpn "行 %lu はすべての列へのデータを含んでいません。" nla "Rij %lu bevat niet de data voor alle kolommen" por "Conta de registro é menor que a conta de coluna na linha %lu" spa "La fila %lu no contiene datos para todas las columnas" ER_WARN_TOO_MANY_RECORDS 01000 chi "行%lu被截断;它包含的数据比输入列更多" eng "Row %lu was truncated; it contained more data than there were input columns" ger "Zeile %lu gekürzt, die Zeile enthielt mehr Daten, als es Eingabefelder gibt" jpn "行 %lu はデータを切り捨てられました。列よりも多いデータを含んでいました。" nla "Regel %lu ingekort, bevatte meer data dan invoer kolommen" por "Conta de registro é maior que a conta de coluna na linha %lu" spa "La fila %lu fué truncada; contenía más datos que columnas de entrada" ER_WARN_NULL_TO_NOTNULL 22004 chi "列设置为默认值; NULL在行'%s'中提供给了NOT NULL列%lu" eng "Column set to default value; NULL supplied to NOT NULL column '%s' at row %lu" ger "Feld auf Vorgabewert gesetzt, da NULL für NOT-NULL-Feld '%s' in Zeile %lu angegeben" jpn "列にデフォルト値が設定されました。NOT NULLの列 '%s' に 行 %lu で NULL が与えられました。" por "Dado truncado, NULL fornecido para NOT NULL coluna '%s' na linha %lu" spa "Columna puesta a valor por defecto; NULL suministrado para columna NOT NULL '%s' en la fila %lu" ER_WARN_DATA_OUT_OF_RANGE 22003 chi "列'%s'行%lu的值超出范围" eng "Out of range value for column '%s' at row %lu" spa "Valor fuera de rango para la columna '%s' en la fila %lu" WARN_DATA_TRUNCATED 01000 chi "数据被截断,在列'%s', 行%lu" eng "Data truncated for column '%s' at row %lu" ger "Daten abgeschnitten für Feld '%s' in Zeile %lu" jpn "列 '%s' の 行 %lu でデータが切り捨てられました。" por "Dado truncado para coluna '%s' na linha %lu" spa "Datos truncados para la columna '%s' en la fila %lu" ER_WARN_USING_OTHER_HANDLER chi "使用存储引擎%s 表格'%s'" eng "Using storage engine %s for table '%s'" ger "Speicher-Engine %s wird für Tabelle '%s' benutzt" hindi "स्टोरेज इंजन %s का इस्तेमाल टेबल '%s' के लिए किया जा रहा है" jpn "ストレージエンジン %s が表 '%s' に利用されています。" por "Usando engine de armazenamento %s para tabela '%s'" spa "Usando motor de almacenaje %s para la tabla '%s'" swe "Använder handler %s för tabell '%s'" ER_CANT_AGGREGATE_2COLLATIONS chi "非法混合collations(%s,%s)和(%s,%s),用于操作'%s'" eng "Illegal mix of collations (%s,%s) and (%s,%s) for operation '%s'" ger "Unerlaubte Mischung von Sortierreihenfolgen (%s, %s) und (%s, %s) für Operation '%s'" jpn "照合順序 (%s,%s) と (%s,%s) の混在は操作 '%s' では不正です。" por "Combinação ilegal de collations (%s,%s) e (%s,%s) para operação '%s'" spa "Mezcla ilegal de cotejos (collations) (%s,%s) y (%s,%s) para la operación '%s'" ER_DROP_USER chi "无法删除一个或多个请求的用户" eng "Cannot drop one or more of the requested users" ger "Kann einen oder mehrere der angegebenen Benutzer nicht löschen" spa "No puedo eliminar uno o más de los usuarios solicitados" ER_REVOKE_GRANTS chi "无法为一个或多个请求的用户撤消所有权限" eng "Can't revoke all privileges for one or more of the requested users" ger "Kann nicht alle Berechtigungen widerrufen, die für einen oder mehrere Benutzer gewährt wurden" jpn "指定されたユーザーから指定された全ての権限を剥奪することができませんでした。" por "Não pode revocar todos os privilégios, grant para um ou mais dos usuários pedidos" spa "No puedo revocar todos los privilegios para uno o más de los usuarios solicitados" ER_CANT_AGGREGATE_3COLLATIONS chi "非法混合collations(%s,%s),(%s,%s)和(%s,%s),用于操作'%s'" eng "Illegal mix of collations (%s,%s), (%s,%s), (%s,%s) for operation '%s'" ger "Unerlaubte Mischung von Sortierreihenfolgen (%s, %s), (%s, %s), (%s, %s) für Operation '%s'" jpn "照合順序 (%s,%s), (%s,%s), (%s,%s) の混在は操作 '%s' では不正です。" por "Ilegal combinação de collations (%s,%s), (%s,%s), (%s,%s) para operação '%s'" spa "Mezcla ilegal de cotejos (collations) (%s,%s), (%s,%s), (%s,%s) para la operación '%s'" ER_CANT_AGGREGATE_NCOLLATIONS chi "非法混合collations操作'%s'" eng "Illegal mix of collations for operation '%s'" ger "Unerlaubte Mischung von Sortierreihenfolgen für Operation '%s'" jpn "操作 '%s' では不正な照合順序の混在です。" por "Ilegal combinação de collations para operação '%s'" spa "Mezcla ilegal de cotejos (collations) para la operación '%s'" ER_VARIABLE_IS_NOT_STRUCT chi "变量'%-.64s'不是可变组件(不能用作xxxx.variable_name)" eng "Variable '%-.64s' is not a variable component (can't be used as XXXX.variable_name)" ger "Variable '%-.64s' ist keine Variablen-Komponente (kann nicht als XXXX.variablen_name verwendet werden)" jpn "変数 '%-.64s' は構造変数の構成要素ではありません。(XXXX.変数名 という指定はできません。)" por "Variável '%-.64s' não é uma variável componente (Não pode ser usada como XXXX.variável_nome)" spa "La variable '%-.64s' no es un componente variable (No puede ser usada como XXXX.variable_name)" ER_UNKNOWN_COLLATION chi "未知的collation:'%-.64s'" eng "Unknown collation: '%-.64s'" ger "Unbekannte Sortierreihenfolge: '%-.64s'" jpn "不明な照合順序: '%-.64s'" por "Collation desconhecida: '%-.64s'" spa "Cotejo (Collation) desconocido: '%-.64s'" ER_SLAVE_IGNORED_SSL_PARAMS chi "CHANGE MASTER中的SSL参数被忽略,因为此MariaDB从站未在没有SSL支持的情况下编译;如果启动了SSL的MariaDB从站,则可以使用它们" eng "SSL parameters in CHANGE MASTER are ignored because this MariaDB slave was compiled without SSL support; they can be used later if MariaDB slave with SSL is started" ger "SSL-Parameter in CHANGE MASTER werden ignoriert, weil dieser MariaDB-Slave ohne SSL-Unterstützung kompiliert wurde. Sie können aber später verwendet werden, wenn ein MariaDB-Slave mit SSL gestartet wird" jpn "このMariaDBスレーブはSSLサポートを含めてコンパイルされていないので、CHANGE MASTER のSSLパラメータは無視されました。今後SSLサポートを持つMariaDBスレーブを起動する際に利用されます。" por "SSL parâmetros em CHANGE MASTER são ignorados porque este escravo MariaDB foi compilado sem o SSL suporte. Os mesmos podem ser usados mais tarde quando o escravo MariaDB com SSL seja iniciado." spa "Los parámetros SSL en CHANGE MASTER son ignorados porque este esclavo MariaDB fue compilado sin soporte SSL; pueden ser usados después cuando el esclavo MariaDB con SSL sea arrancado" ER_SERVER_IS_IN_SECURE_AUTH_MODE chi "服务器在--secure-auth模式下运行,但'%s'@'%s'具有旧格式的密码;请将密码更改为新格式" eng "Server is running in --secure-auth mode, but '%s'@'%s' has a password in the old format; please change the password to the new format" ger "Server läuft im Modus --secure-auth, aber '%s'@'%s' hat ein Passwort im alten Format. Bitte Passwort ins neue Format ändern" jpn "サーバーは --secure-auth モードで稼働しています。しかし '%s'@'%s' は古い形式のパスワードを使用しています。新しい形式のパスワードに変更してください。" por "Servidor está rodando em --secure-auth modo, porêm '%s'@'%s' tem senha no formato antigo; por favor troque a senha para o novo formato" rus "Сервер запущен в режиме --secure-auth (безопасной авторизации), но для пользователя '%s'@'%s' пароль сохранён в старом формате; необходимо обновить формат пароля" spa "El servidor se está ejecutando en modo --secure-auth, pero '%s'@'%s' tiene una contraseña con formato antiguo; por favor cambie la contraseña al nuevo formato" ER_WARN_FIELD_RESOLVED chi "列或参考'%-.192s%s%-.192s%s%-.192s' 在SELECT #%d 中, 在SELECT #%d中得到解决" eng "Field or reference '%-.192s%s%-.192s%s%-.192s' of SELECT #%d was resolved in SELECT #%d" ger "Feld oder Verweis '%-.192s%s%-.192s%s%-.192s' im SELECT-Befehl Nr. %d wurde im SELECT-Befehl Nr. %d aufgelöst" jpn "フィールドまたは参照 '%-.192s%s%-.192s%s%-.192s' は SELECT #%d ではなく、SELECT #%d で解決されました。" por "Campo ou referência '%-.192s%s%-.192s%s%-.192s' de SELECT #%d foi resolvido em SELECT #%d" rus "Поле или ссылка '%-.192s%s%-.192s%s%-.192s' из SELECTа #%d была найдена в SELECTе #%d" spa "El campo o la referencia '%-.192s%s%-.192s%s%-.192s' de SELECT #%d se resolvió en SELECT #%d" ukr "Стовбець або посилання '%-.192s%s%-.192s%s%-.192s' із SELECTу #%d було знайдене у SELECTі #%d" ER_BAD_SLAVE_UNTIL_COND chi "START SLAVE UNTIL的参数或参数的组合不正确" eng "Incorrect parameter or combination of parameters for START SLAVE UNTIL" ger "Falscher Parameter oder falsche Kombination von Parametern für START SLAVE UNTIL" jpn "START SLAVE UNTIL へのパラメータまたはその組み合わせが不正です。" por "Parâmetro ou combinação de parâmetros errado para START SLAVE UNTIL" spa "Parámetro incorrecto o combinación de parámetros para START SLAVE UNTIL" ER_MISSING_SKIP_SLAVE chi "START SLAVE UNTIL进行逐步复制时建议使用--skip-slave-start;否则,如果有意外的Slave的mariadbd重启,可能有问题" eng "It is recommended to use --skip-slave-start when doing step-by-step replication with START SLAVE UNTIL; otherwise, you will get problems if you get an unexpected slave's mariadbd restart" ger "Es wird empfohlen, mit --skip-slave-start zu starten, wenn mit START SLAVE UNTIL eine Schritt-für-Schritt-Replikation ausgeführt wird. Ansonsten gibt es Probleme, wenn ein Slave-Server unerwartet neu startet" jpn "START SLAVE UNTIL で段階的にレプリケーションを行う際には、--skip-slave-start オプションを使うことを推奨します。使わない場合、スレーブのmariadbdが不慮の再起動をすると問題が発生します。" por "É recomendado para rodar com --skip-slave-start quando fazendo replicação passo-por-passo com START SLAVE UNTIL, de outra forma você não está seguro em caso de inesperada reinicialição do mariadbd escravo" spa "Se recomienda usar --skip-slave-start al hacer réplica paso a paso con START SLAVE UNTIL; en caso contrario, obtendrá problemas si tiene lugar un rearranque inesperado del esclavo mariadb" ER_UNTIL_COND_IGNORED chi "不能启动SQL线程所以UNTIL选项被忽略" eng "SQL thread is not to be started so UNTIL options are ignored" ger "SQL-Thread soll nicht gestartet werden. Daher werden UNTIL-Optionen ignoriert" jpn "スレーブSQLスレッドが開始されないため、UNTILオプションは無視されました。" por "Thread SQL não pode ser inicializado tal que opções UNTIL são ignoradas" spa "Un hilo (thread) SQL no ha de ser arrancado de esa manera HASTA que las opciones sean ignordas" ER_WRONG_NAME_FOR_INDEX 42000 chi "索引名称'%-.100s'不正确" eng "Incorrect index name '%-.100s'" ger "Falscher Indexname '%-.100s'" jpn "索引名 '%-.100s' は不正です。" por "Incorreto nome de índice '%-.100s'" spa "Nombre de índice incorrecto '%-.100s'" swe "Felaktigt index namn '%-.100s'" ER_WRONG_NAME_FOR_CATALOG 42000 chi "目录名称'%-.100s'不正确" eng "Incorrect catalog name '%-.100s'" ger "Falscher Katalogname '%-.100s'" jpn "カタログ名 '%-.100s' は不正です。" por "Incorreto nome de catálogo '%-.100s'" spa "Nombre de catálogo incorrecto '%-.100s'" swe "Felaktigt katalog namn '%-.100s'" ER_WARN_QC_RESIZE chi "设置查询缓存值%llu失败;新查询缓存值为%lu" eng "Query cache failed to set size %llu; new query cache size is %lu" ger "Änderung der Query-Cache-Größe auf %llu fehlgeschlagen; neue Query-Cache-Größe ist %lu" por "Falha em Query cache para configurar tamanho %llu, novo tamanho de query cache é %lu" rus "Кеш запросов не может установить размер %llu, новый размер кеша зпросов - %lu" spa "La caché de consulta (query) ha fallado al poner el tamaño %llu; el nuevo tamaño de caché de consulta (query) es %lu" swe "Storleken av "Query cache" kunde inte sättas till %llu, ny storlek är %lu" ukr "Кеш запитів неспроможен встановити розмір %llu, новий розмір кеша запитів - %lu" ER_BAD_FT_COLUMN chi "列'%-.192s'不能成为全文索引的一部分" eng "Column '%-.192s' cannot be part of FULLTEXT index" ger "Feld '%-.192s' kann nicht Teil eines FULLTEXT-Index sein" jpn "列 '%-.192s' は全文索引のキーにはできません。" por "Coluna '%-.192s' não pode ser parte de índice FULLTEXT" spa "La columna '%-.192s' no puede format parte de índice FULLTEXT" swe "Kolumn '%-.192s' kan inte vara del av ett FULLTEXT index" ER_UNKNOWN_KEY_CACHE chi "未知索引缓存'%-.100s'" eng "Unknown key cache '%-.100s'" ger "Unbekannter Schlüssel-Cache '%-.100s'" jpn "'%-.100s' は不明なキーキャッシュです。" por "Key cache desconhecida '%-.100s'" spa "Caché de clave desconocida '%-.100s'" swe "Okänd nyckel cache '%-.100s'" ER_WARN_HOSTNAME_WONT_WORK chi "MariaDB以-skip-name-resolve模式启动;想用grant,您必须重新启动,不用这个选项" eng "MariaDB is started in --skip-name-resolve mode; you must restart it without this switch for this grant to work" ger "MariaDB wurde mit --skip-name-resolve gestartet. Diese Option darf nicht verwendet werden, damit diese Rechtevergabe möglich ist" jpn "MariaDBは --skip-name-resolve モードで起動しています。このオプションを外して再起動しなければ、この権限操作は機能しません。" por "MariaDB foi inicializado em modo --skip-name-resolve. Você necesita reincializá-lo sem esta opção para este grant funcionar" spa "MariaDB ha sido arrancada en modo --skip-name-resolve; vd necesita reinicializarla sin esta opción para que esta concesión funcione" ER_UNKNOWN_STORAGE_ENGINE 42000 chi "未知的存储引擎'%s'" eng "Unknown storage engine '%s'" ger "Unbekannte Speicher-Engine '%s'" hindi "अज्ञात स्टोरेज इंजन '%s'" jpn "'%s' は不明なストレージエンジンです。" por "Motor de tabela desconhecido '%s'" spa "Motor de almacenaje '%s' desconocido" ER_WARN_DEPRECATED_SYNTAX chi "弃用'%s',将在将来的版本中删除。请使用%s" eng "'%s' is deprecated and will be removed in a future release. Please use %s instead" ger "'%s' ist veraltet. Bitte benutzen Sie '%s'" jpn "'%s' は将来のリリースで廃止予定です。代わりに %s を使用してください。" por "'%s' é desatualizado. Use '%s' em seu lugar" spa "'%s' está obsoleto y será quitado en una entrega futura, use '%s' en su lugar" ER_NON_UPDATABLE_TABLE chi "目标表%-.100s多个%s不可更新" eng "The target table %-.100s of the %s is not updatable" ger "Die Zieltabelle %-.100s von %s ist nicht aktualisierbar" jpn "対象表 %-.100s は更新可能ではないので、%s を行えません。" por "A tabela destino %-.100s do %s não é atualizável" rus "Таблица %-.100s в %s не может изменятся" spa "La tabla destino %-.100s del %s no es actualizable" swe "Tabell %-.100s använd med '%s' är inte uppdateringsbar" ukr "Таблиця %-.100s у %s не може оновлюватись" ER_FEATURE_DISABLED chi "'%s'功能被禁用;您需要MariaDB以'%s'构建以使其工作" eng "The '%s' feature is disabled; you need MariaDB built with '%s' to have it working" ger "Das Feature '%s' ist ausgeschaltet, Sie müssen MariaDB mit '%s' übersetzen, damit es verfügbar ist" jpn "機能 '%s' は無効です。利用するためには '%s' を含めてビルドしたMariaDBが必要です。" por "O recurso '%s' foi desativado; você necessita MariaDB construído com '%s' para ter isto funcionando" spa "La característica '%s' fue deshabilitada; usted necesita construir MariaDB con '%s' para tener eso funcionando" swe "'%s' är inte aktiverad; För att aktivera detta måste du bygga om MariaDB med '%s' definierad" ER_OPTION_PREVENTS_STATEMENT chi "MariaDB服务器使用%s选项运行,因此无法执行此语句" eng "The MariaDB server is running with the %s option so it cannot execute this statement" ger "Der MariaDB-Server läuft mit der Option %s und kann diese Anweisung deswegen nicht ausführen" jpn "MariaDBサーバーが %s オプションで実行されているので、このステートメントは実行できません。" por "O servidor MariaDB está rodando com a opção %s razão pela qual não pode executar esse commando" spa "El servidor MariaDB se está ejecutando con la opción %s por lo que no se puede ejecutar esta sentencia" swe "MariaDB är startad med %s. Pga av detta kan du inte använda detta kommando" ER_DUPLICATED_VALUE_IN_TYPE chi "列'%-.100s'有重复的值'%-.64s'在%s" eng "Column '%-.100s' has duplicated value '%-.64s' in %s" ger "Feld '%-.100s' hat doppelten Wert '%-.64s' in %s" jpn "列 '%-.100s' で、重複する値 '%-.64s' が %s に指定されています。" por "Coluna '%-.100s' tem valor duplicado '%-.64s' em %s" spa "La columna '%-.100s' tiene valor duplicado '%-.64s' en %s" ER_TRUNCATED_WRONG_VALUE 22007 chi "截断的不正确%-.32T值:'%-.128T'" eng "Truncated incorrect %-.32T value: '%-.128T'" ger "Falscher %-.32T-Wert gekürzt: '%-.128T'" jpn "不正な %-.32T の値が切り捨てられました。: '%-.128T'" por "Truncado errado %-.32T valor: '%-.128T'" spa "Truncado incorrecto %-.32T valor: '%-.128T'" ER_TOO_MUCH_AUTO_TIMESTAMP_COLS chi "表定义不正确;默认或ON UPDATE中只能有一个带有CURRENT_TIMESTAMP的TIMESTAMP列" eng "Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause" ger "Fehlerhafte Tabellendefinition. Es kann nur eine einzige TIMESTAMP-Spalte mit CURRENT_TIMESTAMP als DEFAULT oder in einer ON-UPDATE-Klausel geben" jpn "不正な表定義です。DEFAULT句またはON UPDATE句に CURRENT_TIMESTAMP をともなうTIMESTAMP型の列は1つまでです。" por "Incorreta definição de tabela; Pode ter somente uma coluna TIMESTAMP com CURRENT_TIMESTAMP em DEFAULT ou ON UPDATE cláusula" spa "Definición incorrecta de tabla; solamente puede haber una columna TIMESTAMP con CURRENT_TIMESTAMP en DEFAULT o en cláusula ON UPDATE" ER_INVALID_ON_UPDATE chi "在'%-.192s'列的ON UPDATE子句上无效" eng "Invalid ON UPDATE clause for '%-.192s' column" ger "Ungültige ON-UPDATE-Klausel für Spalte '%-.192s'" jpn "列 '%-.192s' に ON UPDATE句は無効です。" por "Inválida cláusula ON UPDATE para campo '%-.192s'" spa "Cláusula ON UPDATE inválida para la columna '%-.192s'" ER_UNSUPPORTED_PS chi "尚未在prepared statement协议中支持此命令" eng "This command is not supported in the prepared statement protocol yet" ger "Dieser Befehl wird im Protokoll für vorbereitete Anweisungen noch nicht unterstützt" spa "Este comando no se encuentra soportado para protocolo de sentencia preparada, aún" ER_GET_ERRMSG chi "出错%d '%-.200s'来自%s" dan "Modtog fejl %d '%-.200s' fra %s" eng "Got error %d '%-.200s' from %s" ger "Fehler %d '%-.200s' von %s" jpn "エラー %d '%-.200s' が %s から返されました。" nor "Mottok feil %d '%-.200s' fa %s" norwegian-ny "Mottok feil %d '%-.200s' fra %s" spa "Obtenido error %d '%-.200s' desde %s" ER_GET_TEMPORARY_ERRMSG chi "出临时错误%d '%-.200s'来自%s" dan "Modtog temporary fejl %d '%-.200s' fra %s" eng "Got temporary error %d '%-.200s' from %s" ger "Temporärer Fehler %d '%-.200s' von %s" jpn "一時エラー %d '%-.200s' が %s から返されました。" nor "Mottok temporary feil %d '%-.200s' fra %s" norwegian-ny "Mottok temporary feil %d '%-.200s' fra %s" spa "Obtenido error temporal %d '%-.200s' desde %s" ER_UNKNOWN_TIME_ZONE chi "未知或不正确的时区:'%-.64s'" eng "Unknown or incorrect time zone: '%-.64s'" ger "Unbekannte oder falsche Zeitzone: '%-.64s'" spa "Zona temporal desconocida o incorrecta: '%-.64s'" ER_WARN_INVALID_TIMESTAMP chi "无效TIMESTAMP值:列'%s' 行'%lu'" eng "Invalid TIMESTAMP value in column '%s' at row %lu" ger "Ungültiger TIMESTAMP-Wert in Feld '%s', Zeile %lu" spa "Valor inválido de SELLO TEMPORAL (TIMESTAMP) en la columna '%s' de la fila %lu" ER_INVALID_CHARACTER_STRING chi "无效的%s字符串:'%.64T'" eng "Invalid %s character string: '%.64T'" ger "Ungültiger %s-Zeichen-String: '%.64T'" spa "Cadena de carácter %s inválida: '%.64T'" ER_WARN_ALLOWED_PACKET_OVERFLOWED chi "%s()的结果大于max_allowed_packet(%ld) - 截断" eng "Result of %s() was larger than max_allowed_packet (%ld) - truncated" ger "Ergebnis von %s() war größer als max_allowed_packet (%ld) Bytes und wurde deshalb gekürzt" spa "El resultado de %s() ha sido mayor que max_allowed_packet (%ld) - truncado" ER_CONFLICTING_DECLARATIONS chi "矛盾语句:'%s%s'和'%s%s'" eng "Conflicting declarations: '%s%s' and '%s%s'" ger "Widersprüchliche Deklarationen: '%s%s' und '%s%s'" spa "Declaraciones conflictivas: '%s%s' y '%s%s'" ER_SP_NO_RECURSIVE_CREATE 2F003 chi "无法从另一个存储过程中创建%s" eng "Can't create a %s from within another stored routine" ger "Kann kein %s innerhalb einer anderen gespeicherten Routine erzeugen" spa "No puedo crear una %s desde dentro de otra rutina almacenada" ER_SP_ALREADY_EXISTS 42000 chi "%s%s已经存在" eng "%s %s already exists" ger "%s %s existiert bereits" hindi "%s %s पहले से ही मौजूद है" spa "%s %s ya existe" ER_SP_DOES_NOT_EXIST 42000 chi "%s%s不存在" eng "%s %s does not exist" ger "%s %s existiert nicht" hindi "%s %s मौजूद नहीं है" spa "%s %s no existe" ER_SP_DROP_FAILED chi "未能DROP%s%s" eng "Failed to DROP %s %s" ger "DROP %s %s ist fehlgeschlagen" hindi "%s %s को ड्रॉप करने में असफल रहे" spa "No pude ELIMINAR (DROP) %s %s" ER_SP_STORE_FAILED chi "无法创建%s%s" eng "Failed to CREATE %s %s" ger "CREATE %s %s ist fehlgeschlagen" hindi "%s %s को बनाने में असफल रहे" spa "No pude CREAR %s %s" ER_SP_LILABEL_MISMATCH 42000 chi "%s,没有匹配标签:%s" eng "%s with no matching label: %s" ger "%s ohne passende Marke: %s" spa "%s sin etiqueta coincidente: %s" ER_SP_LABEL_REDEFINE 42000 chi "重新定义标签%s" eng "Redefining label %s" ger "Neudefinition der Marke %s" spa "Redefiniendo etiqueta %s" ER_SP_LABEL_MISMATCH 42000 chi "没有匹配的最终标签%s" eng "End-label %s without match" ger "Ende-Marke %s ohne zugehörigen Anfang" spa "Etiqueta-Final %s sin coincidencia" ER_SP_UNINIT_VAR 01000 chi "参考未初始化的变量%s" eng "Referring to uninitialized variable %s" ger "Zugriff auf nichtinitialisierte Variable %s" spa "Refiriéndose a variable %s sin inicializar" ER_SP_BADSELECT 0A000 chi "PROCEDURE%s不能返回给定上下文中的结果集" eng "PROCEDURE %s can't return a result set in the given context" ger "PROCEDURE %s kann im gegebenen Kontext keine Ergebnismenge zurückgeben" spa "El PROCEDIMIENTO (PROCEDURE) %s no puede devolver un conjunto de resultados en el contexto dado" ER_SP_BADRETURN 42000 chi "RETURN仅允许在函数中" eng "RETURN is only allowed in a FUNCTION" ger "RETURN ist nur innerhalb einer FUNCTION erlaubt" hindi "RETURN को केवल FUNCTION में इस्तेमाल किया जा सकता है" spa "RETURN sólo se permite dentro de una FUNCIÓN" ER_SP_BADSTATEMENT 0A000 chi "%s不允许在存储过程中" eng "%s is not allowed in stored procedures" ger "%s ist in gespeicherten Prozeduren nicht erlaubt" hindi "%s को STORED PROCEDURE में इस्तेमाल नहीं किया जा सकता है" spa "%s no permitido en procedimientos almacenados" ER_UPDATE_LOG_DEPRECATED_IGNORED 42000 chi "更新日志被弃用并由二进制日志替换;SET SQL_LOG_UPDATE已被忽略。此选项将在MariaDB 5.6中删除" eng "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been ignored. This option will be removed in MariaDB 5.6" ger "Das Update-Log ist veraltet und wurde durch das Binär-Log ersetzt. SET SQL_LOG_UPDATE wird ignoriert. Diese Option wird in MariaDB 5.6 entfernt" spa "El historial (log) de actualización se encuentra obsoleto y reemplazado por el historial (log) binario; SET SQL_LOG_UPDATE ha sido ignorado. Esta opción será quitada en MariaDB 5.6" ER_UPDATE_LOG_DEPRECATED_TRANSLATED 42000 chi "更新日志被弃用并由二进制日志替换;SET SQL_LOG_UPDATE已被转换为设置SQL_LOG_BIN。此选项将在MariaDB 5.6中删除" eng "The update log is deprecated and replaced by the binary log; SET SQL_LOG_UPDATE has been translated to SET SQL_LOG_BIN. This option will be removed in MariaDB 5.6" ger "Das Update-Log ist veraltet und wurde durch das Binär-Log ersetzt. SET SQL_LOG_UPDATE wurde in SET SQL_LOG_BIN übersetzt. Diese Option wird in MariaDB 5.6 entfernt" spa "El historial (log) de actualización se encuentra obsoleto y reemplazado por el historial binario; SET SQL_LOG_UPDATE ha sido traducido a SET SQL_LOG_BIN. Esta opción será quitada en MariaDB 5.6" ER_QUERY_INTERRUPTED 70100 chi "查询执行中断" eng "Query execution was interrupted" ger "Ausführung der Abfrage wurde unterbrochen" spa "Se ha interrumpido la ejecución de la consulta (query)" ER_SP_WRONG_NO_OF_ARGS 42000 chi "%s%s的参数数量不正确;预期%u,得到%u" eng "Incorrect number of arguments for %s %s; expected %u, got %u" ger "Falsche Anzahl von Argumenten für %s %s; erwarte %u, erhalte %u" spa "Número incorrecto de argumentos para %s %s; se esperaba %u, se obtuvo %u" ER_SP_COND_MISMATCH 42000 chi "未定义的CONDITION:%s" eng "Undefined CONDITION: %s" ger "Undefinierte CONDITION: %s" spa "CONDICIÓN no definida: %s" ER_SP_NORETURN 42000 chi "FUNCTION%s中没有RETURN" eng "No RETURN found in FUNCTION %s" ger "Kein RETURN in FUNCTION %s gefunden" hindi "FUNCTION %s में कोई RETURN है" spa "No se hallado RETURN en FUNCIÓN %s" ER_SP_NORETURNEND 2F005 chi "FUNCTION%s结束但无RETURN" eng "FUNCTION %s ended without RETURN" ger "FUNCTION %s endete ohne RETURN" hindi "FUNCTION %s RETURN के बिना समाप्त हो गया" spa "La FUNCIÓN %s termina sin RETURN" ER_SP_BAD_CURSOR_QUERY 42000 chi "Cursor语句必须是选择" eng "Cursor statement must be a SELECT" ger "Cursor-Anweisung muss ein SELECT sein" spa "La sentencia de cursor debe de ser un SELECT" ER_SP_BAD_CURSOR_SELECT 42000 chi "Cursor SELECT不能有INTO" eng "Cursor SELECT must not have INTO" ger "Cursor-SELECT darf kein INTO haben" spa "El SELECT de cursor no debe de tener INTO" ER_SP_CURSOR_MISMATCH 42000 chi "未定义的CURSOR:%s" eng "Undefined CURSOR: %s" ger "Undefinierter CURSOR: %s" hindi "CURSOR %s अपरिभाषित है" spa "CURSOR indefinido: %s" ER_SP_CURSOR_ALREADY_OPEN 24000 chi "Cursor已经打开" eng "Cursor is already open" ger "Cursor ist schon geöffnet" hindi "CURSOR पहले से ही खुला है" spa "Cursor ya abierto" ER_SP_CURSOR_NOT_OPEN 24000 chi "Cursor未打开" eng "Cursor is not open" ger "Cursor ist nicht geöffnet" spa "Cursor no abierto" ER_SP_UNDECLARED_VAR 42000 chi "未定义的变量:%s" eng "Undeclared variable: %s" ger "Nicht deklarierte Variable: %s" spa "Variable sin declarar: %s" ER_SP_WRONG_NO_OF_FETCH_ARGS chi "FETCH变量数不正确" eng "Incorrect number of FETCH variables" ger "Falsche Anzahl von FETCH-Variablen" spa "Incorrecto número de variables FETCH" ER_SP_FETCH_NO_DATA 02000 chi "没有数据 - 零行被选择或处理" eng "No data - zero rows fetched, selected, or processed" ger "Keine Daten - null Zeilen geholt (fetch), ausgewählt oder verarbeitet" spa "No hay datos - cero filas logradas, seleccionadas o procesadas" ER_SP_DUP_PARAM 42000 chi "重复参数:%s" eng "Duplicate parameter: %s" ger "Doppelter Parameter: %s" spa "Parámetro duplicado: %s" ER_SP_DUP_VAR 42000 chi "重复变量:%s" eng "Duplicate variable: %s" ger "Doppelte Variable: %s" spa "Variable duplicada: %s" ER_SP_DUP_COND 42000 chi "重复条件:%s" eng "Duplicate condition: %s" ger "Doppelte Bedingung: %s" spa "Condición duplicada: %s" ER_SP_DUP_CURS 42000 chi "重复Cursor:%s" eng "Duplicate cursor: %s" ger "Doppelter Cursor: %s" spa "Cursor duplicado: %s" ER_SP_CANT_ALTER chi "未能ALTER %s%s" eng "Failed to ALTER %s %s" ger "ALTER %s %s fehlgeschlagen" hindi "%s %s को ALTER करने में असफल रहे" spa "Fallo en ALTER %s %s" ER_SP_SUBSELECT_NYI 0A000 chi "不支持子查询值" eng "Subquery value not supported" ger "Subquery-Wert wird nicht unterstützt" spa "Valor de Subconsulta (subquery) no soportado" ER_STMT_NOT_ALLOWED_IN_SF_OR_TRG 0A000 chi "在存储的函数或触发中不允许%s" eng "%s is not allowed in stored function or trigger" ger "%s ist in gespeicherten Funktionen und in Triggern nicht erlaubt" spa "%s no permitido en función almacenada o en disparador" ER_SP_VARCOND_AFTER_CURSHNDLR 42000 chi "变量或条件声明在cursor或处理程序定义之后" eng "Variable or condition declaration after cursor or handler declaration" ger "Deklaration einer Variablen oder einer Bedingung nach der Deklaration eines Cursors oder eines Handlers" spa "Declaración de variable o condición tras declaración de cursor o manejador" ER_SP_CURSOR_AFTER_HANDLER 42000 chi "处理程序声明后的cursor声明" eng "Cursor declaration after handler declaration" ger "Deklaration eines Cursors nach der Deklaration eines Handlers" spa "Declaración de cursor tras declaración de manejador" ER_SP_CASE_NOT_FOUND 20000 chi "未能在CASE语句找到Case" eng "Case not found for CASE statement" ger "Fall für CASE-Anweisung nicht gefunden" spa "Caso no hallado para sentencia CASE" ER_FPARSER_TOO_BIG_FILE chi "配置文件'%-.192s'太大了" eng "Configuration file '%-.192s' is too big" ger "Konfigurationsdatei '%-.192s' ist zu groß" rus "Слишком большой конфигурационный файл '%-.192s'" spa "El fichero/archivo de configuración '%-.192s' es demasiado grande" ukr "Занадто великий конфігураційний файл '%-.192s'" ER_FPARSER_BAD_HEADER chi "文件'%-.192s'中的文件类型格式有问题" eng "Malformed file type header in file '%-.192s'" ger "Nicht wohlgeformter Dateityp-Header in Datei '%-.192s'" rus "Неверный заголовок типа файла '%-.192s'" spa "Cabecera de tipo de fichero/archivo malformada en fichero/archivo '%-.192s'" ukr "Невірний заголовок типу у файлі '%-.192s'" ER_FPARSER_EOF_IN_COMMENT chi "解析评论'%-.200s'时意外碰到EOF" eng "Unexpected end of file while parsing comment '%-.200s'" ger "Unerwartetes Dateiende beim Parsen des Kommentars '%-.200s'" rus "Неожиданный конец файла в коментарии '%-.200s'" spa "Inesperado fin de fichero/archivo mientras se analizaba comentario '%-.200s'" ukr "Несподіванний кінець файлу у коментарі '%-.200s'" ER_FPARSER_ERROR_IN_PARAMETER chi "解析参数'%-.192s'时出错(行:'%-.192s')" eng "Error while parsing parameter '%-.192s' (line: '%-.192s')" ger "Fehler beim Parsen des Parameters '%-.192s' (Zeile: '%-.192s')" rus "Ошибка при распознавании параметра '%-.192s' (строка: '%-.192s')" spa "Error mientras se analizaba parámetro '%-.192s' (línea: '%-.192s')" ukr "Помилка в роспізнаванні параметру '%-.192s' (рядок: '%-.192s')" ER_FPARSER_EOF_IN_UNKNOWN_PARAMETER chi "跳过未知参数'%-.192s'时意外碰到EOF" eng "Unexpected end of file while skipping unknown parameter '%-.192s'" ger "Unerwartetes Dateiende beim Überspringen des unbekannten Parameters '%-.192s'" rus "Неожиданный конец файла при пропуске неизвестного параметра '%-.192s'" spa "Inesperado fin de fichero/archivo mientras se saltaba parámetro desconocido '%-.192s'" ukr "Несподіванний кінець файлу у спробі проминути невідомий параметр '%-.192s'" ER_VIEW_NO_EXPLAIN chi "ANALYZE/EXPLAIN/SHOW无法进行;缺乏底层表的特权" eng "ANALYZE/EXPLAIN/SHOW can not be issued; lacking privileges for underlying table" ger "ANALYZE/EXPLAIN/SHOW kann nicht verlangt werden. Rechte für zugrunde liegende Tabelle fehlen" rus "ANALYZE/EXPLAIN/SHOW не может быть выполнено; недостаточно прав на таблицы запроса" spa "ANALYZE/EXPLAIN/SHOW no puede ser emitdo; privilegios insuficientes para tabla subyacente" ukr "ANALYZE/EXPLAIN/SHOW не може бути виконано; немає прав на таблиці запиту" ER_FRM_UNKNOWN_TYPE chi "文件'%-.192s'在其标题中有未知的'%-.64s'" eng "File '%-.192s' has unknown type '%-.64s' in its header" ger "Datei '%-.192s' hat unbekannten Typ '%-.64s' im Header" rus "Файл '%-.192s' содержит неизвестный тип '%-.64s' в заголовке" spa "El fichero/archivo '%-.192s' es de un tipo desconocido '%-.64s' en su cabecera" ukr "Файл '%-.192s' має невідомий тип '%-.64s' у заголовку" ER_WRONG_OBJECT chi "'%-.192s.%-.192s'不是'%s'类" eng "'%-.192s.%-.192s' is not of type '%s'" ger "'%-.192s.%-.192s' ist nicht %s" rus "'%-.192s.%-.192s' - не %s" spa "'%-.192s.%-.192s' no es del tipo '%s'" ukr "'%-.192s.%-.192s' не є %s" ER_NONUPDATEABLE_COLUMN chi "列'%-.192s'不可更新" eng "Column '%-.192s' is not updatable" ger "Feld '%-.192s' ist nicht aktualisierbar" rus "Столбец '%-.192s' не обновляемый" spa "La columna '%-.192s' no es actualiable" ukr "Стовбець '%-.192s' не може бути зминений" ER_VIEW_SELECT_DERIVED chi "View的Select的FROM包含子查询" eng "View's SELECT contains a subquery in the FROM clause" ger "SELECT der View enthält eine Subquery in der FROM-Klausel" rus "View SELECT содержит подзапрос в конструкции FROM" spa "El SELECT de la vista contiene una subconsulta (subquery) en la cláusula FROM" ukr "View SELECT має підзапит у конструкції FROM" # Not used any more, syntax error is returned instead ER_VIEW_SELECT_CLAUSE chi "View的Select包含“%s”子句" eng "View's SELECT contains a '%s' clause" ger "SELECT der View enthält eine '%s'-Klausel" rus "View SELECT содержит конструкцию '%s'" spa "El SELECT de la vista contiene una cláusula '%s'" ukr "View SELECT має конструкцію '%s'" ER_VIEW_SELECT_VARIABLE chi "View的选择包含变量或参数" eng "View's SELECT contains a variable or parameter" ger "SELECT der View enthält eine Variable oder einen Parameter" rus "View SELECT содержит переменную или параметр" spa "El SELECT de la vista contiene una variable o un parámetro" ukr "View SELECT має зминну або параметер" ER_VIEW_SELECT_TMPTABLE chi "View的SELECT指的是临时表'%-.192s'" eng "View's SELECT refers to a temporary table '%-.192s'" ger "SELECT der View verweist auf eine temporäre Tabelle '%-.192s'" rus "View SELECT содержит ссылку на временную таблицу '%-.192s'" spa "El SELECT de la vista se refiere a una tabla temporal '%-.192s'" ukr "View SELECT використовує тимчасову таблицю '%-.192s'" ER_VIEW_WRONG_LIST chi "View的选择和VIEW的字段列表具有不同的列计数" eng "View's SELECT and view's field list have different column counts" ger "SELECT- und Feldliste der Views haben unterschiedliche Anzahlen von Spalten" rus "View SELECT и список полей view имеют разное количество столбцов" spa "El SELECT de la vista y la lista de campos de la vista tienen un contador diferente de columnas" ukr "View SELECT і перелік стовбців view мають різну кількість сковбців" ER_WARN_VIEW_MERGE chi "View合并算法目前不能使用(假设未定义的算法)" eng "View merge algorithm can't be used here for now (assumed undefined algorithm)" ger "View-Merge-Algorithmus kann hier momentan nicht verwendet werden (undefinierter Algorithmus wird angenommen)" rus "Алгоритм слияния view не может быть использован сейчас (алгоритм будет неопеределенным)" spa "El algoritmo de fusión de la vista no se puede usar aquí por ahora (se asume algoritmo indefinido)" ukr "Алгоритм зливання view не може бути використаний зараз (алгоритм буде невизначений)" ER_WARN_VIEW_WITHOUT_KEY chi "更新的视图没有底层表的完整键" eng "View being updated does not have complete key of underlying table in it" ger "Die aktualisierte View enthält nicht den vollständigen Schlüssel der zugrunde liegenden Tabelle" rus "Обновляемый view не содержит ключа использованных(ой) в нем таблиц(ы)" spa "La vista que se está actualizando no tiene clave completa de la tabla subyacente que contiene" ukr "View, що оновлюеться, не містить повного ключа таблиці(ь), що викорістана в ньюому" ER_VIEW_INVALID chi "View'%-.192s.%-.192s'引用无效的表、列、函数、或者函数或View缺乏使用权" eng "View '%-.192s.%-.192s' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them" spa "La vista '%-.192s.%-.192s' hace referencia a tabla(s) o columna(s) o función(es) inválida(s) o al definidor/invocador de vista le faltan derechos para usarlos" ER_SP_NO_DROP_SP chi "无法从另一个存储的例程中删除或更改%s" eng "Can't drop or alter a %s from within another stored routine" ger "Kann eine %s nicht von innerhalb einer anderen gespeicherten Routine löschen oder ändern" spa "No puedo eliminar o alterar una %s desde dentro de otra rutina almacenada" ER_SP_GOTO_IN_HNDLR chi "在存储过程处理程序中不允许GOTO" eng "GOTO is not allowed in a stored procedure handler" ger "GOTO ist im Handler einer gespeicherten Prozedur nicht erlaubt" spa "GOTO no permitido en manejador de procedimiento almacenado" ER_TRG_ALREADY_EXISTS chi "触发'%s'已经存在" eng "Trigger '%s' already exists" ger "Trigger '%s' existiert bereits" hindi "TRIGGER '%s' पहले से मौजूद है" spa "Ya existe el disparador `%s`" ER_TRG_DOES_NOT_EXIST chi "触发不存在" eng "Trigger does not exist" ger "Trigger existiert nicht" hindi "TRIGGER मौजूद नहीं है" spa "El disparador no existe" ER_TRG_ON_VIEW_OR_TEMP_TABLE chi "触发器的'%-.192s'是视图或临时表" eng "Trigger's '%-.192s' is a view, temporary table or sequence" ger "'%-.192s' des Triggers ist ein View, temporäre Tabelle oder Sequence" spa "El disparador '%-.192s' es una vista, tabla temporal o secuencia" hindi "Trigger का '%-.192s' एक व्यू, टेम्पररी टेबल या सीक्वेंस है" ER_TRG_CANT_CHANGE_ROW chi "更新%s行在%s触发器中不允许" eng "Updating of %s row is not allowed in %strigger" ger "Aktualisieren einer %s-Zeile ist in einem %s-Trigger nicht erlaubt" spa "Actualizar la fila %s no está permitido en disparador %s" ER_TRG_NO_SUCH_ROW_IN_TRG chi "没有%s行,触发%s" eng "There is no %s row in %s trigger" ger "Es gibt keine %s-Zeile im %s-Trigger" spa "No hay fila %s en disparador %s" ER_NO_DEFAULT_FOR_FIELD chi "字段'%-.192s'没有默认值" eng "Field '%-.192s' doesn't have a default value" ger "Feld '%-.192s' hat keinen Vorgabewert" spa "El campo '%-.192s' no tiene un valor por defecto" ER_DIVISION_BY_ZERO 22012 chi "除0错误" eng "Division by 0" ger "Division durch 0" hindi "0 से विभाजन" spa "División por 0" ER_TRUNCATED_WRONG_VALUE_FOR_FIELD 22007 chi "不正确的%-.32s值:'%-.128T'用于列`%.192s`%.192s`%.192s`在%lu行" eng "Incorrect %-.32s value: '%-.128T' for column `%.192s`.`%.192s`.`%.192s` at row %lu" ger "Falscher %-.32s-Wert: '%-.128T' für Feld '`%.192s`.`%.192s`.`%.192s` in Zeile %lu" spa "Incorrecto %-.32s valor: '%-.128T' para columna `%.192s`.`%.192s`.`%.192s` en la fila %lu" ER_ILLEGAL_VALUE_FOR_TYPE 22007 chi "在解析期间发现的非法%s '%-.192T'值" eng "Illegal %s '%-.192T' value found during parsing" ger "Nicht zulässiger %s-Wert '%-.192T' beim Parsen gefunden" spa "Hallado valor ilegal %s '%-.192T' durante el análisi" ER_VIEW_NONUPD_CHECK chi "在不可更新的视图%`-.192s.%`-.192s上CHECK OPTION" eng "CHECK OPTION on non-updatable view %`-.192s.%`-.192s" ger "CHECK OPTION auf nicht-aktualisierbarem View %`-.192s.%`-.192s" rus "CHECK OPTION для необновляемого VIEW %`-.192s.%`-.192s" spa "CHECK OPTION en vista no actualizable %`-.192s.%`-.192s" ukr "CHECK OPTION для VIEW %`-.192s.%`-.192s що не може бути оновленним" ER_VIEW_CHECK_FAILED 44000 chi "CHECK OPTION失败%`-.192s.%`-.192s" eng "CHECK OPTION failed %`-.192s.%`-.192s" ger "CHECK OPTION fehlgeschlagen: %`-.192s.%`-.192s" rus "Проверка CHECK OPTION для VIEW %`-.192s.%`-.192s провалилась" spa "CHECK OPTION falló %`-.192s.%`-.192s" ukr "Перевірка CHECK OPTION для VIEW %`-.192s.%`-.192s не пройшла" ER_PROCACCESS_DENIED_ERROR 42000 chi "%-.32s命令被拒绝。用户为'%s'@'%s' 例程'%-.192s'" eng "%-.32s command denied to user '%s'@'%s' for routine '%-.192s'" ger "Befehl %-.32s nicht zulässig für Benutzer '%s'@'%s' in Routine '%-.192s'" spa "Comando %-.32s denegado para el usuario '%s'@'%s' para rutina '%-.192s'" ER_RELAY_LOG_FAIL chi "清除旧继relay日志失败:%s" eng "Failed purging old relay logs: %s" ger "Bereinigen alter Relais-Logs fehlgeschlagen: %s" spa "Falló la purga de viejos historiales (logs) de reenvío: %s" ER_PASSWD_LENGTH chi "密码哈希应该是一个%d-digit十六进制数" eng "Password hash should be a %d-digit hexadecimal number" ger "Passwort-Hash sollte eine Hexdaezimalzahl mit %d Stellen sein" spa "El valor calculado de la contraseña debería de ser un número hexadecimal de %d-dígitos" ER_UNKNOWN_TARGET_BINLOG chi "在Binlog索引中找不到目标日志" eng "Target log not found in binlog index" ger "Ziel-Log im Binlog-Index nicht gefunden" spa "Historial (log) de destino no hallado en índice binlog" ER_IO_ERR_LOG_INDEX_READ chi "读取日志索引文件时I/O错误" eng "I/O error reading log index file" ger "Fehler beim Lesen der Log-Index-Datei" spa "Error de E/S leyendo fichero/archivo índice de historial (log)" ER_BINLOG_PURGE_PROHIBITED chi "服务器配置不允许Binlog清除" eng "Server configuration does not permit binlog purge" ger "Server-Konfiguration erlaubt keine Binlog-Bereinigung" spa "La configuración del servidor no permite purgar binlog" ER_FSEEK_FAIL chi "fseek()失败" eng "Failed on fseek()" ger "fseek() fehlgeschlagen" hindi "fseek() विफल रहा" spa "Fallo en fseek()" ER_BINLOG_PURGE_FATAL_ERR chi "日志清除期间的致命错误" eng "Fatal error during log purge" ger "Schwerwiegender Fehler bei der Log-Bereinigung" spa "Error fatal durante la purga del historial (log)" ER_LOG_IN_USE chi "日志在用,不会清除" eng "A purgeable log is in use, will not purge" ger "Ein zu bereinigendes Log wird gerade benutzt, daher keine Bereinigung" spa "Se encuentra en uso un historial purgable, no lo purgaré" ER_LOG_PURGE_UNKNOWN_ERR chi "日志清除期间未知错误" eng "Unknown error during log purge" ger "Unbekannter Fehler bei Log-Bereinigung" spa "Error desconocido durante la purga del historial (log)" ER_RELAY_LOG_INIT chi "初始化relay日志失败。位置:%s" eng "Failed initializing relay log position: %s" ger "Initialisierung der Relais-Log-Position fehlgeschlagen: %s" spa "Fallo inicializando la posición del historial de reenvío: %s" ER_NO_BINARY_LOGGING chi "您不使用二进制日志记录" eng "You are not using binary logging" ger "Sie verwenden keine Binärlogs" spa "No está usando historial (log) binario" ER_RESERVED_SYNTAX chi "'%-.64s'语法保留用于MariaDB服务器内部" eng "The '%-.64s' syntax is reserved for purposes internal to the MariaDB server" ger "Die Schreibweise '%-.64s' ist für interne Zwecke des MariaDB-Servers reserviert" spa "La sintaxis '%-.64s' está reservada para propósitos internos del servidor MariaDB" ER_WSAS_FAILED chi "WSAStartup失败了" eng "WSAStartup Failed" ger "WSAStartup fehlgeschlagen" spa "Falló WSAStartup" ER_DIFF_GROUPS_PROC chi "无法处理具有不同组的过程" eng "Can't handle procedures with different groups yet" ger "Kann Prozeduren mit unterschiedlichen Gruppen noch nicht verarbeiten" spa "No puedo manejar procedimientos con grupos diferentes, aún" ER_NO_GROUP_FOR_PROC chi "SELECT必须具有此过程的组" eng "Select must have a group with this procedure" ger "SELECT muss bei dieser Prozedur ein GROUP BY haben" spa "La selección debe de tener un grupo con este procedimiento" ER_ORDER_WITH_PROC chi "无法在次存储过程使用ORDER子句" eng "Can't use ORDER clause with this procedure" ger "Kann bei dieser Prozedur keine ORDER-BY-Klausel verwenden" spa "No puedo usar la cláusula ORDER con este procedimiento" ER_LOGGING_PROHIBIT_CHANGING_OF chi "二进制日志记录和复制禁止更改全局服务器%s" eng "Binary logging and replication forbid changing the global server %s" ger "Binärlogs und Replikation verhindern Wechsel des globalen Servers %s" spa "El historial (log) binario y la réplica prohibe cambiar el servidor global %s" ER_NO_FILE_MAPPING chi "无法映射文件:%-.200s,错误号码:%M" eng "Can't map file: %-.200s, errno: %M" ger "Kann Datei nicht abbilden: %-.200s, Fehler: %M" spa "No puedo mapear fichero/archivo: %-.200s, error: %M" ER_WRONG_MAGIC chi "魔法错误%-.64s" eng "Wrong magic in %-.64s" ger "Falsche magische Zahlen in %-.64s" spa "Magia equivocada en %-.64s" ER_PS_MANY_PARAM chi "Prepared statement包含太多占位符" eng "Prepared statement contains too many placeholders" ger "Vorbereitete Anweisung enthält zu viele Platzhalter" spa "Sentencia preparada contiene demasiados marcadores de posición" ER_KEY_PART_0 chi "索引部分'%-.192s'长度不能为0" eng "Key part '%-.192s' length cannot be 0" ger "Länge des Schlüsselteils '%-.192s' kann nicht 0 sein" spa "El tamaño de trozo de clave '%-.192s' no puede ser 0" ER_VIEW_CHECKSUM chi "查看文本checksum失败" eng "View text checksum failed" ger "View-Text-Prüfsumme fehlgeschlagen" rus "Проверка контрольной суммы текста VIEW провалилась" spa "Ha fallado la suma de comprobación del texto de la vista" ukr "Перевірка контрольної суми тексту VIEW не пройшла" ER_VIEW_MULTIUPDATE chi "无法通过JOIN视图'%-.192s.%-.192s'修改多个基础表。" eng "Can not modify more than one base table through a join view '%-.192s.%-.192s'" ger "Kann nicht mehr als eine Basistabelle über Join-View '%-.192s.%-.192s' ändern" rus "Нельзя изменить больше чем одну базовую таблицу используя многотабличный VIEW '%-.192s.%-.192s'" spa "No puedo modificar más de una tabla base a través de una vista de unión '%-.192s.%-.192s'" ukr "Неможливо оновити більш ниж одну базову таблицю выкористовуючи VIEW '%-.192s.%-.192s', що містіть декілька таблиць" ER_VIEW_NO_INSERT_FIELD_LIST chi "无法写入JOIN视图'%-.192s.%-.192s'没有字段列表" eng "Can not insert into join view '%-.192s.%-.192s' without fields list" ger "Kann nicht ohne Feldliste in Join-View '%-.192s.%-.192s' einfügen" rus "Нельзя вставлять записи в многотабличный VIEW '%-.192s.%-.192s' без списка полей" spa "No puedo insertar dentro de vista de unión '%-.192s.%-.192s' sin lista de campos" ukr "Неможливо уставити рядки у VIEW '%-.192s.%-.192s', що містить декілька таблиць, без списку стовбців" ER_VIEW_DELETE_MERGE_VIEW chi "无法从JOIN视图'%-.192s.%-.192s'删除" eng "Can not delete from join view '%-.192s.%-.192s'" ger "Kann nicht aus Join-View '%-.192s.%-.192s' löschen" rus "Нельзя удалять из многотабличного VIEW '%-.192s.%-.192s'" spa "No puedo borrar desde vista de unión '%-.192s.%-.192s'" ukr "Неможливо видалити рядки у VIEW '%-.192s.%-.192s', що містить декілька таблиць" ER_CANNOT_USER chi "操作%s失败%.256s" eng "Operation %s failed for %.256s" ger "Operation %s schlug fehl für %.256s" norwegian-ny "Operation %s failed for '%.256s'" spa "Ha fallado la operación %s para %.256s" ER_XAER_NOTA XAE04 chi "XAER_NOTA:未知的XID" eng "XAER_NOTA: Unknown XID" ger "XAER_NOTA: Unbekannte XID" spa "XAER_NOTA: XID desconocido" ER_XAER_INVAL XAE05 chi "XAER_INVAL:无效的参数(或不支持的命令)" eng "XAER_INVAL: Invalid arguments (or unsupported command)" ger "XAER_INVAL: Ungültige Argumente (oder nicht unterstützter Befehl)" spa "XAER_INVAL: Argumentos inválidos (o comando no soportado)" ER_XAER_RMFAIL XAE07 chi "XAER_RMFAIL:当全局事务处于%.64s状态时,无法执行该命令" eng "XAER_RMFAIL: The command cannot be executed when global transaction is in the %.64s state" ger "XAER_RMFAIL: DEr Befehl kann nicht ausgeführt werden, wenn die globale Transaktion im Zustand %.64s ist" rus "XAER_RMFAIL: эту команду нельзя выполнять когда глобальная транзакция находится в состоянии '%.64s'" spa "XAER_RMFAIL: El comando no se puede ejecutar cuando la transacción global se encuentra en estado %.64s" ER_XAER_OUTSIDE XAE09 chi "XAER_OUTSIDE:一些工作是在全局交易之外完成的" eng "XAER_OUTSIDE: Some work is done outside global transaction" ger "XAER_OUTSIDE: Einige Arbeiten werden außerhalb der globalen Transaktion verrichtet" spa "XAER_OUTSIDE: Algún trabajo se ha realizado fuera de la transacción global" ER_XAER_RMERR XAE03 chi "XAER_RMERR:事务分支中发生致命错误 - 检查您的数据以获得一致性" eng "XAER_RMERR: Fatal error occurred in the transaction branch - check your data for consistency" ger "XAER_RMERR: Schwerwiegender Fehler im Transaktionszweig - prüfen Sie Ihre Daten auf Konsistenz" spa "XAER_RMERR: Ha ocurrido un error fatal en la rama de la transacción - revise la consitencia de sus datos" ER_XA_RBROLLBACK XA100 chi "XA_RBROLBACK:交易分支回滚" eng "XA_RBROLLBACK: Transaction branch was rolled back" ger "XA_RBROLLBACK: Transaktionszweig wurde zurückgerollt" spa "XA_RBROLLBACK: La rama de la transacción ha sido retrocedida (rolled back)" ER_NONEXISTING_PROC_GRANT 42000 chi "无授权:用户'%-.48s'主机'%-.64s'ROUTINE'%-.192s'" eng "There is no such grant defined for user '%-.48s' on host '%-.64s' on routine '%-.192s'" ger "Es gibt diese Berechtigung für Benutzer '%-.48s' auf Host '%-.64s' für Routine '%-.192s' nicht" spa "No existe tal concesión definida para el usuario '%-.48s' en equipo '%-.64s' en rutina '%-.192s'" ER_PROC_AUTO_GRANT_FAIL chi "无法授予EXECUTE和ALTER ROUTINE权限" eng "Failed to grant EXECUTE and ALTER ROUTINE privileges" ger "Gewährung von EXECUTE- und ALTER-ROUTINE-Rechten fehlgeschlagen" spa "Fallo al conceder privilegios de EXECUTE y ALTER ROUTINE" ER_PROC_AUTO_REVOKE_FAIL chi "无法撤消所有权限以删除例程" eng "Failed to revoke all privileges to dropped routine" ger "Rücknahme aller Rechte für die gelöschte Routine fehlgeschlagen" spa "Fallo al rescindir todos los privilegios de la rutina anulada" ER_DATA_TOO_LONG 22001 chi "列'%s'行%lu数据太长" eng "Data too long for column '%s' at row %lu" ger "Daten zu lang für Feld '%s' in Zeile %lu" spa "Datos demasiado largos para la columna '%s' en la fila %lu" ER_SP_BAD_SQLSTATE 42000 chi "坏SQLSTATE:'%s'" eng "Bad SQLSTATE: '%s'" ger "Ungültiger SQLSTATE: '%s'" spa "Mal SQLSTATE: '%s'" ER_STARTUP chi "%s:已经准备好接受连接\nVersion:'%s'套接字:'%s'端口:%d %s" eng "%s: ready for connections.\nVersion: '%s' socket: '%s' port: %d %s" ger "%s: bereit für Verbindungen.\nVersion: '%s' Socket: '%s' Port: %d %s" spa "%s: preparada para conexiones.\nVersión: '%s' conector: '%s' puerto: %d %s" ER_LOAD_FROM_FIXED_SIZE_ROWS_TO_VAR chi "无法从带有固定大小行的文件中加载值到变量" eng "Can't load value from file with fixed size rows to variable" ger "Kann Wert aus Datei mit Zeilen fester Größe nicht in Variable laden" spa "No puedo cargar valor desde fichero/archivo con filas de tamaño fijo en variable" ER_CANT_CREATE_USER_WITH_GRANT 42000 chi "您不允许使用创建用户时给予GRANT" eng "You are not allowed to create a user with GRANT" ger "Sie dürfen keinen Benutzer mit GRANT anlegen" spa "No está autorizado a crear un usuario con GRANT" ER_WRONG_VALUE_FOR_TYPE chi "不正确的%-.32s值:'%-.128T' 函数:%-.32s" eng "Incorrect %-.32s value: '%-.128T' for function %-.32s" ger "Falscher %-.32s-Wert: '%-.128T' für Funktion %-.32s" spa "Incorrecto valor %-.32s: '%-.128T' para la función %-.32s" ER_TABLE_DEF_CHANGED chi "表定义已更改,请重试" eng "Table definition has changed, please retry transaction" ger "Tabellendefinition wurde geändert, bitte starten Sie die Transaktion neu" spa "Ha cambiado la definición de la tabla, por favor reintente la transacción" ER_SP_DUP_HANDLER 42000 chi "在同一块中声明的处理程序重复" eng "Duplicate handler declared in the same block" ger "Doppelter Handler im selben Block deklariert" spa "Manejador duplicado declarado en mismo bloque" ER_SP_NOT_VAR_ARG 42000 chi "OUT或INOUT参数%d 例程 %s的不是BEFORE触发器里的变量或新伪变量" eng "OUT or INOUT argument %d for routine %s is not a variable or NEW pseudo-variable in BEFORE trigger" ger "OUT- oder INOUT-Argument %d für Routine %s ist keine Variable" spa "El argumento %d OUT o INOUT para la rutina %s no es una variable o pseudo-variable NEW en disparador BEFORE" ER_SP_NO_RETSET 0A000 chi "不允许从%s返回结果集" eng "Not allowed to return a result set from a %s" ger "Rückgabe einer Ergebnismenge aus einer %s ist nicht erlaubt" spa "No autorizado a devolver un conjunto de resultados desde un %s" ER_CANT_CREATE_GEOMETRY_OBJECT 22003 chi "无法从发送到几何字段的数据中获取几何对象" eng "Cannot get geometry object from data you send to the GEOMETRY field" ger "Kann kein Geometrieobjekt aus den Daten machen, die Sie dem GEOMETRY-Feld übergeben haben" spa "No puedo obtener objeto de geometría desde los datos que vd envía al campo GEOMETRY" ER_FAILED_ROUTINE_BREAK_BINLOG chi "ROUTINE失败,定义中既没有NO SQL也没有READ SQL DAT。启用二进制日志记录;如果更新非事务性表,则二进制日志将会错过其更改" eng "A routine failed and has neither NO SQL nor READS SQL DATA in its declaration and binary logging is enabled; if non-transactional tables were updated, the binary log will miss their changes" ger "Eine Routine, die weder NO SQL noch READS SQL DATA in der Deklaration hat, schlug fehl und Binärlogging ist aktiv. Wenn Nicht-Transaktions-Tabellen aktualisiert wurden, enthält das Binärlog ihre Änderungen nicht" spa "Ha fallado una rutina y no tiene ni NO SQL ni READS SQL DATA en su declaración y el historial (log) binario se encuentra activado; si han sido actualizadas tablas no transaccionales, el fichero/archivo binario de historial (log) perderá sus cambios" ER_BINLOG_UNSAFE_ROUTINE chi "此函数定义中没有DETERMINISTIC,NO SQL,或者READS SQL DATA,并且已启用二进制日志记录(您*可能*希望使用较少的安全性的log_bin_trust_function_creators变量)" eng "This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" ger "Diese Routine hat weder DETERMINISTIC, NO SQL noch READS SQL DATA in der Deklaration und Binärlogging ist aktiv (*vielleicht* sollten Sie die weniger sichere Variable log_bin_trust_function_creators verwenden)" spa "Esta función no tiene ninguno de DETERMINISTIC, NO SQL o READS SQL DATA en su declaración y está activado el historial binario (vd *podría* querer usar la variable menos segura log_bin_trust_function_creators)" ER_BINLOG_CREATE_ROUTINE_NEED_SUPER chi "您没有超级特权和二进制日志记录已启用(您*可能*想要使用较少的安全log_bin_trust_function_creators变量)" eng "You do not have the SUPER privilege and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)" ger "Sie haben keine SUPER-Berechtigung und Binärlogging ist aktiv (*vielleicht* sollten Sie die weniger sichere Variable log_bin_trust_function_creators verwenden)" spa "No tiene el privilegio SUPER y está activado el historial binario (*podría* querer usar la variable menos segura log_bin_trust_function_creators)" ER_EXEC_STMT_WITH_OPEN_CURSOR chi "您无法执行具有与之关联的打开Cursor的prepared statement。重置语句以重新执行它" eng "You can't execute a prepared statement which has an open cursor associated with it. Reset the statement to re-execute it" ger "Sie können keine vorbereitete Anweisung ausführen, die mit einem geöffneten Cursor verknüpft ist. Setzen Sie die Anweisung zurück, um sie neu auszuführen" spa "No puede ejecutar una sentencia preparada que tiene abierto un cursor asociado con ella. Renueve la sentencia para re-ejecutarla" ER_STMT_HAS_NO_OPEN_CURSOR chi "语句(%lu)没有开放的Cursor" eng "The statement (%lu) has no open cursor" ger "Die Anweisung (%lu) hat keinen geöffneten Cursor" spa "La sentencia (%lu) no tiene cursor abierto" ER_COMMIT_NOT_ALLOWED_IN_SF_OR_TRG chi "在存储的函数或触发器中不允许显式或隐式提交" eng "Explicit or implicit commit is not allowed in stored function or trigger" ger "Explizites oder implizites Commit ist in gespeicherten Funktionen und in Triggern nicht erlaubt" spa "Comisión (commit) implícita o explícita no permitida en funciones almacenadas o en disparadores" ER_NO_DEFAULT_FOR_VIEW_FIELD chi "VIEW的列'%-.192s.%-.192s'底层表没有默认值" eng "Field of view '%-.192s.%-.192s' underlying table doesn't have a default value" ger "Ein Feld der dem View '%-.192s.%-.192s' zugrundeliegenden Tabelle hat keinen Vorgabewert" spa "El campo de tabla subyacente de vista '%-.192s.%-.192s' no tiene valor por defecto" ER_SP_NO_RECURSION chi "不允许递归存储功能和触发器" eng "Recursive stored functions and triggers are not allowed" ger "Rekursive gespeicherte Routinen und Triggers sind nicht erlaubt" spa "No autorizadas funciones almacenadas recursivas ni disparadores" ER_TOO_BIG_SCALE 42000 S1009 chi "指定的大规模%llu为'%-.192s'。最大是%u" eng "Too big scale %llu specified for '%-.192s'. Maximum is %u" ger "Zu großer Skalierungsfaktor %llu für '%-.192s' angegeben. Maximum ist %u" spa "Escala %llu demasiado grande especificada para '%-.192s'. El máximo es de %u" ER_TOO_BIG_PRECISION 42000 S1009 chi "指定的精度%llu太大 '%-.192s'。最大是%u" eng "Too big precision %llu specified for '%-.192s'. Maximum is %u" ger "Zu große Genauigkeit %llu für '%-.192s' angegeben. Maximum ist %u" spa "Precisión %llu demasiado grande especificada para '%-.192s'. El máximo es de %u" ER_M_BIGGER_THAN_D 42000 S1009 chi "对于FLOAT(M,D),DOUBLE(M,D)或DECIMAL(M,D),M必须> = D(列'%-.192s')" eng "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s')" ger "Für FLOAT(M,D), DOUBLE(M,D) oder DECIMAL(M,D) muss M >= D sein (Feld '%-.192s')" spa "Para flotante(M,D), doble(M,D) o decimal(M,D), M debe de ser >= D (columna '%-.192s')" ER_WRONG_LOCK_OF_SYSTEM_TABLE chi "您无法将系统表的写入锁定与其他表或锁定类型相结合" eng "You can't combine write-locking of system tables with other tables or lock types" ger "Sie können Schreibsperren auf der Systemtabelle nicht mit anderen Tabellen kombinieren" spa "No puede combinar bloqueo de escritura de tablas de sistema con otras tablas o tipos de bloqueo" ER_CONNECT_TO_FOREIGN_DATA_SOURCE chi "无法连接到外数据源:%.64s" eng "Unable to connect to foreign data source: %.64s" ger "Kann nicht mit Fremddatenquelle verbinden: %.64s" spa "No puedo conectar a fuente foránea de datos: %.64s" ER_QUERY_ON_FOREIGN_DATA_SOURCE chi "处理对外数据源上的查询时出现问题。数据源错误:%-.64s" eng "There was a problem processing the query on the foreign data source. Data source error: %-.64s" ger "Bei der Verarbeitung der Abfrage ist in der Fremddatenquelle ein Problem aufgetreten. Datenquellenfehlermeldung: %-.64s" spa "Hubo un problema procesando la consulta (query) en la fuente foránea de datos. Error de fuente de datos: %-.64s" ER_FOREIGN_DATA_SOURCE_DOESNT_EXIST chi "您尝试引用的外数据源不存在。数据源错误:%-.64s" eng "The foreign data source you are trying to reference does not exist. Data source error: %-.64s" ger "Die Fremddatenquelle, auf die Sie zugreifen wollen, existiert nicht. Datenquellenfehlermeldung: %-.64s" spa "La fuente foránea de datos que intenta referenciar no existe. Error en fuente de datos: %-.64s" ER_FOREIGN_DATA_STRING_INVALID_CANT_CREATE chi "无法创建联合表。数据源连接字符串'%-.64s'不是正确的格式" eng "Can't create federated table. The data source connection string '%-.64s' is not in the correct format" ger "Kann föderierte Tabelle nicht erzeugen. Der Datenquellen-Verbindungsstring '%-.64s' hat kein korrektes Format" spa "No puedo crear tabla federada. La cadena de conexión de la fuente de datos '%-.64s' no tiene el formato correcto" ER_FOREIGN_DATA_STRING_INVALID chi "数据源连接字符串'%-.64s'不是正确的格式" eng "The data source connection string '%-.64s' is not in the correct format" ger "Der Datenquellen-Verbindungsstring '%-.64s' hat kein korrektes Format" spa "La cadena de conexón de la fuente de datos '%-.64s' no tiene el formato correcto" ER_CANT_CREATE_FEDERATED_TABLE chi "无法创建联合表。外数据SRC错误:%-.64s" eng "Can't create federated table. Foreign data src error: %-.64s" ger "Kann föderierte Tabelle nicht erzeugen. Fremddatenquellenfehlermeldung: %-.64s" spa "No puedo crear tabla federada. Error en fuente de datos foráneos: %-.64s" ER_TRG_IN_WRONG_SCHEMA chi "触发在错的SCHEMA" eng "Trigger in wrong schema" ger "Trigger im falschen Schema" spa "Disparador en esquema equivocado" ER_STACK_OVERRUN_NEED_MORE chi "线程堆栈溢出:%ld字节堆栈的%ld字节,以及所需的%ld字节。使用'mariadbd --thread_stack =#'指定更大的堆栈" eng "Thread stack overrun: %ld bytes used of a %ld byte stack, and %ld bytes needed. Consider increasing the thread_stack system variable." ger "Thread-Stack-Überlauf: %ld Bytes eines %ld-Byte-Stacks in Verwendung, und %ld Bytes benötigt. Verwenden Sie 'mariadbd --thread_stack=#', um einen größeren Stack anzugeben" jpn "スレッドスタック不足です(使用: %ld ; サイズ: %ld ; 要求: %ld)。より大きい値で 'mariadbd --thread_stack=#' の指定をしてください。" spa "Desbordamiento en pila de hilos (threads): %ld bytes usados de una pila de %ld y son necesarios %ld bytes. Considere el incrementar la variable de sistema --thread_stack=#." ER_TOO_LONG_BODY 42000 S1009 chi "'%-.100s”的ROUTINE太长了" eng "Routine body for '%-.100s' is too long" ger "Routinen-Body für '%-.100s' ist zu lang" spa "El cuerpo de rutina para '%-.100s' es demasiado largo" ER_WARN_CANT_DROP_DEFAULT_KEYCACHE chi "无法删除默认索引缓存" eng "Cannot drop default keycache" ger "Der vorgabemäßige Schlüssel-Cache kann nicht gelöscht werden" spa "No puedo eliminar keycache por defecto" ER_TOO_BIG_DISPLAYWIDTH 42000 S1009 chi "显示宽度超过'%-.192s'的范围(max =%lu)" eng "Display width out of range for '%-.192s' (max = %lu)" ger "Anzeigebreite außerhalb des zulässigen Bereichs für '%-.192s' (Maximum = %lu)" spa "Ancho a mostrar fuera de rango para '%-.192s' (máx = %lu)" ER_XAER_DUPID XAE08 chi "XAER_DUPID:xid已存在" eng "XAER_DUPID: The XID already exists" ger "XAER_DUPID: Die XID existiert bereits" spa "XAER_DUPID: El XID ya existe" ER_DATETIME_FUNCTION_OVERFLOW 22008 chi "DateTime函数:%-.32s字段溢出" eng "Datetime function: %-.32s field overflow" ger "Datetime-Funktion: %-.32s Feldüberlauf" spa "Función Datetime: %-.32s desbordamiento de campo" ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG chi "在存储的函数/触发器中无法更新表'%-.192s',因为它已被调用此存储的函数/触发器调用的语句" eng "Can't update table '%-.192s' in stored function/trigger because it is already used by statement which invoked this stored function/trigger" ger "Kann Tabelle '%-.192s' in gespeicherter Funktion oder Trigger nicht aktualisieren, weil sie bereits von der Anweisung verwendet wird, die diese gespeicherte Funktion oder den Trigger aufrief" spa "No puedo actualizar tabla '%-.192s' en función almacenada/disparador porque ya está siendo usada por la sentencia que invocó esta función almacenada/disparador" ER_VIEW_PREVENT_UPDATE chi "表'%-.192s'的定义可防止在表'%-.192s'上的操作'%-.192s'" eng "The definition of table '%-.192s' prevents operation %-.192s on table '%-.192s'" ger "Die Definition der Tabelle '%-.192s' verhindert die Operation %-.192s auf Tabelle '%-.192s'" spa "La definición de la tabla '%-.192s' previene la operación %-.192s en la tabla '%-.192s'" ER_PS_NO_RECURSION chi "prepared statement包含一个有关该语句的存储例程调用。它不允许以这种递归方式执行prepared statement" eng "The prepared statement contains a stored routine call that refers to that same statement. It's not allowed to execute a prepared statement in such a recursive manner" ger "Die vorbereitete Anweisung enthält einen Aufruf einer gespeicherten Routine, die auf eben dieselbe Anweisung verweist. Es ist nicht erlaubt, eine vorbereitete Anweisung in solch rekursiver Weise auszuführen" spa "La sentencia preparada contiene una llamada a rutina almacenada que se refiere a esa misma sentencia. No está permitido ejecutar una sentencia preparada de esta manera recursiva" ER_SP_CANT_SET_AUTOCOMMIT chi "不允许从存储的函数或触发器设置自动判处" eng "Not allowed to set autocommit from a stored function or trigger" ger "Es ist nicht erlaubt, innerhalb einer gespeicherten Funktion oder eines Triggers AUTOCOMMIT zu setzen" spa "No permitido usar auto acometida (autocommit) desde una función almacenada o disparador" ER_MALFORMED_DEFINER 0L000 chi "无效的定义" eng "Invalid definer" spa "Definidor inválido" ER_VIEW_FRM_NO_USER chi "VIEW'%-.192s'。'%-.192s'没有绝定的信息(旧表格式)。当前用户用作定义。请重新创建视图!" eng "View '%-.192s'.'%-.192s' has no definer information (old table format). Current user is used as definer. Please recreate the view!" ger "View '%-.192s'.'%-.192s' hat keine Definierer-Information (altes Tabellenformat). Der aktuelle Benutzer wird als Definierer verwendet. Bitte erstellen Sie den View neu" spa "La vista '%-.192s'.'%-.192s' no tiene información de definidor (formato viejo de tabla). Se usa el usuario actual como definidor. Por favor, ¡recrea la vista!" ER_VIEW_OTHER_USER chi "您需要使用'%-.192s'@'%-.192s'的创建视图的超级特权" eng "You need the SUPER privilege for creation view with '%-.192s'@'%-.192s' definer" ger "Sie brauchen die SUPER-Berechtigung, um einen View mit dem Definierer '%-.192s'@'%-.192s' zu erzeugen" spa "Vd necesita el privilegio SUPER para la creación de la vista con definidor '%-.192s'@'%-.192s'" ER_NO_SUCH_USER chi "指定为定义的用户('%-.64s'@'%-.64s')不存在" eng "The user specified as a definer ('%-.64s'@'%-.64s') does not exist" ger "Der als Definierer angegebene Benutzer ('%-.64s'@'%-.64s') existiert nicht" spa "El usuario especificado como definidor ('%-.64s'@'%-.64s') no existe" ER_FORBID_SCHEMA_CHANGE chi "不允许从'%-.192s'到'%-.192s'的SCHEMA更改" eng "Changing schema from '%-.192s' to '%-.192s' is not allowed" ger "Wechsel des Schemas von '%-.192s' auf '%-.192s' ist nicht erlaubt" spa "Vd no está autorizado a cambiar el esquema de '%-.192s' a '%-.192s'" ER_ROW_IS_REFERENCED_2 23000 chi "无法删除或更新父行:外键约束失败(%s)" eng "Cannot delete or update a parent row: a foreign key constraint fails (%s)" ger "Kann Eltern-Zeile nicht löschen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%s)" spa "No puedo borrar o actualizar una fila padre: falla una restricción de clave foránea (%s)" ER_NO_REFERENCED_ROW_2 23000 chi "无法添加或更新子行:外键约束失败(%s)" eng "Cannot add or update a child row: a foreign key constraint fails (%s)" ger "Kann Kind-Zeile nicht hinzufügen oder aktualisieren: eine Fremdschlüsselbedingung schlägt fehl (%s)" spa "No puedo añadir o actualizar una fila hija: falla una restricción de clave foránea (%s)" ER_SP_BAD_VAR_SHADOW 42000 chi "变量'%-.64s'必须用`...`,或重命名" eng "Variable '%-.64s' must be quoted with `...`, or renamed" ger "Variable '%-.64s' muss mit `...` geschützt oder aber umbenannt werden" spa "La variable '%-.64s' debe de ser entrecomillada con `...` o renombrada" ER_TRG_NO_DEFINER chi "触发'%-.192s'的绝对属性。'%-.192s'。触发器将在调用者的授权下激活,该权限可能不足。请重新创建触发器" eng "No definer attribute for trigger '%-.192s'.'%-.192s'. The trigger will be activated under the authorization of the invoker, which may have insufficient privileges. Please recreate the trigger" ger "Kein Definierer-Attribut für Trigger '%-.192s'.'%-.192s'. Der Trigger wird mit der Autorisierung des Aufrufers aktiviert, der möglicherweise keine zureichenden Berechtigungen hat. Bitte legen Sie den Trigger neu an" spa "No hay atributo de definidor para disparador '%-.192s'.'%-.192s'. El disparador será activado bajo la autorización del invocador, el cual puede tener insuficientes privilegios. Por favor, vuelva a crear el disparador" ER_OLD_FILE_FORMAT chi "'%-.192s'具有旧格式,您应该重新创建'%s'对象" eng "'%-.192s' has an old format, you should re-create the '%s' object(s)" ger "'%-.192s' hat altes Format, Sie sollten die '%s'-Objekt(e) neu erzeugen" spa "'%-.192s' tiene un formato viejo, debería vd de volver a crear el/los objeto(s) '%s'" ER_SP_RECURSION_LIMIT chi "递归限制%d(如max_sp_recursion_depth变量设置)的例程%.192s" eng "Recursive limit %d (as set by the max_sp_recursion_depth variable) was exceeded for routine %.192s" ger "Rekursionsgrenze %d (durch Variable max_sp_recursion_depth gegeben) wurde für Routine %.192s überschritten" spa "El límite recursivo %d (según se indica mediante la variable max_sp_recursion_depth) se ha excedido para la rutina %.192s" ER_SP_PROC_TABLE_CORRUPT chi "无法加载常规%-.192s(内部代码%d)。有关更多详细信息,请运行SHOW WARNINGS" eng "Failed to load routine %-.192s (internal code %d). For more details, run SHOW WARNINGS" ger "Routine %-.192s (interner Code %d) konnte nicht geladen werden. Weitere Einzelheiten erhalten Sie, wenn Sie SHOW WARNINGS ausführen" ukr "Невдала спроба завантажити процедуру %-.192s (внутрішний код %d). Для отримання детальної інформації використовуйте SHOW WARNINGS" spa "No pude cargar la rutina %-.192s (código interno %d). Para más detalles, ejecute SHOW WARNINGS" ER_SP_WRONG_NAME 42000 chi "常规名称错误不正确'%-.192s'" eng "Incorrect routine name '%-.192s'" ger "Ungültiger Routinenname '%-.192s'" spa "Nombre incorrecto de rutina '%-.192s'" ER_TABLE_NEEDS_UPGRADE chi "需要升级。请做\"修复%s%`s \"或转储/重新加载以修复!" eng "Upgrade required. Please do \"REPAIR %s %`s\" or dump/reload to fix it!" ger "Aktualisierung erforderlich. Bitte zum Reparieren \"REPAIR %s %`s\" eingeben!" spa "Es necesaria una mejora. Por favor, ¡haga \"REPAIR %s %`s\" o vuelque/recargue para arreglarlo!" ER_SP_NO_AGGREGATE 42000 chi "存储函数不支持聚合" eng "AGGREGATE is not supported for stored functions" ger "AGGREGATE wird bei gespeicherten Funktionen nicht unterstützt" spa "AGGREGATE no está soportado en funciones almacenadas" ER_MAX_PREPARED_STMT_COUNT_REACHED 42000 chi "无法创建超过max_prepared_stmt_count语句(当前值:%u)" eng "Can't create more than max_prepared_stmt_count statements (current value: %u)" ger "Kann nicht mehr Anweisungen als max_prepared_stmt_count erzeugen (aktueller Wert: %u)" spa "No puedo crear más de max_prepared_stmt_count sentencias (valor en curso: %u)" ER_VIEW_RECURSIVE chi "%`s.%`s包含视图递归" eng "%`s.%`s contains view recursion" ger "%`s.%`s enthält View-Rekursion" spa "`%-.192s`.`%-.192s` contiene recursividad de vista"" ER_NON_GROUPING_FIELD_USED 42000 chi "非分组字段'%-.192s'用于%-.64s条款" eng "Non-grouping field '%-.192s' is used in %-.64s clause" ger "In der %-.192s-Klausel wird das die Nicht-Gruppierungsspalte '%-.64s' verwendet" spa "No hay campo agrupado '%-.192s' usado en cláusula %-.64s" ER_TABLE_CANT_HANDLE_SPKEYS chi "存储引擎%s不支持SPATIAL索引" eng "The storage engine %s doesn't support SPATIAL indexes" ger "Der verwendete Tabellentyp (%s) unterstützt keine SPATIAL-Indizes" spa "El motor de almacenaje %s no soporta índices SPATIAL" ER_NO_TRIGGERS_ON_SYSTEM_SCHEMA chi "无法在系统表上创建触发器" eng "Triggers can not be created on system tables" ger "Trigger können nicht auf Systemtabellen erzeugt werden" spa "Los disparadores no pueden ser creados en las tablas del sistema" ER_REMOVED_SPACES chi "前面的空格从名称'%s'删除" eng "Leading spaces are removed from name '%s'" ger "Führende Leerzeichen werden aus dem Namen '%s' entfernt" spa "Se quitan los espacios iniciales del nombre '%s'" ER_AUTOINC_READ_FAILED chi "无法从存储引擎读取自动增量值" eng "Failed to read auto-increment value from storage engine" ger "Lesen des Autoincrement-Werts von der Speicher-Engine fehlgeschlagen" hindi "स्टोरेज इंजन से auto-increment का मान पढ़ने में असफल रहे" spa "No pude leer valor de auto-incremento del motor de almacenaje" ER_USERNAME chi "用户名" eng "user name" ger "Benutzername" hindi "यूज़र का नाम" spa "nombre de usuario" ER_HOSTNAME chi "主机名" eng "host name" ger "Hostname" hindi "होस्ट का नाम" spa "nombre de equipo" ER_WRONG_STRING_LENGTH chi "字符串'%-.70T'对于%s(应不超过%d)太长" eng "String '%-.70T' is too long for %s (should be no longer than %d)" ger "String '%-.70T' ist zu lang für %s (sollte nicht länger sein als %d)" spa "La cadena '%-.70T' es demasiado larga para %s (no debería de ser mayor de %d)" ER_NON_INSERTABLE_TABLE chi "目标表%-.100s %s不可插入" eng "The target table %-.100s of the %s is not insertable-into" ger "Die Zieltabelle %-.100s von %s ist nicht einfügbar" jpn "対象表 %-.100s は挿入可能ではないので、%s を行えません。" spa "La tabla destino %-.100s de la %s no es insertable-dentro" ER_ADMIN_WRONG_MRG_TABLE chi "表'%-.64s'不同定义、或非myisam类型、或不存在" eng "Table '%-.64s' is differently defined or of non-MyISAM type or doesn't exist" ger "Tabelle '%-.64s' ist unterschiedlich definiert, nicht vom Typ MyISAM oder existiert nicht" spa "La tabla '%-.64s' está definida de forma diferente o es del tipo no-MyISAM o no existe" ER_TOO_HIGH_LEVEL_OF_NESTING_FOR_SELECT chi "太高的嵌套SELECT" eng "Too high level of nesting for select" ger "Zu tief verschachtelte SELECT-Anweisungen" spa "Demasiado alto el nivel de anidamiento para la selección" ER_NAME_BECOMES_EMPTY chi "名'%-.64s'已成为''" eng "Name '%-.64s' has become ''" ger "Name '%-.64s' wurde zu ''" spa "El nombre '%-.64s' ha pasado a ser ''" ER_AMBIGUOUS_FIELD_TERM chi "FIELDS TERMINATED字符串的第一个字符是模棱两可的;请使用非空字段FIELDS ENCLOSED BY" eng "First character of the FIELDS TERMINATED string is ambiguous; please use non-optional and non-empty FIELDS ENCLOSED BY" ger "Das erste Zeichen der Zeichenkette FIELDS TERMINATED ist mehrdeutig; bitte benutzen Sie nicht optionale und nicht leere FIELDS ENCLOSED BY" spa "El primer carácter de la cadena de los FIELDS TERMINATED es ambiguo; por favor, use FIELDS ENCLOSED BY no opcionales y no vacíos" ER_FOREIGN_SERVER_EXISTS chi "无法创建外部服务器'%s',因为它已经存在" eng "Cannot create foreign server '%s' as it already exists" fin "Vieraata palvelinta '%s' ei voida luoda, koska se on jo olemassa" fre "Impossible de créer le serveur étranger '%s' car il existe déjà" ger "Der auswärtige Server '%s' kann nicht erstellt werden, da er bereits vorhanden ist" greek "Δεν είναι δυνατή η δημιουργία ξένου διακομιστή '%s' επειδή υπάρχει ήδη" ita "Impossibile creare il server esterno '%s' poiché esiste già" jpn "外部サーバー '%s'は既に存在するため、作成できません" nla "Kan geen externe server '%s' maken omdat deze al bestaat" nor "Kan ikke opprette utenlandsk server '%s' fordi den allerede eksisterer" pol "Nie można utworzyć obcego serwera '%s', ponieważ już istnieje" por "Não foi possível criar o servidor externo '%s' porque ele já existe" rus "Невозможно создать сторонний сервер '%s', так как он уже существует" spa "No se puede crear el servidor externo '%s' porque ya existe" swe "Det gick inte att skapa främmande server '%s' eftersom den redan finns" ER_FOREIGN_SERVER_DOESNT_EXIST chi "您尝试引用的外部服务器名称不存在。数据源错误:%-.64s" eng "The foreign server name you are trying to reference does not exist. Data source error: %-.64s" ger "Die externe Verbindung, auf die Sie zugreifen wollen, existiert nicht. Datenquellenfehlermeldung: %-.64s" spa "El nombre del servidor foráneo que intenta referenciar no existe. Error en fuentes de datos: %-.64s" ER_ILLEGAL_HA_CREATE_OPTION chi "表存储引擎'%-.64s'不支持创建选项'%.64s'" eng "Table storage engine '%-.64s' does not support the create option '%.64s'" ger "Speicher-Engine '%-.64s' der Tabelle unterstützt die Option '%.64s' nicht" spa "El motor de almacenaje de la tabla '%-.64s' no soporta la opción de creación '%.64s'" ER_PARTITION_REQUIRES_VALUES_ERROR chi "语法错误:%-.64s PARTITIONING需要定义给每个分区VALUES %-.64s" eng "Syntax error: %-.64s PARTITIONING requires definition of VALUES %-.64s for each partition" ger "Fehler in der SQL-Syntax: %-.64s-PARTITIONierung erfordert Definition von VALUES %-.64s für jede Partition" spa "Error de sintaxis: %-.64s PARTITIONING requiere de la definición de VALUES %-.64s para cada partición" swe "Syntaxfel: %-.64s PARTITIONering kräver definition av VALUES %-.64s för varje partition" ER_PARTITION_WRONG_VALUES_ERROR chi "只有%-.64s PARTITIONING可以使用VALUES %-.64s在分区定义中" eng "Only %-.64s PARTITIONING can use VALUES %-.64s in partition definition" ger "Nur %-.64s-PARTITIONierung kann VALUES %-.64s in der Partitionsdefinition verwenden" spa "Sólo %-.64s PARTITIONING puede usar VALUES %-.64s en la definición de la partición" swe "Endast %-.64s partitionering kan använda VALUES %-.64s i definition av partitionen" ER_PARTITION_MAXVALUE_ERROR chi "MAXVALUE只能在最后一个分区定义中使用" eng "MAXVALUE can only be used in last partition definition" ger "MAXVALUE kann nur für die Definition der letzten Partition verwendet werden" spa "MAXVALUE sólo se puede usar en la definición de la última partición" swe "MAXVALUE kan bara användas i definitionen av den sista partitionen" ER_PARTITION_SUBPARTITION_ERROR chi "子分区只能是哈希分区和分区列" eng "Subpartitions can only be hash partitions and by key" ger "Unterpartitionen dürfen nur HASH- oder KEY-Partitionen sein" spa "Las subparticiones sólo pueden ser particiones dispersas (hash) y mediante clave" swe "Subpartitioner kan bara vara hash och key partitioner" ER_PARTITION_SUBPART_MIX_ERROR chi "如果在一个分区上,必须在所有分区上定义子组分" eng "Must define subpartitions on all partitions if on one partition" ger "Wenn Sie Unterpartitionen auf einer Partition definieren, müssen Sie das für alle Partitionen tun" spa "Se deben de definir subparticiones en todas las particiones si se está en una partición" swe "Subpartitioner måste definieras på alla partitioner om på en" ER_PARTITION_WRONG_NO_PART_ERROR chi "定义了错误的分区数,与以前的设置不匹配" eng "Wrong number of partitions defined, mismatch with previous setting" ger "Falsche Anzahl von Partitionen definiert, stimmt nicht mit vorherigen Einstellungen überein" spa "Definido un número equivocado de particiones, no coincide con configuración previa" swe "Antal partitioner definierade och antal partitioner är inte lika" ER_PARTITION_WRONG_NO_SUBPART_ERROR chi "错误的子组分数定义,与以前的设置不匹配" eng "Wrong number of subpartitions defined, mismatch with previous setting" ger "Falsche Anzahl von Unterpartitionen definiert, stimmt nicht mit vorherigen Einstellungen überein" spa "Definido un número equivocado de subparticiones, no coincide con configuración previa" swe "Antal subpartitioner definierade och antal subpartitioner är inte lika" ER_WRONG_EXPR_IN_PARTITION_FUNC_ERROR chi "不允许(子)分区功能中的常量,随机或时区依赖表达式" eng "Constant, random or timezone-dependent expressions in (sub)partitioning function are not allowed" ger "Konstante oder Random-Ausdrücke in (Unter-)Partitionsfunktionen sind nicht erlaubt" spa "Las expresiones constantes, al azar o dependientes de zona en función de (sub)particionado no están permitidas" swe "Konstanta uttryck eller slumpmässiga uttryck är inte tillåtna (sub)partitioneringsfunktioner" ER_NOT_CONSTANT_EXPRESSION chi "%s中的表达必须是恒定的" eng "Expression in %s must be constant" ger "Ausdrücke in %s müssen konstant sein" spa "Las expresiones incluidas en %s deben de ser constantes" swe "Uttryck i %s måste vara ett konstant uttryck" ER_FIELD_NOT_FOUND_PART_ERROR chi "在表中找不到分区功能的字段列表中的字段" eng "Field in list of fields for partition function not found in table" ger "Felder in der Feldliste der Partitionierungsfunktion wurden in der Tabelle nicht gefunden" spa "Campo en la lista de campos para función de partición no hallado en tabla" swe "Fält i listan av fält för partitionering med key inte funnen i tabellen" ER_LIST_OF_FIELDS_ONLY_IN_HASH_ERROR chi "只允许在索引分区中允许字段列表" eng "List of fields is only allowed in KEY partitions" ger "Eine Feldliste ist nur in KEY-Partitionen erlaubt" spa "Lista de campos sólo se permite en particiones KEY" swe "En lista av fält är endast tillåtet för KEY partitioner" ER_INCONSISTENT_PARTITION_INFO_ERROR chi "FRM文件中的分区信息不与可以写入FRM文件的内容一致" eng "The partition info in the frm file is not consistent with what can be written into the frm file" ger "Die Partitionierungsinformationen in der frm-Datei stimmen nicht mit dem überein, was in die frm-Datei geschrieben werden kann" spa "La información de partición en el fichero/archivo frm no es consistente con lo que se puede grabar en un fichero/archivo frm" swe "Partitioneringsinformationen i frm-filen är inte konsistent med vad som kan skrivas i frm-filen" ER_PARTITION_FUNC_NOT_ALLOWED_ERROR chi "%-.192s函数返回错误的类型" eng "The %-.192s function returns the wrong type" ger "Die %-.192s-Funktion gibt einen falschen Typ zurück" spa "La función %-.192s devueve un tipo equivocado" swe "%-.192s-funktionen returnerar felaktig typ" ER_PARTITIONS_MUST_BE_DEFINED_ERROR chi "对于%-.64s分区必须定义每个分区" eng "For %-.64s partitions each partition must be defined" ger "Für %-.64s-Partitionen muss jede Partition definiert sein" spa "Para las particiones %-.64s, se debe de definir cada partición" swe "För %-.64s partitionering så måste varje partition definieras" ER_RANGE_NOT_INCREASING_ERROR chi "每个分区的VALUES LESS THAN的值必须严格增加" eng "VALUES LESS THAN value must be strictly increasing for each partition" ger "Werte in VALUES LESS THAN müssen für jede Partition strikt aufsteigend sein" spa "El valor VALUES LESS THAN debe de ser estrictamente incremental para cada partición" swe "Värden i VALUES LESS THAN måste vara strikt växande för varje partition" ER_INCONSISTENT_TYPE_OF_FUNCTIONS_ERROR chi "VALUES值必须与分区函数相同" eng "VALUES value must be of same type as partition function" ger "VALUES-Werte müssen vom selben Typ wie die Partitionierungsfunktion sein" spa "El valor VALUES debe de ser del mismo tipo que la función de partición" swe "Värden i VALUES måste vara av samma typ som partitioneringsfunktionen" ER_MULTIPLE_DEF_CONST_IN_LIST_PART_ERROR chi "列表分区中相同常量的多个定义" eng "Multiple definition of same constant in list partitioning" ger "Mehrfachdefinition derselben Konstante bei Listen-Partitionierung" spa "Definición múltiple de la misma constante en el particionamiento de la lista" swe "Multipel definition av samma konstant i list partitionering" ER_PARTITION_ENTRY_ERROR chi "分区不能在查询中独立使用" eng "Partitioning can not be used stand-alone in query" ger "Partitionierung kann in einer Abfrage nicht alleinstehend benutzt werden" spa "El particionado no puede ser usado de forma autónoma en consulta (query)" swe "Partitioneringssyntax kan inte användas på egen hand i en SQL-fråga" ER_MIX_HANDLER_ERROR chi "此版本的MariaDB中不允许分区中的处理程序混合" eng "The mix of handlers in the partitions is not allowed in this version of MariaDB" ger "Das Vermischen von Handlern in Partitionen ist in dieser Version von MariaDB nicht erlaubt" spa "La mezcla de manejadores en las particiones no está autorizada en esta versión de MariaDB" swe "Denna mix av lagringsmotorer är inte tillåten i denna version av MariaDB" ER_PARTITION_NOT_DEFINED_ERROR chi "对于分区引擎,需要定义所有%-.64s" eng "For the partitioned engine it is necessary to define all %-.64s" ger "Für die partitionierte Engine müssen alle %-.64s definiert sein" spa "Para el motor de particionado es necesario definir todas %-.64s" swe "För partitioneringsmotorn så är det nödvändigt att definiera alla %-.64s" ER_TOO_MANY_PARTITIONS_ERROR chi "定义了太多分区(包括子组分)" eng "Too many partitions (including subpartitions) were defined" ger "Es wurden zu vielen Partitionen (einschließlich Unterpartitionen) definiert" spa "Definidas demasiadas particiones (incluyendo las subparticiones)" swe "För många partitioner (inkluderande subpartitioner) definierades" ER_SUBPARTITION_ERROR chi "只有在子节分节的HASH/KEY分区中可以混合RANGE/LIST分区" eng "It is only possible to mix RANGE/LIST partitioning with HASH/KEY partitioning for subpartitioning" ger "RANGE/LIST-Partitionierung kann bei Unterpartitionen nur zusammen mit HASH/KEY-Partitionierung verwendet werden" spa "Sólo es posible mezclar particionado RANGE/LIST con particionado HASH/KEY para el subparticionado" swe "Det är endast möjligt att blanda RANGE/LIST partitionering med HASH/KEY partitionering för subpartitionering" ER_CANT_CREATE_HANDLER_FILE chi "无法创建特定的处理程序文件" eng "Failed to create specific handler file" ger "Erzeugen einer spezifischen Handler-Datei fehlgeschlagen" spa "No pude crear fichero/archivo de manejador específico" swe "Misslyckades med att skapa specifik fil i lagringsmotor" ER_BLOB_FIELD_IN_PART_FUNC_ERROR chi "分区功能中不允许BLOB字段" eng "A BLOB field is not allowed in partition function" ger "In der Partitionierungsfunktion sind BLOB-Spalten nicht erlaubt" spa "No se autoriza campo BLOB en la función de partición" swe "Ett BLOB-fält är inte tillåtet i partitioneringsfunktioner" ER_UNIQUE_KEY_NEED_ALL_FIELDS_IN_PF chi "A%-.192s必须包含表的分区功能中的所有列" eng "A %-.192s must include all columns in the table's partitioning function" spa "Un %-.192s debe de incluir todas las columnas en la función de particionado de la tabla" ER_NO_PARTS_ERROR chi "不允许%-.64s = 0" eng "Number of %-.64s = 0 is not an allowed value" ger "Eine Anzahl von %-.64s = 0 ist kein erlaubter Wert" spa "El número de %-.64s = 0 no es un valor autorizado" swe "Antal %-.64s = 0 är inte ett tillåten värde" ER_PARTITION_MGMT_ON_NONPARTITIONED chi "不分区表上的分区管理是不可能的" eng "Partition management on a not partitioned table is not possible" ger "Partitionsverwaltung einer nicht partitionierten Tabelle ist nicht möglich" spa "La gestión de particiones en una tabla no particionada no es posible" swe "Partitioneringskommando på en opartitionerad tabell är inte möjligt" ER_FEATURE_NOT_SUPPORTED_WITH_PARTITIONING eng "Partitioned tables do not support %s" spa "Las tablas particionadas no soportan %s" ER_DROP_PARTITION_NON_EXISTENT chi "分区列表错误%-.64s" eng "Error in list of partitions to %-.64s" ger "Fehler in der Partitionsliste bei %-.64s" spa "Error en lista de particiones para %-.64s" swe "Fel i listan av partitioner att %-.64s" ER_DROP_LAST_PARTITION chi "无法删除所有分区,请使用删除表" eng "Cannot remove all partitions, use DROP TABLE instead" ger "Es lassen sich nicht sämtliche Partitionen löschen, benutzen Sie statt dessen DROP TABLE" spa "No puedo quitar todas las particiones, use DROP TABLE en su lugar" swe "Det är inte tillåtet att ta bort alla partitioner, använd DROP TABLE istället" ER_COALESCE_ONLY_ON_HASH_PARTITION chi "COALESCE分区只能用于哈希/索引分区" eng "COALESCE PARTITION can only be used on HASH/KEY partitions" ger "COALESCE PARTITION kann nur auf HASH- oder KEY-Partitionen benutzt werden" spa "COALESCE PARTITION sólo se puede usar en particiones HASH/KEY" swe "COALESCE PARTITION kan bara användas på HASH/KEY partitioner" ER_REORG_HASH_ONLY_ON_SAME_NO chi "REORGANIZE PARTITION只能用于重新组织不改变他们的数字的分区" eng "REORGANIZE PARTITION can only be used to reorganize partitions not to change their numbers" ger "REORGANIZE PARTITION kann nur zur Reorganisation von Partitionen verwendet werden, nicht, um ihre Nummern zu ändern" spa "REORGANIZE PARTITION sólo se puede usar para reorganizar particiones no para cambiar sus números" swe "REORGANIZE PARTITION kan bara användas för att omorganisera partitioner, inte för att ändra deras antal" ER_REORG_NO_PARAM_ERROR chi "没有参数的REORGANIZE PARTITION只能用于HASH PARTITION的自动分区表" eng "REORGANIZE PARTITION without parameters can only be used on auto-partitioned tables using HASH PARTITIONs" ger "REORGANIZE PARTITION ohne Parameter kann nur für auto-partitionierte Tabellen verwendet werden, die HASH-Partitionierung benutzen" spa "REORGANIZE PARTITION sin parámetros sólo se puede usar en tablas auto-particionadas usando HASH PARTITIONs" swe "REORGANIZE PARTITION utan parametrar kan bara användas på auto-partitionerade tabeller som använder HASH partitionering" ER_ONLY_ON_RANGE_LIST_PARTITION chi "%-.64s分区只能用于RANGE/LIST分区" eng "%-.64s PARTITION can only be used on RANGE/LIST partitions" ger "%-.64s PARTITION kann nur für RANGE- oder LIST-Partitionen verwendet werden" spa "%-.64s PARTITION sólo puede ser usada en particiones RANGE/LIST" swe "%-.64s PARTITION kan bara användas på RANGE/LIST-partitioner" ER_ADD_PARTITION_SUBPART_ERROR chi "尝试用错误数量的子分区添加分区" eng "Trying to Add partition(s) with wrong number of subpartitions" ger "Es wurde versucht, eine oder mehrere Partitionen mit der falschen Anzahl von Unterpartitionen hinzuzufügen" spa "Intentando añadir particion(es) usando un número equivocado de subparticiones" swe "ADD PARTITION med fel antal subpartitioner" ER_ADD_PARTITION_NO_NEW_PARTITION chi "必须添加至少一个分区" eng "At least one partition must be added" ger "Es muss zumindest eine Partition hinzugefügt werden" spa "Se debe de añadir una partición, al menos" swe "Åtminstone en partition måste läggas till vid ADD PARTITION" ER_COALESCE_PARTITION_NO_PARTITION chi "至少一个分区必须合并" eng "At least one partition must be coalesced" ger "Zumindest eine Partition muss mit COALESCE PARTITION zusammengefügt werden" spa "Se debe de fusionar una partición, al menos" swe "Åtminstone en partition måste slås ihop vid COALESCE PARTITION" ER_REORG_PARTITION_NOT_EXIST chi "分区重组量超过而不是分区量" eng "More partitions to reorganize than there are partitions" ger "Es wurde versucht, mehr Partitionen als vorhanden zu reorganisieren" spa "Hay más particiones a reorganizar que las que existen" swe "Fler partitioner att reorganisera än det finns partitioner" ER_SAME_NAME_PARTITION chi "重复分区名称%-.192s" eng "Duplicate partition name %-.192s" ger "Doppelter Partitionsname: %-.192s" spa "Nombre de partición duplicado %-.192s" swe "Duplicerat partitionsnamn %-.192s" ER_NO_BINLOG_ERROR chi "在此命令上不允许关闭binlog" eng "It is not allowed to shut off binlog on this command" ger "Es es nicht erlaubt, bei diesem Befehl binlog abzuschalten" spa "No se autoriza a apagar binlog con este comando" swe "Det är inte tillåtet att stänga av binlog på detta kommando" ER_CONSECUTIVE_REORG_PARTITIONS chi "在重新组织一组分区时,它们必须按照次序" eng "When reorganizing a set of partitions they must be in consecutive order" ger "Bei der Reorganisation eines Satzes von Partitionen müssen diese in geordneter Reihenfolge vorliegen" spa "Para reorganizar un conjunto de particiones, éstas deben de estar ordenadas consecutivamente" swe "När ett antal partitioner omorganiseras måste de vara i konsekutiv ordning" ER_REORG_OUTSIDE_RANGE chi "重组范围分区无法更改除最后分区之外的总范围,无法扩展范围" eng "Reorganize of range partitions cannot change total ranges except for last partition where it can extend the range" ger "Die Reorganisation von RANGE-Partitionen kann Gesamtbereiche nicht verändern, mit Ausnahme der letzten Partition, die den Bereich erweitern kann" spa "El reorganizar un rango de particiones no puede cambiar los rangos totales excepto para la última partición donde se puede extender el rango" swe "Reorganisering av rangepartitioner kan inte ändra den totala intervallet utom för den sista partitionen där intervallet kan utökas" ER_PARTITION_FUNCTION_FAILURE chi "此版不支持此处理程序的分区功能" eng "Partition function not supported in this version for this handler" ger "Partitionsfunktion in dieser Version dieses Handlers nicht unterstützt" spa "Función de partición no soportada en esta versión para este manejador" ER_PART_STATE_ERROR chi "无法从CREATE/ALTER表中定义分区状态" eng "Partition state cannot be defined from CREATE/ALTER TABLE" ger "Partitionszustand kann nicht von CREATE oder ALTER TABLE aus definiert werden" spa "El estado de una partición no se puede definir desde CREATE/ALTER TABLE" swe "Partition state kan inte definieras från CREATE/ALTER TABLE" ER_LIMITED_PART_RANGE chi "%-.64s处理程序仅支持32-bit整数" eng "The %-.64s handler only supports 32 bit integers in VALUES" ger "Der Handler %-.64s unterstützt in VALUES nur 32-Bit-Integers" spa "El manejador %-.64s sólo soporta enteros de 32 bit en VALUES" swe "%-.64s stödjer endast 32 bitar i integers i VALUES" ER_PLUGIN_IS_NOT_LOADED chi "插件'%-.192s'未加载" eng "Plugin '%-.192s' is not loaded" ger "Plugin '%-.192s' ist nicht geladen" spa "Enchufe (plugin) '%-.192s' no cargado" ER_WRONG_VALUE chi "错误%-.32s值:'%-.128T'" eng "Incorrect %-.32s value: '%-.128T'" ger "Falscher %-.32s-Wert: '%-.128T'" spa "Incorrecto %-.32s valor: '%-.128T'" ER_NO_PARTITION_FOR_GIVEN_VALUE chi "表没有%-.64s的分区" eng "Table has no partition for value %-.64s" ger "Tabelle hat für den Wert %-.64s keine Partition" spa "La tabla no tiene partición para valor %-.64s" ER_FILEGROUP_OPTION_ONLY_ONCE chi "设置%s不能超过一次" eng "It is not allowed to specify %s more than once" ger "%s darf nicht mehr als einmal angegegeben werden" spa "No se permite especificar %s más de unva vez" ER_CREATE_FILEGROUP_FAILED chi "无法创建%s" eng "Failed to create %s" ger "Anlegen von %s fehlgeschlagen" hindi "%s को बनाने में असफल रहे" spa "No pude crear %s" ER_DROP_FILEGROUP_FAILED chi "未能DROP%s" eng "Failed to drop %s" ger "Löschen von %s fehlgeschlagen" hindi "%s को हटाने में असफल रहे" spa "No pude eliminar %s" ER_TABLESPACE_AUTO_EXTEND_ERROR chi "处理程序不支持表空间的自动扩展名" eng "The handler doesn't support autoextend of tablespaces" ger "Der Handler unterstützt keine automatische Erweiterung (Autoextend) von Tablespaces" spa "El manejador no soporta autoextensión de espacios de tabla" ER_WRONG_SIZE_NUMBER chi "尺寸参数被错误地指定,编号或表单10M" eng "A size parameter was incorrectly specified, either number or on the form 10M" ger "Ein Größen-Parameter wurde unkorrekt angegeben, muss entweder Zahl sein oder im Format 10M" spa "Se ha especificado de forma incorrecta un parámetro de medida o el número o en la forma 10M" ER_SIZE_OVERFLOW_ERROR chi "尺寸编号是正确的,但我们不允许数字部分超过20亿" eng "The size number was correct but we don't allow the digit part to be more than 2 billion" ger "Die Zahl für die Größe war korrekt, aber der Zahlanteil darf nicht größer als 2 Milliarden sein" spa "El número de medida es correcto pero no permitimos que la parte del dígito tenga más de 2 billones" ER_ALTER_FILEGROUP_FAILED chi "未能改变:%s" eng "Failed to alter: %s" ger "Änderung von %s fehlgeschlagen" hindi "%s को ALTER करने में असफल रहे" spa "No pude alterar: %s" ER_BINLOG_ROW_LOGGING_FAILED chi "将一行写入基于行的二进制日志失败" eng "Writing one row to the row-based binary log failed" ger "Schreiben einer Zeilen ins zeilenbasierte Binärlog fehlgeschlagen" spa "Ha fallado el grabar una fila en historial (log) binario basado en fila" ER_BINLOG_ROW_WRONG_TABLE_DEF chi "表定义主机和从站不匹配:%s" eng "Table definition on master and slave does not match: %s" ger "Tabellendefinition auf Master und Slave stimmt nicht überein: %s" spa "La definición de tabla en maestro (master) y esclavo no coincide: %s" ER_BINLOG_ROW_RBR_TO_SBR chi "使用--log-slave-updates的从站必须使用基于行的二进制日志记录,以便能够复制基于行的二进制日志事件" eng "Slave running with --log-slave-updates must use row-based binary logging to be able to replicate row-based binary log events" ger "Slave, die mit --log-slave-updates laufen, müssen zeilenbasiertes Loggen verwenden, um zeilenbasierte Binärlog-Ereignisse loggen zu können" spa "La ejecución esclava con --log-slave-updates debe de usar un historial (log) binario basado en fila para que pueda replicar eventos de historial (log) binario basados en fila" ER_EVENT_ALREADY_EXISTS chi "事件'%-.192s'已经存在" eng "Event '%-.192s' already exists" ger "Event '%-.192s' existiert bereits" spa "El evento '%-.192s' ya existe" ER_EVENT_STORE_FAILED chi "无法存储事件%s。错误代码%M来自存储引擎" eng "Failed to store event %s. Error code %M from storage engine" ger "Speichern von Event %s fehlgeschlagen. Fehlercode der Speicher-Engine: %M" spa "No pude almacenar evento %s. Código de error %M desde motor de almacenaje" ER_EVENT_DOES_NOT_EXIST chi "未知事件'%-.192s'" eng "Unknown event '%-.192s'" ger "Unbekanntes Event '%-.192s'" spa "Evento desconocido '%-.192s'" ER_EVENT_CANT_ALTER chi "无法改变事件'%-.192s'" eng "Failed to alter event '%-.192s'" ger "Ändern des Events '%-.192s' fehlgeschlagen" hindi "'%-.192s' EVENT को ALTER करने में असफल रहे" spa "No pude alterar evento '%-.192s'" ER_EVENT_DROP_FAILED chi "未能DROP%s" eng "Failed to drop %s" ger "Löschen von %s fehlgeschlagen" hindi "%s को हटाने में असफल रहे" spa "No pude eliminar %s" ER_EVENT_INTERVAL_NOT_POSITIVE_OR_TOO_BIG chi "INTERVAL为负或太大" eng "INTERVAL is either not positive or too big" ger "INTERVAL ist entweder nicht positiv oder zu groß" spa "O INTERVAL no es positivo o es demasiado grande" ER_EVENT_ENDS_BEFORE_STARTS chi "ENDS无效的或在STARTS之前" eng "ENDS is either invalid or before STARTS" ger "ENDS ist entweder ungültig oder liegt vor STARTS" spa "O ENDS es inválido o anterior a STARTS" ER_EVENT_EXEC_TIME_IN_THE_PAST chi "事件执行时间在过去。事件已被禁用" eng "Event execution time is in the past. Event has been disabled" ger "Ausführungszeit des Events liegt in der Vergangenheit. Event wurde deaktiviert" spa "El tiempo de ejecución de evento se encuentra en el pasado. El evento ha sido desactivado" ER_EVENT_OPEN_TABLE_FAILED chi "无法打开mysql.event" eng "Failed to open mysql.event" ger "Öffnen von mysql.event fehlgeschlagen" hindi "mysql.event को खोलने में असफल रहे" spa "No puede abrir mysql.event" ER_EVENT_NEITHER_M_EXPR_NOR_M_AT chi "没有提供DateTime表达式" eng "No datetime expression provided" ger "Kein DATETIME-Ausdruck angegeben" spa "No se ha suministrado expresión datetime" ER_UNUSED_2 eng "You should never see it" spa "No lo debería vd de ver nunca" ER_UNUSED_3 eng "You should never see it" spa "No lo debería vd de ver nunca" ER_EVENT_CANNOT_DELETE chi "无法从mysql.event删除该事件" eng "Failed to delete the event from mysql.event" ger "Löschen des Events aus mysql.event fehlgeschlagen" hindi "EVENT को mysql.event से हटाने मैं असफल रहे" spa "No pude borrar el evento desde mysql.event" ER_EVENT_COMPILE_ERROR chi "在汇编事件的主体时出错" eng "Error during compilation of event's body" ger "Fehler beim Kompilieren des Event-Bodys" spa "Error durante compilación de cuerpo de evento" ER_EVENT_SAME_NAME chi "相同的旧活动名称" eng "Same old and new event name" ger "Alter und neuer Event-Name sind gleich" spa "Mismo nombre de evento viejo y nuevo" ER_EVENT_DATA_TOO_LONG chi "列'%s'数据太长" eng "Data for column '%s' too long" ger "Daten der Spalte '%s' zu lang" spa "Datos demasiado largos para la columna '%s'" ER_DROP_INDEX_FK chi "无法删除索引'%-.192s':外部索引约束中需要它" eng "Cannot drop index '%-.192s': needed in a foreign key constraint" ger "Kann Index '%-.192s' nicht löschen: wird für eine Fremdschlüsselbeschränkung benötigt" spa "No puedo eliminar índice '%-.192s': necesario en una restricción de clave foránea" # When using this error message, use the ER_WARN_DEPRECATED_SYNTAX error # code. ER_WARN_DEPRECATED_SYNTAX_WITH_VER chi "语法'%s'被弃用,将在Mariadb%s中删除。请使用%s" eng "The syntax '%s' is deprecated and will be removed in MariaDB %s. Please use %s instead" ger "Die Syntax '%s' ist veraltet und wird in MariaDB %s entfernt. Bitte benutzen Sie statt dessen %s" spa "La sintaxis '%s' está obsoleta y será quitada en MariaDB %s. Por favor, use %s en su lugar" ER_CANT_WRITE_LOCK_LOG_TABLE chi "您无法获得日志表的写锁。只有读访问是可能的" eng "You can't write-lock a log table. Only read access is possible" ger "Eine Log-Tabelle kann nicht schreibgesperrt werden. Es ist ohnehin nur Lesezugriff möglich" spa "No puede hacer bloqueo de escritura en una tabla de historial (log). Sólo es posible acceso de lectura" ER_CANT_LOCK_LOG_TABLE chi "您无法使用带日志表的锁" eng "You can't use locks with log tables" ger "Log-Tabellen können nicht gesperrt werden" spa "No puede usar bloqueos con tablas de historial (log)" ER_UNUSED_4 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE chi "mysql的列计数。%s是错误的。预期%d,找到%d。使用MariaDB%d创建,现在运行%d。请使用mariadb-upgrade来修复此错误" eng "Column count of mysql.%s is wrong. Expected %d, found %d. Created with MariaDB %d, now running %d. Please use mariadb-upgrade to fix this error" ger "Spaltenanzahl von mysql.%s falsch. %d erwartet, aber %d erhalten. Erzeugt mit MariaDB %d, jetzt unter %d. Bitte benutzen Sie mariadb-upgrade, um den Fehler zu beheben" spa "El contador de columnas de mysql.%s está equivocado. Se esperaba %d, hallado %d. Creado con MariaDB %d, ahora ejecuando %d. Por favor, use mariadb-upgrade para solucionar este error" ER_TEMP_TABLE_PREVENTS_SWITCH_OUT_OF_RBR chi "当会话打开临时表时,无法切换出基于行的二进制日志格式" eng "Cannot switch out of the row-based binary log format when the session has open temporary tables" ger "Kann nicht aus dem zeilenbasierten Binärlog-Format herauswechseln, wenn die Sitzung offene temporäre Tabellen hat" spa "No puedo conmutar fuera del formato de historial (log) binario basado en fila cuando la sesión ha abierto tablas temporales" ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT chi "无法更改存储函数或触发器内的二进制记录格式" eng "Cannot change the binary logging format inside a stored function or trigger" ger "Das Binärlog-Format kann innerhalb einer gespeicherten Funktion oder eines Triggers nicht geändert werden" spa "No puedo cambiar el formato de historial (log) binario dentro de funciones almacenadas o disparadores" ER_UNUSED_13 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_PARTITION_NO_TEMPORARY chi "无法使用分区创建临时表" eng "Cannot create temporary table with partitions" ger "Anlegen temporärer Tabellen mit Partitionen nicht möglich" hindi "अस्थाई टेबल को पार्टिशन्स के साथ नहीं बनाया जा सकता" spa "No puedo crear tabla temporal con particiones" ER_PARTITION_CONST_DOMAIN_ERROR chi "分区常量超出分区功能域" eng "Partition constant is out of partition function domain" ger "Partitionskonstante liegt außerhalb der Partitionsfunktionsdomäne" spa "La constante de partición está fuera del dominio de función de partición" swe "Partitionskonstanten är utanför partitioneringsfunktionens domän" ER_PARTITION_FUNCTION_IS_NOT_ALLOWED chi "不允许此分区功能" eng "This partition function is not allowed" ger "Diese Partitionierungsfunktion ist nicht erlaubt" spa "Esta función de partición no está permitida" swe "Denna partitioneringsfunktion är inte tillåten" ER_DDL_LOG_ERROR chi "DDL日志中的错误" eng "Error in DDL log" ger "Fehler im DDL-Log" hindi "DDL लॉग में त्रुटि हुई" spa "Error en historial (log) DDL" ER_NULL_IN_VALUES_LESS_THAN chi "VALUES LESS THAN不允许使用NULL" eng "Not allowed to use NULL value in VALUES LESS THAN" ger "In VALUES LESS THAN dürfen keine NULL-Werte verwendet werden" spa "No autorizado a usar valor NULL en VALUES LESS THAN" swe "Det är inte tillåtet att använda NULL-värden i VALUES LESS THAN" ER_WRONG_PARTITION_NAME chi "分区名称不正确" eng "Incorrect partition name" ger "Falscher Partitionsname" hindi "पार्टीशन का नाम गलत है" spa "Nombre incorrecto de partición" swe "Felaktigt partitionsnamn" ER_CANT_CHANGE_TX_CHARACTERISTICS 25001 chi "交易正在进行,无法更改事务特性" eng "Transaction characteristics can't be changed while a transaction is in progress" spa "No se pueden cambiar las característias de transacción mientras que una transacción se ecuentre en proceso" ER_DUP_ENTRY_AUTOINCREMENT_CASE chi "ALTER TABLE表会导致AUTO_INCREMENT重建,导致重复的条目'%-.192T'用于索引'%-.192s'" eng "ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%-.192T' for key '%-.192s'" ger "ALTER TABLE führt zur Neusequenzierung von auto_increment, wodurch der doppelte Eintrag '%-.192T' für Schlüssel '%-.192s' auftritt" spa "ALTER TABLE causa resecuenciado de auto_incremento resultando en entrada duplicada '%-.192T' para la clave '%-.192s'" ER_EVENT_MODIFY_QUEUE_ERROR chi "内部调度器错误%d" eng "Internal scheduler error %d" ger "Interner Scheduler-Fehler %d" spa "Error en organizador interno %d" ER_EVENT_SET_VAR_ERROR chi "在开始/停止调度程序期间出错。错误代码%M" eng "Error during starting/stopping of the scheduler. Error code %M" ger "Fehler während des Startens oder Anhalten des Schedulers. Fehlercode %M" spa "Error durante arranque/parada del organizador. Código de error %M" ER_PARTITION_MERGE_ERROR chi "引擎不能用于分区表" eng "Engine cannot be used in partitioned tables" ger "Engine kann in partitionierten Tabellen nicht verwendet werden" spa "No se puede usar el motor en tablas particionadas" swe "Engine inte användas i en partitionerad tabell" ER_CANT_ACTIVATE_LOG chi "无法激活'%-.64s'日志" eng "Cannot activate '%-.64s' log" ger "Kann Logdatei '%-.64s' nicht aktivieren" spa "No puedo activar historial (log) '%-.64s'" ER_RBR_NOT_AVAILABLE chi "服务器不是基于行的复制构建的" eng "The server was not built with row-based replication" ger "Der Server wurde nicht mit zeilenbasierter Replikation gebaut" spa "El servidor no ha sido construido con réplica basada en fila" ER_BASE64_DECODE_ERROR chi "Base64字符串的解码失败" eng "Decoding of base64 string failed" ger "Der Server hat keine zeilenbasierte Replikation" spa "Ha fallado la decodificación de cadena base64" swe "Avkodning av base64 sträng misslyckades" ER_EVENT_RECURSION_FORBIDDEN chi "EVENT主体存在时EVENT DDL语句递归被禁止" eng "Recursion of EVENT DDL statements is forbidden when body is present" ger "Rekursivität von EVENT-DDL-Anweisungen ist unzulässig wenn ein Hauptteil (Body) existiert" spa "Se prohiben sentencias de EVENT DDL cuando se encuentra presente el cuerpo" ER_EVENTS_DB_ERROR chi "无法继续,因为事件调度程序已禁用" eng "Cannot proceed, because event scheduler is disabled" ger "Die Operation kann nicht fortgesetzt werden, da Event Scheduler deaktiviert ist." spa "No puedo proceder porque el organizado de eventos está desactivado" ER_ONLY_INTEGERS_ALLOWED chi "这里只允许整数作为数字" eng "Only integers allowed as number here" ger "An dieser Stelle sind nur Ganzzahlen zulässig" spa "Sólo se permiten enteros como número aquí" ER_UNSUPORTED_LOG_ENGINE chi "存储引擎%s不能用于日志表" eng "Storage engine %s cannot be used for log tables" ger "Speicher-Engine %s kann für Logtabellen nicht verwendet werden" hindi "स्टोरेज इंजन %s को लॉग टेबल्स के लिए इस्तेमाल नहीं किया जा सकता है" spa "No se puede usar el motor de almacenaje %s para tablas de historial (log)" ER_BAD_LOG_STATEMENT chi "如果启用日志记录,则无法'%s'日志表" eng "You cannot '%s' a log table if logging is enabled" ger "Sie können eine Logtabelle nicht '%s', wenn Loggen angeschaltet ist" spa "No puede '%s' una tabla de historial (log) cuando se encuentra activado el llevar historial (log)" ER_CANT_RENAME_LOG_TABLE chi "无法重命名'%s'。启用日志记录时,重命名日志表必须重命名两个表:日志表到存档表,另一个表返回'%s'" eng "Cannot rename '%s'. When logging enabled, rename to/from log table must rename two tables: the log table to an archive table and another table back to '%s'" ger "Kann '%s' nicht umbenennen. Wenn Loggen angeschaltet ist, müssen zwei Tabellen umbenannt werden: die Logtabelle zu einer Archivtabelle, und eine weitere Tabelle zu '%s'" spa "No puedo renombrar '%s'. Si se encuentra activo el llevar historial (log), el renombrar a/desde tabla de historial (log) debe de renombrar dos tablas: la tabla de historial (log) a una tabla archivo y otra tabla de vuelta a '%s'" ER_WRONG_PARAMCOUNT_TO_NATIVE_FCT 42000 chi "对本机函数的呼叫中的参数计数不正确'%-.192s'" eng "Incorrect parameter count in the call to native function '%-.192s'" ger "Falsche Anzahl von Parametern beim Aufruf der nativen Funktion '%-.192s'" spa "Contador de parámetro incorrecto en la llamada a función nativa '%-.192s'" ER_WRONG_PARAMETERS_TO_NATIVE_FCT 42000 chi "对本机函数'%-.192s'呼叫中的参数不正确" eng "Incorrect parameters in the call to native function '%-.192s'" ger "Falscher Parameter beim Aufruf der nativen Funktion '%-.192s'" spa "Parámetros incorrectos en la llamada a función nativa '%-.192s'" ER_WRONG_PARAMETERS_TO_STORED_FCT 42000 chi "呼叫中的参数不正确为存储函数'%-.192s'" eng "Incorrect parameters in the call to stored function '%-.192s'" ger "Falsche Parameter beim Aufruf der gespeicherten Funktion '%-.192s'" spa "Parámetros incorrectos en la llamada a función almacenada '%-.192s'" ER_NATIVE_FCT_NAME_COLLISION chi "此功能'%-.192s'具有与本机函数相同的名称" eng "This function '%-.192s' has the same name as a native function" ger "Die Funktion '%-.192s' hat denselben Namen wie eine native Funktion" spa "Esta función '%-.192s' tiene el mismo nombre que una función nativa" # When using this error message, use the ER_DUP_ENTRY error code. See, for # example, code in handler.cc. ER_DUP_ENTRY_WITH_KEY_NAME 23000 S1009 chi "重复条目'%-.64T'键'%-.192s'" cze "Zvojený klíč '%-.64T' (číslo klíče '%-.192s')" dan "Ens værdier '%-.64T' for indeks '%-.192s'" eng "Duplicate entry '%-.64T' for key '%-.192s'" est "Kattuv väärtus '%-.64T' võtmele '%-.192s'" fre "Duplicata du champ '%-.64T' pour la clef '%-.192s'" ger "Doppelter Eintrag '%-.64T' für Schlüssel '%-.192s'" greek "Διπλή εγγραφή '%-.64T' για το κλειδί '%-.192s'" hun "Duplikalt bejegyzes '%-.64T' a '%-.192s' kulcs szerint" ita "Valore duplicato '%-.64T' per la chiave '%-.192s'" jpn "'%-.64T' は索引 '%-.192s' で重複しています。" kor "중복된 입력 값 '%-.64T': key '%-.192s'" nla "Dubbele ingang '%-.64T' voor zoeksleutel '%-.192s'" nor "Like verdier '%-.64T' for nøkkel '%-.192s'" norwegian-ny "Like verdiar '%-.64T' for nykkel '%-.192s'" pol "Powtórzone wystąpienie '%-.64T' dla klucza '%-.192s'" por "Entrada '%-.64T' duplicada para a chave '%-.192s'" rum "Cimpul '%-.64T' e duplicat pentru cheia '%-.192s'" rus "Дублирующаяся запись '%-.64T' по ключу '%-.192s'" serbian "Dupliran unos '%-.64T' za ključ '%-.192s'" slo "Opakovaný kľúč '%-.64T' (číslo kľúča '%-.192s')" spa "Entrada duplicada '%-.64T' para la clave '%-.192s'" swe "Dublett '%-.64T' för nyckel '%-.192s'" ukr "Дублюючий запис '%-.64T' для ключа '%-.192s'" ER_BINLOG_PURGE_EMFILE chi "打开太多文件,请再次执行命令" eng "Too many files opened, please execute the command again" ger "Zu viele offene Dateien, bitte führen Sie den Befehl noch einmal aus" spa "Demasiados ficheros/archivos abiertos. Por favor, ejecute el comando otra vez" ER_EVENT_CANNOT_CREATE_IN_THE_PAST chi "事件执行时间在过去,并ON COMPLETION NOT PRESERVE。创建后,事件立即丢弃" eng "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was dropped immediately after creation" ger "Ausführungszeit des Events liegt in der Vergangenheit, und es wurde ON COMPLETION NOT PRESERVE gesetzt. Das Event wurde unmittelbar nach Erzeugung gelöscht" spa "El tiempo de jecución del evento se encuentra en el pasado y está configurado ON COMPLETION NOT PRESERVE. El evento fue eliminado inmediatamente tras su creación" ER_EVENT_CANNOT_ALTER_IN_THE_PAST chi "事件执行时间在过去,并ON COMPLETION NOT PRESERVE。事件没有改变。指定将来的时间" eng "Event execution time is in the past and ON COMPLETION NOT PRESERVE is set. The event was not changed. Specify a time in the future" ger "Execution Zeitpunkt des Ereignisses in der Vergangenheit liegt, und es war NACH ABSCHLUSS Set nicht erhalten. Die Veranstaltung wurde nicht verändert. Geben Sie einen Zeitpunkt in der Zukunft" spa "El tiempo de jecución del evento se encuentra en el pasado y está configurado ON COMPLETION NOT PRESERVE. El evento no fue cambiado. Especifique un tiempo del futuro" ER_SLAVE_INCIDENT chi "事件%s发生在master上。消息:%-.64s" eng "The incident %s occurred on the master. Message: %-.64s" ger "Der Vorfall %s passierte auf dem Master. Meldung: %-.64s" spa "Ha ocurrido un incidente %s en el maestro (master). Mensaje: %-.64s" ER_NO_PARTITION_FOR_GIVEN_VALUE_SILENT chi "表对某些现有值没有分区" eng "Table has no partition for some existing values" ger "Tabelle hat für einige bestehende Werte keine Partition" spa "La tabla no tiene partición para algunos valores existentes" ER_BINLOG_UNSAFE_STATEMENT chi "自从BINLOG_FORMAT =STATEMENT以来,使用语句格式写入二进制日志的不安全语句。%s." eng "Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. %s" ger "Unsichere Anweisung ins Binärlog geschrieben, weil Anweisungsformat BINLOG_FORMAT = STATEMENT. %s" spa "Se ha grabado una sentencia no segura en historial (log) binario usando el formato de sentencia desde BINLOG_FORMAT = STATEMENT. %s" swe "Detta är inte säkert att logga i statement-format, för BINLOG_FORMAT = STATEMENT. %s" ER_SLAVE_FATAL_ERROR chi "致命错误:%s" eng "Fatal error: %s" ger "Fataler Fehler: %s" spa "Error fatal: %s" ER_SLAVE_RELAY_LOG_READ_FAILURE chi "relay日志读取失败:%s" eng "Relay log read failure: %s" ger "Relaylog-Lesefehler: %s" spa "Fallo de lectura en historial (log) de reenvío: %s" ER_SLAVE_RELAY_LOG_WRITE_FAILURE chi "relay日志写入失败:%s" eng "Relay log write failure: %s" ger "Relaylog-Schreibfehler: %s" spa "Fallo de grabación en historial (log) de reenvío: %s" ER_SLAVE_CREATE_EVENT_FAILURE chi "无法创建%s" eng "Failed to create %s" ger "Erzeugen von %s fehlgeschlagen" hindi "%s को बनाने मैं असफल रहे" spa "Fallo al crear %s" ER_SLAVE_MASTER_COM_FAILURE chi "Master命令%s失败:%s" eng "Master command %s failed: %s" ger "Master-Befehl %s fehlgeschlagen: %s" spa "El comando maestro (master) %s ha fallado: %s" ER_BINLOG_LOGGING_IMPOSSIBLE chi "二进制记录不可能。消息:%s" eng "Binary logging not possible. Message: %s" ger "Binärlogging nicht möglich. Meldung: %s" spa "No es posible llevar historial (log) binario. Mensaje: %s" ER_VIEW_NO_CREATION_CTX chi "View%`s.%`s没有创建上下文" eng "View %`s.%`s has no creation context" ger "View %`s.%`s hat keinen Erzeugungskontext" spa "La vista %`s.%`s no tiene contexto de creación" ER_VIEW_INVALID_CREATION_CTX chi "Creation View%`s.%`s的上下文无效" eng "Creation context of view %`s.%`s is invalid" ger "Erzeugungskontext des Views%`s.%`s ist ungültig" spa "El contexto de creación de la vista %`s.%`s es inválido" ER_SR_INVALID_CREATION_CTX chi "存储例程%`s.%`s的创建上下文无效" eng "Creation context of stored routine %`s.%`s is invalid" ger "Erzeugungskontext der gespeicherten Routine%`s.%`s ist ungültig" spa "El contexto de creación de la rutina almacenada %`s.%`s es inválido" ER_TRG_CORRUPTED_FILE chi "表的trg文件损坏了。%`s.%`s" eng "Corrupted TRG file for table %`s.%`s" ger "Beschädigte TRG-Datei für Tabelle %`s.%`s" spa "Fichero/archivo TRG estropeado para la tabla %`s.%`s`" ER_TRG_NO_CREATION_CTX chi "表%`s.%`s的触发器没有创建上下文" eng "Triggers for table %`s.%`s have no creation context" ger "Trigger für Tabelle %`s.%`s haben keinen Erzeugungskontext" spa "Los disparadores para la tabla %`s.%`s no tienen contexto de creación" ER_TRG_INVALID_CREATION_CTX chi "触发表%`s.%`s的创建上下文无效" eng "Trigger creation context of table %`s.%`s is invalid" ger "Trigger-Erzeugungskontext der Tabelle %`s.%`s ist ungültig" spa "El contexto de creación del disparador de la tabla %`s.%`s es inválido" ER_EVENT_INVALID_CREATION_CTX chi "事件%`s.%`s的创建上下文无效" eng "Creation context of event %`s.%`s is invalid" ger "Erzeugungskontext des Events %`s.%`s ist ungültig" spa "El contexto de creación del evento %`s.%`s es inválido" ER_TRG_CANT_OPEN_TABLE chi "无法打开触发%`s.%`s的表" eng "Cannot open table for trigger %`s.%`s" ger "Kann Tabelle für den Trigger %`s.%`s nicht öffnen" spa "No puedo abrir tabla para disparador %`s.%`s" ER_CANT_CREATE_SROUTINE chi "无法创建存储过程%`s。检查警告" eng "Cannot create stored routine %`s. Check warnings" ger "Kann gespeicherte Routine %`s nicht erzeugen. Beachten Sie die Warnungen" spa "No puedo crear rutina alnacenada %`s. Revise los avisos" ER_UNUSED_11 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_NO_FORMAT_DESCRIPTION_EVENT_BEFORE_BINLOG_STATEMENT chi "类型%s的Binlog语句未在格式描述binlog语句之前" eng "The BINLOG statement of type %s was not preceded by a format description BINLOG statement" ger "Der BINLOG-Anweisung vom Typ %s ging keine BINLOG-Anweisung zur Formatbeschreibung voran" spa "La sentencia BINLOG del tipo `%s` no ha sido precedida por una sentencia de descripción de formato BINLOG" ER_SLAVE_CORRUPT_EVENT chi "检测到损坏的复制事件" eng "Corrupted replication event was detected" ger "Beschädigtes Replikationsereignis entdeckt" spa "Se ha detectado un evento de réplica estropeado" ER_LOAD_DATA_INVALID_COLUMN chi "LOAD DATA中的列引用(%-.64s)无效" eng "Invalid column reference (%-.64s) in LOAD DATA" ger "Ungültige Spaltenreferenz (%-.64s) bei LOAD DATA" spa "Referencia inválida a columna (%-.64s) en LOAD DATA" ER_LOG_PURGE_NO_FILE chi "未找到清除的log%s" eng "Being purged log %s was not found" ger "Zu bereinigende Logdatei %s wurde nicht gefunden" spa "No ha sido hallado historial (log) %s siendo purgado" ER_XA_RBTIMEOUT XA106 chi "XA_RBTIMEOUT:交易分支回滚:花了太久了" eng "XA_RBTIMEOUT: Transaction branch was rolled back: took too long" ger "XA_RBTIMEOUT: Transaktionszweig wurde zurückgerollt: Zeitüberschreitung" spa "XA_RBTIMEOUT: Rama de transacción ha sido retrocedida (rolled back): transcurrido demasiado tiempo" ER_XA_RBDEADLOCK XA102 chi "XA_RBDEADLOCK:交易分支回滚:检测到死锁" eng "XA_RBDEADLOCK: Transaction branch was rolled back: deadlock was detected" ger "XA_RBDEADLOCK: Transaktionszweig wurde zurückgerollt: Deadlock entdeckt" spa "XA_RBDEADLOCK: Rama de transacción ha dido retrocedida (rolled back): se ha detectado estancamiento (deadlock)" ER_NEED_REPREPARE chi "prepared statement需要重新准备" eng "Prepared statement needs to be re-prepared" ger "Vorbereitete Anweisungen müssen noch einmal vorbereitet werden" spa "Sentencia preparada necesita volver a ser preparada" ER_DELAYED_NOT_SUPPORTED chi "表'%-.192s'不支持延迟选项" eng "DELAYED option not supported for table '%-.192s'" ger "Die DELAYED-Option wird für Tabelle '%-.192s' nicht unterstützt" spa "Opción DELAYED no soportada para la tabla '%-.192s'" WARN_NO_MASTER_INFO eng "There is no master connection '%.*s'" ger "Die Master-Info-Struktur existiert nicht '%.*s'" spa "No existe conexión maestra '%.*s'" WARN_OPTION_IGNORED eng "<%-.64s> option ignored" ger "Option <%-.64s> ignoriert" spa "Opción <%-.64s> ignorada" ER_PLUGIN_DELETE_BUILTIN chi "内置插件无法删除" eng "Built-in plugins cannot be deleted" ger "Eingebaute Plugins können nicht gelöscht werden" spa "No se pueden borrar los enchufes (plugins) internos" WARN_PLUGIN_BUSY chi "插件很忙,将在关机时卸载" eng "Plugin is busy and will be uninstalled on shutdown" ger "Plugin wird verwendet und wird erst beim Herunterfahren deinstalliert" spa "El enchufe (plugin) está ocupado y será desinstalado cuando se apague" ER_VARIABLE_IS_READONLY chi "%s变量'%s'是只读的。使用set%s付值" eng "%s variable '%s' is read-only. Use SET %s to assign the value" ger "%s Variable '%s' ist nur lesbar. Benutzen Sie SET %s, um einen Wert zuzuweisen" spa "%s variable '%s' es de sólo lectura. Use SET %s para asignar el valor" ER_WARN_ENGINE_TRANSACTION_ROLLBACK chi "存储引擎%s不支持此语句的回滚。交易回滚并必须重新启动" eng "Storage engine %s does not support rollback for this statement. Transaction rolled back and must be restarted" ger "Speicher-Engine %s unterstützt für diese Anweisung kein Rollback. Transaktion wurde zurückgerollt und muss neu gestartet werden" spa "El motor de almacenaje %s no soporta retroceso (rollback) para esta sentencia. Transacción retrocedida (rolled back) y debe de ser rearrancada" ER_SLAVE_HEARTBEAT_FAILURE chi "意外的master心跳数据:%s" eng "Unexpected master's heartbeat data: %s" ger "Unerwartete Daten vom Heartbeat des Masters: %s" spa "Datos inesperados de latido (heartbeat) de maestro (master): %s" ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE chi "心跳周期的请求值是负的或超过允许的最大值(%u秒)" eng "The requested value for the heartbeat period is either negative or exceeds the maximum allowed (%u seconds)" spa "El valor requerido para el período de latido o es negativo o excede al máximo permitido (%u segundos)" ER_UNUSED_14 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_CONFLICT_FN_PARSE_ERROR chi "解析冲突功能时出错。消息:%-.64s" eng "Error in parsing conflict function. Message: %-.64s" ger "Fehler beim Parsen einer Konflikt-Funktion. Meldung: %-.64s" spa "Error al analizar función de conflicto. Mensaje: %-.64s" ER_EXCEPTIONS_WRITE_ERROR chi "写入异常表失败。消息:%-.128s" eng "Write to exceptions table failed. Message: %-.128s"" ger "Schreiben in Ausnahme-Tabelle fehlgeschlagen. Meldung: %-.128s"" spa "Ha fallado el grabar en tabla de excepciones. Mensaje: %-.128s"" ER_TOO_LONG_TABLE_COMMENT chi "表格备注'%-.64s'太长(max =%u)" eng "Comment for table '%-.64s' is too long (max = %u)" ger "Kommentar für Tabelle '%-.64s' ist zu lang (max = %u)" por "Comentário para a tabela '%-.64s' é longo demais (max = %u)" spa "El comentario para tabla '%-.64s' es demasiado largo (máx = %u)" ER_TOO_LONG_FIELD_COMMENT chi "字段'%-.64s'太长(max =%u)" eng "Comment for field '%-.64s' is too long (max = %u)" ger "Kommentar für Feld '%-.64s' ist zu lang (max = %u)" por "Comentário para o campo '%-.64s' é longo demais (max = %u)" spa "El comentario para el campo '%-.64s' es demasiado largo (máx = %u)" ER_FUNC_INEXISTENT_NAME_COLLISION 42000 chi "FUNCTION %s不存在。在参考手册中查看“函数名称解析”部分" eng "FUNCTION %s does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual" ger "FUNCTION %s existiert nicht. Erläuterungen im Abschnitt 'Function Name Parsing and Resolution' im Referenzhandbuch" spa "La FUNCTION %s no existe. Revise la sección de 'Function Name Parsing and Resolution' en el Manual de Referencia" # When updating these, please update EXPLAIN_FILENAME_MAX_EXTRA_LENGTH in # sql_table.h with the new maximal additional length for explain_filename. ER_DATABASE_NAME chi "数据库" eng "Database" ger "Datenbank" hindi "डेटाबेस" spa "Base de datos" swe "Databas" ER_TABLE_NAME chi "表" eng "Table" ger "Tabelle" hindi "टेबल" spa "Tabla" swe "Tabell" ER_PARTITION_NAME chi "分区" eng "Partition" ger "Partition" hindi "पार्टीशन" spa "Partición" swe "Partition" ER_SUBPARTITION_NAME chi "下分区" eng "Subpartition" ger "Unterpartition" hindi "सब-पार्टीशन" spa "Subpartición" swe "Subpartition" ER_TEMPORARY_NAME chi "暂时的" eng "Temporary" ger "Temporär" hindi "अस्थायी" spa "Temporaria" swe "Temporär" ER_RENAMED_NAME chi "重命名" eng "Renamed" ger "Umbenannt" spa "Renombrado" swe "Namnändrad" ER_TOO_MANY_CONCURRENT_TRXS chi "“太多并发交易" eng "Too many active concurrent transactions" ger "Zu viele aktive simultane Transaktionen" spa "Demasiadas transacciones concurrentes activas" WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED chi "非ASCII分隔符参数不完全支持" eng "Non-ASCII separator arguments are not fully supported" ger "Nicht-ASCII-Trennargumente werden nicht vollständig unterstützt" spa "Los argumentos con separador No ASCII no están completamente soportados" ER_DEBUG_SYNC_TIMEOUT chi "调试同步点等待超时" eng "debug sync point wait timed out" ger "Debug Sync Point Wartezeit überschritten" spa "agotado tiempo de espera de punto de sincronización de depuración" ER_DEBUG_SYNC_HIT_LIMIT chi "调试同步点限制达到" eng "debug sync point hit limit reached" ger "Debug Sync Point Hit Limit erreicht" spa "alcanzado límite de punto de sincronización de depuración" ER_DUP_SIGNAL_SET 42000 chi "重复条件信息项'%s'" eng "Duplicate condition information item '%s'" ger "Informationselement '%s' für Duplikatbedingung" spa "Duplicado elemento de información de condición '%s'" # Note that the SQLSTATE is not 01000, it is provided by SIGNAL/RESIGNAL ER_SIGNAL_WARN 01000 chi "未处理用户定义的警告条件" eng "Unhandled user-defined warning condition" ger "Unbehandelte benutzerdefinierte Warnbedingung" spa "Condición de aviso definida por usuario sin manejar" # Note that the SQLSTATE is not 02000, it is provided by SIGNAL/RESIGNAL ER_SIGNAL_NOT_FOUND 02000 chi "未找到的用户定义未找到条件" eng "Unhandled user-defined not found condition" ger "Unbehandelte benutzerdefinierte Nicht-gefunden-Bedingung" spa "Condición de no hallado definida por usuario sin manejar" # Note that the SQLSTATE is not HY000, it is provided by SIGNAL/RESIGNAL ER_SIGNAL_EXCEPTION HY000 chi "未处理用户定义的异常条件" eng "Unhandled user-defined exception condition" ger "Unbehandelte benutzerdefinierte Ausnahmebedingung" spa "Condición de excepción definida por usuario sin manejar" ER_RESIGNAL_WITHOUT_ACTIVE_HANDLER 0K000 chi "RESIGNAL处理程序不活跃" eng "RESIGNAL when handler not active" ger "RESIGNAL bei nicht aktivem Handler" spa "RESIGNAL cuando el manejador no activo" ER_SIGNAL_BAD_CONDITION_TYPE chi "SIGNAL/RESIGNAL只能使用SQLState定义的条件" eng "SIGNAL/RESIGNAL can only use a CONDITION defined with SQLSTATE" ger "SIGNAL/RESIGNAL kann nur mit einer Bedingung (CONDITION) benutzt werden, die bei SQLSTATE definiert wurde" spa "SIGNAL/RESIGNAL sólo pueden usar una CONDITION definida mediante SQLSTATE" WARN_COND_ITEM_TRUNCATED chi "数据被截断为条件项目'%s'" eng "Data truncated for condition item '%s'" ger "Daten gekürzt für Bedingungselement '%s'" spa "Datos truncados para elemento de condición '%s'" ER_COND_ITEM_TOO_LONG chi "条件项目'%s'的数据太长" eng "Data too long for condition item '%s'" ger "Daten zu lang für Bedingungselement '%s'" spa "Datos demasiados largos para elemento de condición '%s'" ER_UNKNOWN_LOCALE chi "未知区域设置:'%-.64s'" eng "Unknown locale: '%-.64s'" ger "Unbekannte Locale: '%-.64s'" spa "Localización (locale) desconocida: '%-.64s'" ER_SLAVE_IGNORE_SERVER_IDS chi "请求的服务器ID%d与SLAVE启动选项--replicate-same-server-id冲突" eng "The requested server id %d clashes with the slave startup option --replicate-same-server-id" ger "Die angeforderte Server-ID %d steht im Konflikt mit der Startoption --replicate-same-server-id für den Slave" spa "La id %d del servidor requerido choca con la opción de arranque del esclavo --replicate-same-server-id" ER_QUERY_CACHE_DISABLED chi "查询缓存已禁用;将query_cache_type设置为ON或DEMAND启用它" eng "Query cache is disabled; set query_cache_type to ON or DEMAND to enable it" spa "Caché de consulta (query) desactivada; configura query_cache_type a ON o DEMAND para activarla" ER_SAME_NAME_PARTITION_FIELD chi "重复分区字段名称'%-.192s'" eng "Duplicate partition field name '%-.192s'" ger "Partitionsfeld '%-.192s' ist ein Duplikat" spa "Nombre de campo de partición duplicado '%-.192s'" ER_PARTITION_COLUMN_LIST_ERROR chi "分区用的列和列表使用不一致" eng "Inconsistency in usage of column lists for partitioning" ger "Inkonsistenz bei der Benutzung von Spaltenlisten für Partitionierung" spa "Inconsistencia en uso de listas de columna para particionar" ER_WRONG_TYPE_COLUMN_VALUE_ERROR chi "不正确类型的分区列值" eng "Partition column values of incorrect type" ger "Partitionsspaltenwerte sind vom falschen Typ" spa "Valores de columna de partición de tipo incorrecto" ER_TOO_MANY_PARTITION_FUNC_FIELDS_ERROR chi "'%-.192s'中的太多字段" eng "Too many fields in '%-.192s'" ger "Zu viele Felder in '%-.192s'" spa "Demasiados campos en '%-.192s'" ER_MAXVALUE_IN_VALUES_IN chi "不能在VALUES IN使用MAXVALUE" eng "Cannot use MAXVALUE as value in VALUES IN" ger "MAXVALUE kann nicht als Wert in VALUES IN verwendet werden" spa "No puedo usar MAXVALUE como valor en VALUES IN" ER_TOO_MANY_VALUES_ERROR chi "这种类型不能有多个值%-.64s 分区" eng "Cannot have more than one value for this type of %-.64s partitioning" ger "Für den Partionierungstyp %-.64s darf es nicht mehr als einen Wert geben" spa "No puedo tener más de un valor para este tipo de particionamiento %-.64s" ER_ROW_SINGLE_PARTITION_FIELD_ERROR chi "仅允许的多字段列分区的VALUES IN的行表达式" eng "Row expressions in VALUES IN only allowed for multi-field column partitioning" ger "Zeilenausdrücke in VALUES IN sind nur für Mehrfeld-Spaltenpartionierung erlaubt" spa "Expresiones de fila en VALUES IN sólo permitidas para particionamiento de columna multi-campo" ER_FIELD_TYPE_NOT_ALLOWED_AS_PARTITION_FIELD chi "字段'%-.192s'类型不允许为此类型的分区类型" eng "Field '%-.192s' is of a not allowed type for this type of partitioning" ger "Feld '%-.192s' ist für diese Art von Partitionierung von einem nicht zulässigen Typ" spa "El campo '%-.192s' es de un tipo no permitido para este tipo de particionado" ER_PARTITION_FIELDS_TOO_LONG chi "分区字段的总长度太大" eng "The total length of the partitioning fields is too large" ger "Die Gesamtlänge der Partitionsfelder ist zu groß" spa "El tamaño total de los campos de particionado es demasiado grande" ER_BINLOG_ROW_ENGINE_AND_STMT_ENGINE chi "无法执行语句:由于引擎不能支持行和语句,因此无法写入二进制日志" eng "Cannot execute statement: impossible to write to binary log since both row-incapable engines and statement-incapable engines are involved" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que ambos motores de fila-incapaz y de sentencia-incapaz están involucrados" ER_BINLOG_ROW_MODE_AND_STMT_ENGINE chi "无法执行语句:由于BINLOG_FORMAT =ROW和至少一个表使用存储引擎限制为基于语句的日志记录,因此无法写入二进制日志" eng "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = ROW and at least one table uses a storage engine limited to statement-based logging" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que BINLOG_FORMAT = ROW y al menos una tabla utiliza motor de almacenaje limitado a historiales basados en sentencia" ER_BINLOG_UNSAFE_AND_STMT_ENGINE chi "无法执行语句:由于语句不安全,无法写入二进制日志,存储引擎仅限于基于语句的日志记录,而BINLOG_FORMAT = MIXED。%s." eng "Cannot execute statement: impossible to write to binary log since statement is unsafe, storage engine is limited to statement-based logging, and BINLOG_FORMAT = MIXED. %s" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia no es segura, el motor de almacenaje está limitado a historial basado en sentencia y BINLOG_FORMAT = MIXED. %s" ER_BINLOG_ROW_INJECTION_AND_STMT_ENGINE chi "无法执行语句:由于语句以行格式,至少一个表使用基于语句的日志记录的存储引擎,因此无法写入二进制日志。" eng "Cannot execute statement: impossible to write to binary log since statement is in row format and at least one table uses a storage engine limited to statement-based logging" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia está en un formato de fila y al menos una tabla utiliza un motor de almacenaje limitado a historial basado en sentencia" ER_BINLOG_STMT_MODE_AND_ROW_ENGINE chi "无法执行语句:由于BINLOG_FORMAT = STATEMENT,并且至少一个表使用存储引擎限制为基于行的日志记录,因此无法写入二进制日志。%s" eng "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging.%s" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que BINLOG_FORMAT = STATEMENT y al menos una tabla utilizan un motor de almacenaje limitado a historial basado en fila. %s" ER_BINLOG_ROW_INJECTION_AND_STMT_MODE chi "无法执行语句:由于语句的正常格式和BINLOG_FORMAT = STATEMENT,因此无法写入二进制日志" eng "Cannot execute statement: impossible to write to binary log since statement is in row format and BINLOG_FORMAT = STATEMENT" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que la sentencia está en formato de fila y BINLOG_FORMAT = STATEMENT" ER_BINLOG_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE chi "无法执行语句:由于涉及多个引擎并且至少有一个引擎是自记录的,因此无法写入二进制日志。" eng "Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging" spa "No puedo ejecutar sentencia: imposible grabar historial (log) binario ya que hay más de un motor involucrado y al menos un motor usa auto-historial" ER_BINLOG_UNSAFE_LIMIT chi "该语句不安全,因为它使用限制子句。这不安全,因为所包含的一组行无法预测" eng "The statement is unsafe because it uses a LIMIT clause. This is unsafe because the set of rows included cannot be predicted" spa "La sentencia no es segura debido a usar una cláusula LIMIT. No es segura porque el conjunto incluido de filas no se puede predecir" ER_BINLOG_UNSAFE_INSERT_DELAYED chi "该声明不安全,因为它使用插入延迟。这是不安全的,因为无法预测插入行的时间" eng "The statement is unsafe because it uses INSERT DELAYED. This is unsafe because the times when rows are inserted cannot be predicted" spa "La sentencia no es segura debido a usar una INSERT DELAYED. No es segura porque los momentos en que las filas han de insertarse no se pueden predecir" ER_BINLOG_UNSAFE_SYSTEM_TABLE chi "该声明不安全,因为它使用常规日志,慢查询日志或performance_schema表。这是不安全的,因为系统表可能在slave上不同" eng "The statement is unsafe because it uses the general log, slow query log, or performance_schema table(s). This is unsafe because system tables may differ on slaves" spa "La sentencia no es segura debido a usar el historial (log) general, un historial (log) lento o tabla(s) de performance_schema. No es segura porque las tablas de sistema pueden diferir de las esclavas" ER_BINLOG_UNSAFE_AUTOINC_COLUMNS chi "语句不安全,因为它调用了插入AUTO_INCREMENT列的触发器或存储函数。插入的值无法正确记录" eng "Statement is unsafe because it invokes a trigger or a stored function that inserts into an AUTO_INCREMENT column. Inserted values cannot be logged correctly" spa "La sentencia no es segura debido a invocar un disparador o una función almacenada que inserta una columna de AUTO_INCREMENT. No se puede llevar historial correcto de Los valores insertados". ER_BINLOG_UNSAFE_UDF chi "语句不安全,因为它使用了一个可能在从设备上返回相同值的UDF" eng "Statement is unsafe because it uses a UDF which may not return the same value on the slave" spa "La sentencia no es segura porque usa un UDF que puede no devolver el mismo valor en el esclavo" ER_BINLOG_UNSAFE_SYSTEM_VARIABLE chi "语句不安全,因为它使用的系统变量可能在从站上具有不同的值" eng "Statement is unsafe because it uses a system variable that may have a different value on the slave" spa "La sentencia no es segura porque usa una variable de sistema que puede tener un valor diferente en el esclavo" ER_BINLOG_UNSAFE_SYSTEM_FUNCTION chi "语句不安全,因为它使用系统函数可能在从站上返回不同的值" eng "Statement is unsafe because it uses a system function that may return a different value on the slave" spa "La sentencia no es segura porque usa una función de sistema que puede devolver un valor diferente en el esclavo" ER_BINLOG_UNSAFE_NONTRANS_AFTER_TRANS chi "语句不安全,因为它在访问同一事务中访问事务表后访问非事务性表" eng "Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction" spa "La sentencia no es segura porque accede a una tabla no transaccional tras acceder a una transaccional dentro de la misma transacción" ER_MESSAGE_AND_STATEMENT chi "%s.语句:%s" eng "%s. Statement: %s" spa "%s. Sentencia: %s" ER_SLAVE_CONVERSION_FAILED chi "列%d表'%-.192s.%-.192s'无法从'%-.50s'类型为'%-.50s'" eng "Column %d of table '%-.192s.%-.192s' cannot be converted from type '%-.50s' to type '%-.50s'" spa "La columna %d de la tabla '%-.192s.%-.192s' no puede ser convertida desde el tipo '%-.50s' al tipo '%-.50s'" ER_SLAVE_CANT_CREATE_CONVERSION chi "无法为表创建转换表'%-.192s.%-.192s'" eng "Can't create conversion table for table '%-.192s.%-.192s'" spa "No puedo crear tabla de conversión para la tabla '%-.192s.%-.192s'" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT chi "无法在事务中修改@@session.binlog_format" eng "Cannot modify @@session.binlog_format inside a transaction" spa "No puedo modificar @@session.binlog_format dentro de una transacción" ER_PATH_LENGTH chi "指定%.64T的路径太长了" eng "The path specified for %.64T is too long" hindi "%.64T के लिए निर्दिष्ट पथ बहुत लंबा है" spa "La ruta especificada para %.64T es demasiado larga" ER_WARN_DEPRECATED_SYNTAX_NO_REPLACEMENT chi "'%s'被弃用,将在将来的版本中删除" eng "'%s' is deprecated and will be removed in a future release" ger "'%s' ist veraltet und wird in einer zukünftigen Version entfernt werden" spa "'%s' está obsoleto y será quitada en una entrega futura" ER_WRONG_NATIVE_TABLE_STRUCTURE chi "本机表'%-.64s'。'%-.64s'具有错误的结构" eng "Native table '%-.64s'.'%-.64s' has the wrong structure" spa "La tabla nativa '%-.64s'.'%-.64s' tiene una estructura equivocada" ER_WRONG_PERFSCHEMA_USAGE chi "performance_schema使用无效" eng "Invalid performance_schema usage" hindi "performance_schema का अवैध उपयोग" spa "Uso inválido de performance_schema" ER_WARN_I_S_SKIPPED_TABLE chi "表'%s'.'%s'由于并发DDL语句正在修改其定义,因此跳过" eng "Table '%s'.'%s' was skipped since its definition is being modified by concurrent DDL statement" spa "La tabla '%s'.'%s' fue saltada ya que su definición está siendo modificada por la sentencia DDL concurrente" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT chi "无法在交易事务中修改@@session.binlog_direct_non_transactional_updates" eng "Cannot modify @@session.binlog_direct_non_transactional_updates inside a transaction" spa "No puedo modificar @@session.binlog_direct_non_transactional_updates dentro de una transacción" ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT chi "无法在存储的函数或触发器内更改Binlog Direct标志" eng "Cannot change the binlog direct flag inside a stored function or trigger" spa "No puedo cambiar la bandera directa de binlog dentro de una función almacenada o de un disparador" ER_SPATIAL_MUST_HAVE_GEOM_COL 42000 chi "空间索引可以仅包含几何类型列" eng "A SPATIAL index may only contain a geometrical type column" ger "Ein raumbezogener Index (SPATIAL) darf nur Spalten geometrischen Typs enthalten" spa "Un índice SPATIAL sólo puede contener una columna de tipo geométrico" ER_TOO_LONG_INDEX_COMMENT chi "索引评论'%-.64s'太长(max =%lu)" eng "Comment for index '%-.64s' is too long (max = %lu)" spa "El comentario para el índice '%-.64s' es demasiado largo (máx = %lu)" ER_LOCK_ABORTED chi "由于待处理的独家锁,等待锁被中止" eng "Wait on a lock was aborted due to a pending exclusive lock" spa "Se ha abortado la espera por un bloqueo debido a bloqueo exclusivo pendiente" ER_DATA_OUT_OF_RANGE 22003 chi "%s值超出'%s'范围" eng "%s value is out of range in '%s'" spa "%s valor se encuentra fuera de rango '%s'" ER_WRONG_SPVAR_TYPE_IN_LIMIT chi "基于非整数类型的基于LIMIT子句的变量" eng "A variable of a non-integer based type in LIMIT clause" spa "Una variable de tipo basado en no entero en cláusula LIMIT" ER_BINLOG_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE chi "混合声明中的自记录和非自动记录引擎是不安全的" eng "Mixing self-logging and non-self-logging engines in a statement is unsafe" spa "No es segura la mezcla de motores de auto-historial (log) y de no auto-historial en una sentencia" ER_BINLOG_UNSAFE_MIXED_STATEMENT chi "语句访问非致突变表以及事务性或临时表,并写入其中任何一个" eng "Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them" spa "La sentencia accede a tabla no transaccional así como transaccional o tabla temporal y graba en cualquiera de ellas" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN chi "无法修改事务中的@@sessient.sql_log_bin" eng "Cannot modify @@session.sql_log_bin inside a transaction" spa "No puedo modificar @@session.sql_log_bin dentro de una transacción" ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN chi "无法在存储的函数或触发器内更改SQL_LOG_BIN" eng "Cannot change the sql_log_bin inside a stored function or trigger" spa "No puedo cambiar sql_log_bin dentro de una función almacenada o disparador" ER_FAILED_READ_FROM_PAR_FILE chi "无法从.par文件中读取" eng "Failed to read from the .par file" hindi ".par फ़ाइल से पढ़ने में असफल रहे" spa "No pude leer desde fichero/archivo .par" swe "Misslyckades läsa från .par filen" ER_VALUES_IS_NOT_INT_TYPE_ERROR chi "分区的值'%-.64s'必须具有类型INT" eng "VALUES value for partition '%-.64s' must have type INT" spa "El valor VALUES para la partición '%-.64s' debe de tener el tipo INT" swe "Värden i VALUES för partition '%-.64s' måste ha typen INT" ER_ACCESS_DENIED_NO_PASSWORD_ERROR 28000 chi "拒绝用户'%s'@'%s'" cze "Přístup pro uživatele '%s'@'%s'" dan "Adgang nægtet bruger: '%s'@'%s'" eng "Access denied for user '%s'@'%s'" est "Ligipääs keelatud kasutajale '%s'@'%s'" fre "Accès refusé pour l'utilisateur: '%s'@'%s'" ger "Benutzer '%s'@'%s' hat keine Zugriffsberechtigung" greek "Δεν επιτέρεται η πρόσβαση στο χρήστη: '%s'@'%s'" hindi "यूज़र '%s'@'%s' को अनुमति नहीं है" hun "A(z) '%s'@'%s' felhasznalo szamara tiltott eleres" ita "Accesso non consentito per l'utente: '%s'@'%s'" kor "'%s'@'%s' 사용자는 접근이 거부 되었습니다." nla "Toegang geweigerd voor gebruiker: '%s'@'%s'" nor "Tilgang nektet for bruker: '%s'@'%s'" norwegian-ny "Tilgang ikke tillate for brukar: '%s'@'%s'" por "Acesso negado para o usuário '%s'@'%s'" rum "Acces interzis pentru utilizatorul: '%s'@'%s'" rus "Доступ закрыт для пользователя '%s'@'%s'" serbian "Pristup je zabranjen korisniku '%s'@'%s'" slo "Zakázaný prístup pre užívateľa: '%s'@'%s'" spa "Acceso denegado para usuario: '%s'@'%s'" swe "Användare '%s'@'%s' är ej berättigad att logga in" ukr "Доступ заборонено для користувача: '%s'@'%s'" ER_SET_PASSWORD_AUTH_PLUGIN chi "SET PASSWORD不适用于通过%s插件验证的用户" eng "SET PASSWORD is not applicable for users authenticating via %s plugin" ukr "SET PASSWORD не можна застосувати для користувачів, що автентифікуються з допомогою плагінy %s" ER_GRANT_PLUGIN_USER_EXISTS chi "由于用户%-.*s已经存在,GRANT IDENTIFIED WITH授权是非法的" eng "GRANT with IDENTIFIED WITH is illegal because the user %-.*s already exists" spa "GRANT con IDENTIFIED WITH es ilegal porque el usuario %-.*s ya existe" ER_TRUNCATE_ILLEGAL_FK 42000 chi "无法截断外键约束中引用的表(%.192s)" eng "Cannot truncate a table referenced in a foreign key constraint (%.192s)" spa "No puedo truncar una tabla referenciada en una restricción de clave foránea (%.192s)" ER_PLUGIN_IS_PERMANENT chi "插件'%s'是force_plus_permanent,无法卸载" eng "Plugin '%s' is force_plus_permanent and can not be unloaded" spa "El enchufe (plugin) '%s' está force_plus_permanent y no puede ser descargado" ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MIN chi "心跳期的要求值小于1毫秒。该值重置为0,这意味着心跳将有效地禁用" eng "The requested value for the heartbeat period is less than 1 millisecond. The value is reset to 0, meaning that heartbeating will effectively be disabled" spa "El valor de requerimiento para el período de latido es menor de 1 milisegundo. El valor se vuelve a poner a 0, indicando que el latido será efectivamente desactivado" ER_SLAVE_HEARTBEAT_VALUE_OUT_OF_RANGE_MAX chi "心跳期的请求值超出了“slave_net_timeout”秒的值。该期间的明智价值应小于超时" eng "The requested value for the heartbeat period exceeds the value of `slave_net_timeout' seconds. A sensible value for the period should be less than the timeout" spa "El valor de requerimiento para el período de latido excede el valor de `slave_net_timeout` segundos. Un valor sensible para el período debería de ser menor que el 'tiempo agotado'" ER_STMT_CACHE_FULL chi "需要多行语句超过“max_binlog_stmt_cache_size”字节的存储;增加这个mariadbd变量,然后重试" eng "Multi-row statements required more than 'max_binlog_stmt_cache_size' bytes of storage." spa "Las sentencias Multi-fila requieren de más de 'max_binlog_stmt_cache_size' bytes para almacenaje." ER_MULTI_UPDATE_KEY_CONFLICT chi "由于表格被更新为'%-.192s'和'%-.192s',因此不允许允许主键/分区索引更新。" eng "Primary key/partition key update is not allowed since the table is updated both as '%-.192s' and '%-.192s'" spa "La actualización de clave primaria de o de partición no está permitida por estar la tabla actualizada como '%-.192s' y '%-.192s'" # When translating this error message make sure to include "ALTER TABLE" in the # message as mariadb-check parses the error message looking for ALTER TABLE. ER_TABLE_NEEDS_REBUILD chi "表需重建。请做ALTER TABLE %`s FORCE”或转储/重新加载以修复它!" eng "Table rebuild required. Please do \"ALTER TABLE %`s FORCE\" or dump/reload to fix it!" spa "Se requiere reconstrucción de la tabla. Por favor, ¡haga un \"ALTER TABLE %`s FORCE\" o volcado/recarga para solucionarlo!" WARN_OPTION_BELOW_LIMIT chi "'%s'的值应该不小于'%s'的值" eng "The value of '%s' should be no less than the value of '%s'" spa "El valor de '%s' debería de ser no menor que el valor de '%s'" ER_INDEX_COLUMN_TOO_LONG chi "索引列太大。最大列大小为%lu字节" eng "Index column size too large. The maximum column size is %lu bytes" spa "El tamaño de índice de columna es demasiado grande. El tamaño máximo de columna es de %lu bytes" ER_ERROR_IN_TRIGGER_BODY chi "触发器'%-.64s'内存在错误:'%-.256s'" eng "Trigger '%-.64s' has an error in its body: '%-.256s'" spa "El disparador '%-.64s' tiene una error en su cuerpo: '%-.256s'" ER_ERROR_IN_UNKNOWN_TRIGGER_BODY chi "未知触发器内存在错误:'%-.256s'" eng "Unknown trigger has an error in its body: '%-.256s'" spa "El disparador desconocido tiene un error en su cuerpo: '%-.256s'" ER_INDEX_CORRUPT chi "索引%s已损坏" eng "Index %s is corrupted" spa "El índice %s está estropeado" ER_UNDO_RECORD_TOO_BIG chi "撤消日志记录太大" eng "Undo log record is too big" spa "El registro de historial (log) para deshacer es demasiado grande" ER_BINLOG_UNSAFE_INSERT_IGNORE_SELECT chi "INSERT IGNORE...SELECT不安全,因为选择由select检索行的顺序确定哪个(如果有)行被忽略。无法预测此顺序,并且在master和slave方面可能有所不同" eng "INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave" spa "INSERT IGNORE... SELECT es no seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_INSERT_SELECT_UPDATE chi "INSERT... SELECT... ON DUPLICATE KEY UPDATE是不安全的,因为SELECT检索行的顺序确定哪个(如果有的话)是更新的。无法预测此顺序,并且在master和slave方面可能有所不同" eng "INSERT... SELECT... ON DUPLICATE KEY UPDATE is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are updated. This order cannot be predicted and may differ on master and the slave" spa "INSERT... SELECT... ON DUPLICATE KEY UPDATE no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son actualizadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_REPLACE_SELECT chi "REPLACE... SELECT 不安全,因为选择由select检索行的顺序确定哪个(如果有)行被替换。无法预测此顺序,并且在master和slave方面可能有所不同" eng "REPLACE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave" spa "REPLACE... SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son sustituidas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_CREATE_IGNORE_SELECT chi "CREATE... IGNORE SELECT是不安全,因为选择由SELECT检索行的顺序确定哪个(如果有)行被忽略。无法预测此顺序,并且在master和slave方面可能有所不同" eng "CREATE... IGNORE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave" spa "CREATE... IGNORE SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_CREATE_REPLACE_SELECT chi "CREATE... REPLACE SELECT不安全,因为选择由SELECT检索行的顺序确定哪个(如果有)是替换哪个(如果有的话)。无法预测此顺序,并且在master和slave方面可能有所不同" eng "CREATE... REPLACE SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are replaced. This order cannot be predicted and may differ on master and the slave" spa "CREATE... REPLACE SELECT no es seguro porque el orden en el que las filas se recuperan por el SELECT determina qué filas (si hay alguna) son sustituidas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_UPDATE_IGNORE chi "UPDATE IGNORE不安全,因为更新行的顺序确定了哪个(如果有)行被忽略。无法预测此顺序,并且在master和slave方面可能有所不同" eng "UPDATE IGNORE is unsafe because the order in which rows are updated determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave" spa "UPDATE IGNORE no es seguro porque el orden en el que las filas son actualizadas determina qué filas (si hay alguna) son ignoradas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_UNUSED_15 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_UNUSED_16 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_BINLOG_UNSAFE_WRITE_AUTOINC_SELECT chi "从另一个表选择后,使用自动增量列的表格写入的语句是不安全的,因为检索行的顺序确定将写入哪些(如果有)行。无法预测此顺序,并且在主站和slave方面可能有所不同" eng "Statements writing to a table with an auto-increment column after selecting from another table are unsafe because the order in which rows are retrieved determines what (if any) rows will be written. This order cannot be predicted and may differ on master and the slave" spa "Las sentencias que graban en una tabla con columna de auto-incremento tras seleccionar desde otra tabla no son seguras porque el orden en el que las filas son recuperadas determina qué filas (si hay alguna) serán grabadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_CREATE_SELECT_AUTOINC chi "创建表...在具有自动增量列的表上选择...不安全,因为选择的顺序是由select检索行的顺序,确定插入哪个(如果有)行。无法预测此订单,并且在主站和slave方面可能有所不同" eng "CREATE TABLE... SELECT... on a table with an auto-increment column is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are inserted. This order cannot be predicted and may differ on master and the slave" spa "CREATE TABLE... SELECT... en una tabla con columna de auto-incremento no es segura porque el orden en el que las filas son recuperadas por el SELECT determina qué filas (si hay alguna) serán insertadas. Este orden no puede ser predicho y puede diferir entre maestro (master) y esclavo" ER_BINLOG_UNSAFE_INSERT_TWO_KEYS chi "在具有多个唯一键的表上INSERT... ON DUPLICATE KEY UPDATE的重复索引更新是不安全的" eng "INSERT... ON DUPLICATE KEY UPDATE on a table with more than one UNIQUE KEY is unsafe" spa "INSERT... ON DUPLICATE KEY UPDATE en una tabla con más de una UNIQUE KEY no es segura" ER_UNUSED_28 chi "你永远不应该看到它" eng "You should never see it" spa "Nunca debería vd de ver esto" ER_VERS_NOT_ALLOWED chi "系统版本的表%`s.%`s不允许" eng "Not allowed for system-versioned table %`s.%`s" ER_BINLOG_UNSAFE_AUTOINC_NOT_FIRST chi "插入AutoIncrement字段,该字段不是组成的主键中的第一部分是不安全的" eng "INSERT into autoincrement field which is not the first part in the composed primary key is unsafe" spa "INSERT dentro de campo con autoincremento que no es la primera parte en la clave primaria compuesta no es seguro" # # End of 5.5 error messages. # ER_CANNOT_LOAD_FROM_TABLE_V2 chi "不能从加载%s.%s。表可能损坏了" eng "Cannot load from %s.%s. The table is probably corrupted" ger "Kann %s.%s nicht einlesen. Tabelle ist wahrscheinlich beschädigt" spa "No puedo cargar desde %s.%s. La tabla está probablemente estropeada" ER_MASTER_DELAY_VALUE_OUT_OF_RANGE chi "主延迟的所需值%lu超过最大%lu" eng "The requested value %lu for the master delay exceeds the maximum %lu" spa "El valor requerido %lu para retraso en maestro (master) excede el máximo de %lu" ER_ONLY_FD_AND_RBR_EVENTS_ALLOWED_IN_BINLOG_STATEMENT chi "在Binlog语句中只允许Format_Description_Log_Event和行事件(但是提供了%s)" eng "Only Format_description_log_event and row events are allowed in BINLOG statements (but %s was provided)" spa "Sólo se permiten Format_description_log_event y eventos de fila en sentencias BINLOG (pero %s fue suministrado)" ER_PARTITION_EXCHANGE_DIFFERENT_OPTION chi "分区和表之间的非匹配属性'%-.64s'" eng "Non matching attribute '%-.64s' between partition and table" spa "Atributo no coincidente '%-.64s' entre la partición y la tabla" swe "Attributet '%-.64s' är olika mellan partition och tabell" ER_PARTITION_EXCHANGE_PART_TABLE chi "用分区交换的表是分区:'%-.64s'" eng "Table to exchange with partition is partitioned: '%-.64s'" spa "La tabla para intercambiar con la partición está particionada: '%-.64s'" swe "Tabellen att byta ut mot partition är partitionerad: '%-.64s'" ER_PARTITION_EXCHANGE_TEMP_TABLE chi "与分区交换的表是临时的:'%-.64s'" eng "Table to exchange with partition is temporary: '%-.64s'" spa "La tabla para intercambiar con la partición es temporal: '%-.64s'" swe "Tabellen att byta ut mot partition är temporär: '%-.64s'" ER_PARTITION_INSTEAD_OF_SUBPARTITION chi "子分区表,使用子分区代替分区" eng "Subpartitioned table, use subpartition instead of partition" spa "La tabla subparticionada utiliza subpartición en lugar de partición" swe "Subpartitionerad tabell, använd subpartition istället för partition" ER_UNKNOWN_PARTITION chi "未知分区'%-.64s'在表'%-.64s'" eng "Unknown partition '%-.64s' in table '%-.64s'" spa "Partición desconocida '%-.64s' en la tabla '%-.64s'" swe "Okänd partition '%-.64s' i tabell '%-.64s'" ER_TABLES_DIFFERENT_METADATA chi "表有不同的定义" eng "Tables have different definitions" spa "Las tablas tienen diferentes definiciones" swe "Tabellerna har olika definitioner" ER_ROW_DOES_NOT_MATCH_PARTITION chi "找到了与分区不匹配的行" eng "Found a row that does not match the partition" spa "Hallada una fila que no coincide con la partición" swe "Hittade en rad som inte passar i partitionen" ER_BINLOG_CACHE_SIZE_GREATER_THAN_MAX chi "选项binlog_cache_size(%lu)大于max_binlog_cache_size(%lu);设置binlog_cache_size等于max_binlog_cache_size" eng "Option binlog_cache_size (%lu) is greater than max_binlog_cache_size (%lu); setting binlog_cache_size equal to max_binlog_cache_size" spa "La opción binlog_cache_size (%lu) es mayor que max_binlog_cache_size (%lu); configurando binlog_cache_size igual a max_binlog_cache_size" ER_WARN_INDEX_NOT_APPLICABLE chi "不能使用%-.64s在索引'%-.64s'上的访问,由于字段'%-.64s”的类型或排序规则转换" eng "Cannot use %-.64s access on index '%-.64s' due to type or collation conversion on field '%-.64s'" spa "No puedo usar acceso %-.64s en índice '%-.64s' debido al tipo o conversión de cotejo en campo '%-.64s'" ER_PARTITION_EXCHANGE_FOREIGN_KEY chi "与分区交换的表具有外键参考:'%-.64s'" eng "Table to exchange with partition has foreign key references: '%-.64s'" spa "La tabla para intercambiar con la partición tiene referencias a clave foránea: '%-.64s'" swe "Tabellen att byta ut mot partition har foreign key referenser: '%-.64s'" ER_NO_SUCH_KEY_VALUE chi "键值'%-.192s'在表'%-.192s%-.192s'不存在" eng "Key value '%-.192s' was not found in table '%-.192s.%-.192s'" spa "Valor de clave '%-.192s' no hallado en la tabla '%-.192s.%-.192s'" ER_VALUE_TOO_LONG chi "'%s'的价值太长了" eng "Too long value for '%s'" spa "Valor demasiado largo para '%s'" ER_NETWORK_READ_EVENT_CHECKSUM_FAILURE chi "从网络读取时,复制事件校验和验证失败" eng "Replication event checksum verification failed while reading from network" spa "Ha fallado la verificación de la suma de revisión de evento de réplica mientras se leía desde la red" ER_BINLOG_READ_EVENT_CHECKSUM_FAILURE chi "从日志文件读取时复制事件校验和验证失败" eng "Replication event checksum verification failed while reading from a log file" spa "Ha fallado la verificación de la suma de revisión de evento de réplica mientras se leía desde fichero/archivo de historial (log)" ER_BINLOG_STMT_CACHE_SIZE_GREATER_THAN_MAX chi "选项binlog_stmt_cache_size(%lu)大于max_binlog_stmt_cache_size(%lu);设置binlog_stmt_cache_size等于max_binlog_stmt_cache_size" eng "Option binlog_stmt_cache_size (%lu) is greater than max_binlog_stmt_cache_size (%lu); setting binlog_stmt_cache_size equal to max_binlog_stmt_cache_size" spa "La opción binlog_stmt_cache_size (%lu) es mayor que max_binlog_stmt_cache_size (%lu); configurando binlog_stmt_cache_size igual a max_binlog_stmt_cache_size" ER_CANT_UPDATE_TABLE_IN_CREATE_TABLE_SELECT chi "无法更新表'%-.192s'正在创建'%-.192s'" eng "Can't update table '%-.192s' while '%-.192s' is being created" spa "No puedo actualizar tabla '%-.192s' mientras '%-.192s' está siendo creada" ER_PARTITION_CLAUSE_ON_NONPARTITIONED chi "非分区表上的PARTITION()子句" eng "PARTITION () clause on non partitioned table" spa "Cláusula PARTITION () en tabla no particionada" swe "PARTITION () klausul för en icke partitionerad tabell" ER_ROW_DOES_NOT_MATCH_GIVEN_PARTITION_SET chi "发现不匹配给定分区集的行" eng "Found a row not matching the given partition set" spa "Hallada una fila que no coincide con el conjunto dado de partición" swe "Hittade en rad som inte passar i någon given partition" ER_UNUSED_5 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_CHANGE_RPL_INFO_REPOSITORY_FAILURE chi "更改Replication存储库类型时失败:%s" eng "Failure while changing the type of replication repository: %s" spa "Fallo mientras cambiaba el tipo de repositorio de réplica: %s" ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_CREATED_TEMP_TABLE chi "无法回滚一些临时表的创建" eng "The creation of some temporary tables could not be rolled back" spa "La creación de algunas tablas temporales no se pudo retroceder (ROLLBACK)" ER_WARNING_NOT_COMPLETE_ROLLBACK_WITH_DROPPED_TEMP_TABLE chi "一些临时表被删除,但这些操作无法回滚" eng "Some temporary tables were dropped, but these operations could not be rolled back" spa "Algunas tablas temporales fueron eliminadas, pero estas operaciones no se pudieron retroceder (ROLLBACK)" ER_MTS_FEATURE_IS_NOT_SUPPORTED chi "%s不支持多线程从模式。%s." eng "%s is not supported in multi-threaded slave mode. %s" spa "%s no se soporta en modo esclavo multi-hilo (thread). %s" ER_MTS_UPDATED_DBS_GREATER_MAX chi "修改的数据库的数量超过了最大%d;数据库名称不会包含在Replication事件元数据中" eng "The number of modified databases exceeds the maximum %d; the database names will not be included in the replication event metadata" spa "El núermo de bases de datos modificadas excede el máximo de %d; los nombres de base de datos no serán incluidos en los metadatos de eventos de réplica" ER_MTS_CANT_PARALLEL chi "无法以并行模式执行当前事件组。遇到事件%s,中继日志名称%s,position%s,它防止并行模式执行此事件组。原因:%s" eng "Cannot execute the current event group in the parallel mode. Encountered event %s, relay-log name %s, position %s which prevents execution of this event group in parallel mode. Reason: %s" spa "No puedo ejecutar el grupo de eventos actual en modo paralelo. Encontrado evento %s, nombre de historial (log) de reenvío %s, posición %s que previene la ejecución de este grupo de eventos en modo paralelo. Motivo: %s" ER_MTS_INCONSISTENT_DATA eng "%s" ER_FULLTEXT_NOT_SUPPORTED_WITH_PARTITIONING chi "分区表不支持FullText索引" eng "FULLTEXT index is not supported for partitioned tables" spa "El índice FULLTEXT no está soportado para tablas particionadas" swe "FULLTEXT index stöds ej för partitionerade tabeller" ER_DA_INVALID_CONDITION_NUMBER 35000 chi "无效条件号" eng "Invalid condition number" por "Número de condição inválido" spa "Número inválido de condición" ER_INSECURE_PLAIN_TEXT chi "在没有SSL/TLS的纯文本中发送密码非常不安全" eng "Sending passwords in plain text without SSL/TLS is extremely insecure" spa "Enviar contraseñas en texto plano sin SSL/TLS es extremadamente inseguro" ER_INSECURE_CHANGE_MASTER chi "在Master.Info存储库中存储MariaDB用户名或密码信息不安全,因此不建议使用。有关此问题和可能的替代方案,请参阅MariaDB手册" eng "Storing MariaDB user name or password information in the master.info repository is not secure and is therefore not recommended. Please see the MariaDB Manual for more about this issue and possible alternatives" spa "Almacenar nombre de usuario de MariaDB o información de contraseña en el repositorio master.info no es seguro y por ello no se recomienda. Por favor, mira el manual de MariaDB para saber más acerca de este asunto y sus posibles alternativas" ER_FOREIGN_DUPLICATE_KEY_WITH_CHILD_INFO 23000 S1009 chi "表'%.192s'的外键约束,记录'%-.192s'会导致表'%.192s'中的重复条目,键'%.192s'" eng "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in table '%.192s', key '%.192s'" ger "Fremdschlüssel-Beschränkung für Tabelle '%.192s', Datensatz '%-.192s' würde zu einem doppelten Eintrag in Tabelle '%.192s', Schlüssel '%.192s' führen" spa "La restricción de clave foránea para tabla '%.192s', registro '%-.192s' llevaría a una entrada duplicada en la tabla '%.192s', clave '%.192s'" swe "FOREIGN KEY constraint för tabell '%.192s', posten '%-.192s' kan inte uppdatera barntabell '%.192s' på grund av nyckel '%.192s'" ER_FOREIGN_DUPLICATE_KEY_WITHOUT_CHILD_INFO 23000 S1009 chi "表'%.192s'的外键约束,记录'%-.192s'会导致子表中的重复条目" eng "Foreign key constraint for table '%.192s', record '%-.192s' would lead to a duplicate entry in a child table" ger "Fremdschlüssel-Beschränkung für Tabelle '%.192s', Datensatz '%-.192s' würde zu einem doppelten Eintrag in einer Kind-Tabelle führen" spa "La restricción de clave foránea para tabla '%.192s', registro '%-.192s' llevaría a una entrada duplicada en una tabla hija" swe "FOREIGN KEY constraint för tabell '%.192s', posten '%-.192s' kan inte uppdatera en barntabell på grund av UNIQUE-test" ER_SQLTHREAD_WITH_SECURE_SLAVE chi "仅在启动从SQL线程时无法设置身份验证选项" eng "Setting authentication options is not possible when only the Slave SQL Thread is being started" spa "Configurar opciones de autenticación no es posible si sólo se ha arrancado el Hilo (thread) SQL Esclavo" ER_TABLE_HAS_NO_FT chi "该表没有全文索引来支持此查询" eng "The table does not have FULLTEXT index to support this query" spa "La tabla no tiene índice FULLTEXT que soporte esta consulta (query)" ER_VARIABLE_NOT_SETTABLE_IN_SF_OR_TRIGGER chi "无法在存储的函数或触发器中设置系统变量%.200s" eng "The system variable %.200s cannot be set in stored functions or triggers" spa "La variable de sistema %.200s no se puede poner en funciones almacenadas o disparadores" ER_VARIABLE_NOT_SETTABLE_IN_TRANSACTION chi "持续交易时,无法设置系统变量%.200s" eng "The system variable %.200s cannot be set when there is an ongoing transaction" spa "La variable de sistema %.200s no se puede poner si hay una transacción en curso" ER_GTID_NEXT_IS_NOT_IN_GTID_NEXT_LIST chi "系统变量@@session.gtid_next具有值%.200s,该值未在@@session.gtid_next_list中列出" eng "The system variable @@SESSION.GTID_NEXT has the value %.200s, which is not listed in @@SESSION.GTID_NEXT_LIST" spa "La variable de sistema @@SESSION.GTID_NEXT tiene el valor %.200s, el cual no está listado en @@SESSION.GTID_NEXT_LIST" ER_CANT_CHANGE_GTID_NEXT_IN_TRANSACTION_WHEN_GTID_NEXT_LIST_IS_NULL chi "当@@session.gtid_next_list == null时,系统变量@@session.gtid_next无法在事务内更改" eng "When @@SESSION.GTID_NEXT_LIST == NULL, the system variable @@SESSION.GTID_NEXT cannot change inside a transaction" spa "Cuando @@SESSION.GTID_NEXT_LIST == NULL, la variable de sistema @@SESSION.GTID_NEXT no puede cambiar dentro de una transacción" ER_SET_STATEMENT_CANNOT_INVOKE_FUNCTION chi "语句'SET %.200s'无法调用存储的函数" eng "The statement 'SET %.200s' cannot invoke a stored function" spa "La sentencia 'SET %.200s' no puede invocar una función almacenada" ER_GTID_NEXT_CANT_BE_AUTOMATIC_IF_GTID_NEXT_LIST_IS_NON_NULL chi "系统变量@@sessient.gtid_next不能是'自动'@@sessient.gtid_next_list非null时" eng "The system variable @@SESSION.GTID_NEXT cannot be 'AUTOMATIC' when @@SESSION.GTID_NEXT_LIST is non-NULL" spa "La variable de sistema @@SESSION.GTID_NEXT no puede ser 'AUTOMATIC' si la @@SESSION.GTID_NEXT_LIST es no-NULL" ER_SKIPPING_LOGGED_TRANSACTION chi "跳过事务%.200s,因为它已经被执行和记录" eng "Skipping transaction %.200s because it has already been executed and logged" spa "Saltando transacción %.200s porque ya ha sido ejecutada y puesta en historial (log)" ER_MALFORMED_GTID_SET_SPECIFICATION chi "畸形GTID设置规范'%.200s'" eng "Malformed GTID set specification '%.200s'" spa "GTID malformado pone especificación '%.200s'" ER_MALFORMED_GTID_SET_ENCODING chi "格式错误的GTID集编码" eng "Malformed GTID set encoding" spa "GTID malformado pone codificación" ER_MALFORMED_GTID_SPECIFICATION chi "畸形GTID规范'%.200s'" eng "Malformed GTID specification '%.200s'" spa "GTID malformado especificación '%.200s'" ER_GNO_EXHAUSTED chi "无法生成全局事务标识符:整数组件达到了最大值。用新server_uuId重新启动服务器" eng "Impossible to generate Global Transaction Identifier: the integer component reached the maximal value. Restart the server with a new server_uuid" spa "Imposible generar Identificador Global de Transacción: el componente entero alcanzó el máximo valor. Rearranque el servidor con un nuevo server_uuid" ER_BAD_SLAVE_AUTO_POSITION chi "当MASTER_AUTO_POSITION处于活动状态时,无法设置参数MASTER_LOG_FILE,MASTER_LOG_POS,RELAY_LOG_FILE和RELAY_LOG_POS" eng "Parameters MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE and RELAY_LOG_POS cannot be set when MASTER_AUTO_POSITION is active" spa "Los parámetros MASTER_LOG_FILE, MASTER_LOG_POS, RELAY_LOG_FILE y RELAY_LOG_POS no pueden ser puestos cuando MASTER_AUTO_POSITION esté activo" ER_AUTO_POSITION_REQUIRES_GTID_MODE_ON chi "CHANGE MASTER TO MASTER_AUTO_POSITION = 1只能在GTID_MODE = ON上执行" eng "CHANGE MASTER TO MASTER_AUTO_POSITION = 1 can only be executed when GTID_MODE = ON" spa "CHANGE MASTER TO MASTER_AUTO_POSITION = 1 sólo se puede ejecutar cuando GTID_MODE = ON" ER_CANT_DO_IMPLICIT_COMMIT_IN_TRX_WHEN_GTID_NEXT_IS_SET chi "当GTID_Next != AUTOMATIC 或GTID_NEXT_LIST != NULL时,无法在事务中执行语句" eng "Cannot execute statements with implicit commit inside a transaction when GTID_NEXT != AUTOMATIC or GTID_NEXT_LIST != NULL" spa "No puedo ejecutar sentencias con acometidas (commit) implícitas dentro de una transacción cuando GTID_NEXT != AUTOMATIC o GTID_NEXT_LIST != NULL" ER_GTID_MODE_2_OR_3_REQUIRES_ENFORCE_GTID_CONSISTENCY_ON chi "GTID_MODE = ON或GTID_MODE = UPGRADE_STEP_2需要ENFORCE_GTID_CONSISTY = 1" eng "GTID_MODE = ON or GTID_MODE = UPGRADE_STEP_2 requires ENFORCE_GTID_CONSISTENCY = 1" spa "GTID_MODE = ON o GTID_MODE = UPGRADE_STEP_2 requiere que ENFORCE_GTID_CONSISTENCY = 1" ER_GTID_MODE_REQUIRES_BINLOG chi "GTID_MODE = ON或UPGRADE_STEP_1或UPGRADE_STEP_2需要--log-bin和-log-slave-updates" eng "GTID_MODE = ON or UPGRADE_STEP_1 or UPGRADE_STEP_2 requires --log-bin and --log-slave-updates" spa "GTID_MODE = ON o UPGRADE_STEP_1 o UPGRADE_STEP_2 requiere --log-bin y --log-slave-updates" ER_CANT_SET_GTID_NEXT_TO_GTID_WHEN_GTID_MODE_IS_OFF chi "GTID_NEXT无法设置为UUID:NUMBER 当GTID_MODE = OFF" eng "GTID_NEXT cannot be set to UUID:NUMBER when GTID_MODE = OFF" spa "GTID_NEXT no se puede poner a UUID:NUMBER cuando GTID_MODE = OFF" ER_CANT_SET_GTID_NEXT_TO_ANONYMOUS_WHEN_GTID_MODE_IS_ON chi "GTID_NEXT无法在当GTID_MODE = ON上时设置为ANONYMOUS" eng "GTID_NEXT cannot be set to ANONYMOUS when GTID_MODE = ON" spa "GTID_NEXT no se puede poner como ANONYMOUS cuando GTID_MODE = ON" ER_CANT_SET_GTID_NEXT_LIST_TO_NON_NULL_WHEN_GTID_MODE_IS_OFF chi "GTID_NEXT_LIST无法设置为非空值当GTID_MODE = OFF" eng "GTID_NEXT_LIST cannot be set to a non-NULL value when GTID_MODE = OFF" spa "GTID_NEXT_LIST no se puede poner como valor no-NULL cuando GTID_MODE = OFF" ER_FOUND_GTID_EVENT_WHEN_GTID_MODE_IS_OFF chi "找到一个Gtid_log_event或Previous_gtids_log_event,当gtid_mode = OFF时" eng "Found a Gtid_log_event or Previous_gtids_log_event when GTID_MODE = OFF" spa "Hallado un Gtid_log_event o Previous_gtids_log_event cuando GTID_MODE = OFF" ER_GTID_UNSAFE_NON_TRANSACTIONAL_TABLE chi "当Enforce_gtid_consistenty = 1时,对非事务性表的更新只能在Autocomated语句或单一语句事务中完成,而不是在与事务表中的更新相同的语句中" eng "When ENFORCE_GTID_CONSISTENCY = 1, updates to non-transactional tables can only be done in either autocommitted statements or single-statement transactions, and never in the same statement as updates to transactional tables" spa "Cuando ENFORCE_GTID_CONSISTENCY = 1, las actualiaciones a tablas no transaccionales sólo se puede hacer o bien en sentencias autoacometidas o en transacciones de sentencias simples y nunca dentro de la misma sentencia como actualizaciones a tablas transaccionales" ER_GTID_UNSAFE_CREATE_SELECT chi "CREATE TABLE...SELECT在ENFORCE_GTID_CONSISTENCY = 1时被禁止" eng "CREATE TABLE ... SELECT is forbidden when ENFORCE_GTID_CONSISTENCY = 1" spa "CREATE TABLE ... SELECT está prohibido si ENFORCE_GTID_CONSISTENCY = 1" ER_GTID_UNSAFE_CREATE_DROP_TEMPORARY_TABLE_IN_TRANSACTION chi "当ENFORCE_GTID_CONSISTENCY = 1时,语句CREATE TEMPORARY TABL和DROP TEMPORARY TABLE,只能在非事务性上下文中执行,并且要求autocommit = 1" eng "When ENFORCE_GTID_CONSISTENCY = 1, the statements CREATE TEMPORARY TABLE and DROP TEMPORARY TABLE can be executed in a non-transactional context only, and require that AUTOCOMMIT = 1" spa "Cuando ENFORCE_GTID_CONSISTENCY = 1, las sentencias CREATE TEMPORARY TABLE y DROP TEMPORARY TABLE pueden ser ejecutadas sólo en contextos no-transaccionales y requieren que AUTOCOMMIT = 1" ER_GTID_MODE_CAN_ONLY_CHANGE_ONE_STEP_AT_A_TIME chi "GTID_MODE的值只能一次更改一步:OFF<-> UPGRODE_STEP_1 <-> UPGRODE_STEP_2 <-> ON。另请注意,此值必须在所有服务器上同时上升或下降;有关说明,请参阅手册。“" eng "The value of GTID_MODE can only change one step at a time: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. Also note that this value must be stepped up or down simultaneously on all servers; see the Manual for instructions." spa "El valor de GTID_MODE sólo puede cambiar un paso a la vez: OFF <-> UPGRADE_STEP_1 <-> UPGRADE_STEP_2 <-> ON. También ten en cuenta que este valor debe de ser aumentado y disminuido simultaneamente en todos los servidores; mira el Manual para instrucciones." ER_MASTER_HAS_PURGED_REQUIRED_GTIDS chi "从机更改主站到Master_Auto_Position = 1,因此主站连接,但主设备已清除了slave需要的GTID的二进制日志" eng "The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires" spa "El esclavo se está conectando usando CHANGE MASTER TO MASTER_AUTO_POSITION = 1, pero el maestro (master) ha purgado los historiales (logs) binarios que contienen GTIDs requeridos por el esclavo" ER_CANT_SET_GTID_NEXT_WHEN_OWNING_GTID chi "无法由拥有GTID的客户端更改GTID_NEXT。客户拥有%s。所有权在提交或回滚上发布" eng "GTID_NEXT cannot be changed by a client that owns a GTID. The client owns %s. Ownership is released on COMMIT or ROLLBACK" spa "GTID_NEXT no se puede cambiar por un cliente que posee un GTID. El cliente posee %s. La propiedad se libera con COMMIT o ROLLBACK" ER_UNKNOWN_EXPLAIN_FORMAT chi "未知%s格式名称:'%s'" eng "Unknown %s format name: '%s'" rus "Неизвестное имя формата команды %s: '%s'" spa "Nombre de formato %s desconocido: '%s'" ER_CANT_EXECUTE_IN_READ_ONLY_TRANSACTION 25006 chi "无法在只读事务中执行语句" eng "Cannot execute statement in a READ ONLY transaction" spa "No puedo ejecutar sentencia en una transacción READ ONLY" ER_TOO_LONG_TABLE_PARTITION_COMMENT chi "表分区的评论'%-.64s'太长(max =%lu)" eng "Comment for table partition '%-.64s' is too long (max = %lu)" spa "El comentario para partición de tabla '%-.64s' es demasido largo (máx = %lu)" ER_SLAVE_CONFIGURATION chi "从站未配置或未能正确初始化。您必须至少set --server-id以启用主站或从站。可以在MariaDB错误日志中找到其他错误消息" eng "Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MariaDB error log" spa "El esclavo no está configurado o falló al inicializarse de forma adecuada. Vd debe de poner al menos --server-id para activar o bien un maestro (master) o un esclavo. Mensajes de error adicionales pueden ser hallados en historial (log) de errores de MariaDB" ER_INNODB_FT_LIMIT chi "InnoDB目前一次支持一个全文索引创建" eng "InnoDB presently supports one FULLTEXT index creation at a time" spa "Actualmente InnoDB soporta la creación de un índice FULLTEXT a la vez" ER_INNODB_NO_FT_TEMP_TABLE chi "无法在临时InnoDB表上创建FullText索引" eng "Cannot create FULLTEXT index on temporary InnoDB table" spa "No puedo crear índice FULLTEXT en tabla temporaria InnoDB" ER_INNODB_FT_WRONG_DOCID_COLUMN chi "列'%-.192s'是innodb fulltext索引的错误类型" eng "Column '%-.192s' is of wrong type for an InnoDB FULLTEXT index" spa "La columna '%-.192s' es de tipo equivocado para un índice InnoDB FULLTEXT" ER_INNODB_FT_WRONG_DOCID_INDEX chi "InnoDB全文索引的索引'%-.192s'是错误的类型错误" eng "Index '%-.192s' is of wrong type for an InnoDB FULLTEXT index" spa "El índice '%-.192s' es de tipo equivocado para un índice InnoDB FULLTEXT" ER_INNODB_ONLINE_LOG_TOO_BIG chi "创建索引'%-.192s'所需的多于'innodb_online_alter_log_max_size'字节的修改日志。请再试一次" eng "Creating index '%-.192s' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again" spa "La creación de índice '%-.192s' requirió más de 'innodb_online_alter_log_max_size' bytes de historial (log) de modificaciones. Por favor, pruebe otra vez" ER_UNKNOWN_ALTER_ALGORITHM chi "未知算法'%s'" eng "Unknown ALGORITHM '%s'" spa "ALGORITHM desconocido '%s'" ER_UNKNOWN_ALTER_LOCK chi "未知锁定类型'%s'" eng "Unknown LOCK type '%s'" spa "Tipo de LOCK desconocido '%s'" ER_MTS_CHANGE_MASTER_CANT_RUN_WITH_GAPS chi "当从站因为错误停止或以MTS模式终止时,不呢执行CHANGE MASTER。考虑使用RESET SLAVE或START SLAVE UNTIL" eng "CHANGE MASTER cannot be executed when the slave was stopped with an error or killed in MTS mode. Consider using RESET SLAVE or START SLAVE UNTIL" spa "CHANGE MASTER no se puede ejecutar cuando se ha parado el esclavo con un error o matado en modo MTS. Considere el usar RESET SLAVE o START SLAVE UNTIL" ER_MTS_RECOVERY_FAILURE chi "从并行执行模式下的从站错误后无法恢复。可以在MariaDB错误日志中找到其他错误消息" eng "Cannot recover after SLAVE errored out in parallel execution mode. Additional error messages can be found in the MariaDB error log" spa "No puedo recuperar después de que SLAVE diera error en modo paralelo de ejecución. Mensajes de error adicionales se pueden hallar en el historial (log) de error de MariaDB" ER_MTS_RESET_WORKERS chi "无法清理工作者信息表。可以在MariaDB错误日志中找到其他错误消息" eng "Cannot clean up worker info tables. Additional error messages can be found in the MariaDB error log" spa "No puedo limpiar tablas de información de trabajador. Mensajes de error adicionales se pueden hallar en el historial (log) de error de MariaDB" ER_COL_COUNT_DOESNT_MATCH_CORRUPTED_V2 chi "列数为%s.%s是错误的。预期的%d,找到%d。表可能损坏了" eng "Column count of %s.%s is wrong. Expected %d, found %d. The table is probably corrupted" ger "Spaltenanzahl von %s.%s falsch. %d erwartet, aber %d gefunden. Tabelle ist wahrscheinlich beschädigt" spa "El contador de columnas %s.%s está equivocado. Se esperaba %d, hallado %d. La tabla está probablemente estropeada" ER_SLAVE_SILENT_RETRY_TRANSACTION chi "从站必须静默地重试当前事务" eng "Slave must silently retry current transaction" spa "El esclavo debe de reintentar silenciosamente la transacción en curso" ER_UNUSED_22 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_TABLE_SCHEMA_MISMATCH chi "架构不匹配(%s)" eng "Schema mismatch (%s)" spa "Esquema no coincide (%s)" ER_TABLE_IN_SYSTEM_TABLESPACE chi "表%-.192s在系统表空间中" eng "Table %-.192s in system tablespace" spa "Tabla %-.192s en espacio de tablas del sitema" ER_IO_READ_ERROR chi "IO读取错误:(%lu,%s)%s" eng "IO Read error: (%lu, %s) %s" spa "Error de Lectura de E/S: (%lu, %s) %s" ER_IO_WRITE_ERROR chi "IO写错错误:(%lu,%s)%s" eng "IO Write error: (%lu, %s) %s" spa "Error de Escritura de E/S: (%lu, %s) %s" ER_TABLESPACE_MISSING chi "表空间缺少表'%-.192s'" eng "Tablespace is missing for table '%-.192s'" spa "Espacio de tabla falta para la tabla '%-.192s'" ER_TABLESPACE_EXISTS chi "表格'%-.192s'的表空间。请在导入之前丢弃表空间" eng "Tablespace for table '%-.192s' exists. Please DISCARD the tablespace before IMPORT" spa "Existe Espacio de tabla para la tabla '%-.192s'. Por favor, haga DISCARD del espacio de tabla antes de hacer IMPORT" ER_TABLESPACE_DISCARDED chi "表空间已被丢弃为表%`s" eng "Tablespace has been discarded for table %`s" spa "El espacio de tabla ha sido descartado para la tabla %`s" ER_INTERNAL_ERROR chi "内部错误:%-.192s" eng "Internal error: %-.192s" spa "Error interno: %-.192s" ER_INNODB_IMPORT_ERROR chi "ALTER TABLE '%-.192s' IMPORT TABLESPACE 失败,错误%lu:'%s'" eng "ALTER TABLE '%-.192s' IMPORT TABLESPACE failed with error %lu : '%s'" spa "ALTER TABLE '%-.192s' IMPORT TABLESPACE ha fallado con error %lu : '%s'" ER_INNODB_INDEX_CORRUPT chi "索引损坏:%s" eng "Index corrupt: %s" spa "Índice corrupto: %s" ER_INVALID_YEAR_COLUMN_LENGTH chi "已弃用YEAR(%lu)列类型。创建YEAR(4)列代替" eng "YEAR(%lu) column type is deprecated. Creating YEAR(4) column instead" rus "Тип YEAR(%lu) более не поддерживается, вместо него будет создана колонка с типом YEAR(4)" spa "El tipo de columna YEAR(%lu) está obsoleto. Creando columna YEAR(4) en su lugar" ER_NOT_VALID_PASSWORD eng "Your password does not satisfy the current policy requirements (%s)" ukr "Ваш пароль не відповідає поточним правилам (%s)" ER_MUST_CHANGE_PASSWORD bgn "Трябва първо да си смените паролата със SET PASSWORD за да можете да изпълните тази команда" chi "您必须在执行此语句之前设置密码" eng "You must SET PASSWORD before executing this statement" rum "Trebuie sa iti schimbi parola folosind SET PASSWORD inainte de a executa aceasta comanda" spa "Debe vd de poner SET PASSWORD antes de ejecutar esta sentencia" ER_FK_NO_INDEX_CHILD chi "无法添加外键约束。外表'%s'中的约束'%s'缺少索引" eng "Failed to add the foreign key constraint. Missing index for constraint '%s' in the foreign table '%s'" spa "No pude añadir la restricción de clave foránea. Falta índice para restricción '%s' en la tabla foránea '%s'" ER_FK_NO_INDEX_PARENT chi "无法添加外键约束。引用的表'%s'中的约束'%s'缺少索引" eng "Failed to add the foreign key constraint. Missing index for constraint '%s' in the referenced table '%s'" spa "No pude añadir la restricción de clave foránea. Falta índice para restricción '%s' en la tabla referenciada '%s'" ER_FK_FAIL_ADD_SYSTEM chi "无法将外键约束'%s'添加到系统表" eng "Failed to add the foreign key constraint '%s' to system tables" spa "No pude añadir la restricción de clave foránea '%s' a las tablas del sistema" ER_FK_CANNOT_OPEN_PARENT chi "无法打开引用的表'%s'" eng "Failed to open the referenced table '%s'" spa "No pude abrir la tabla referenciada '%s'" ER_FK_INCORRECT_OPTION chi "无法在表'%s'上添加外键约束。外键约束'%s'中的选项不正确" eng "Failed to add the foreign key constraint on table '%s'. Incorrect options in FOREIGN KEY constraint '%s'" spa "No pude añadir restricción de clave foránea en la tabla '%s'. Opciones incorrectas en restricción FOREIGN KEY '%s'" ER_DUP_CONSTRAINT_NAME chi "重复%s约束名称'%s'" eng "Duplicate %s constraint name '%s'" spa "Duplicada restricción %s llamada '%s'" ER_PASSWORD_FORMAT chi "密码哈希没有预期的格式。检查密码()函数是否使用正确的密码算法" eng "The password hash doesn't have the expected format. Check if the correct password algorithm is being used with the PASSWORD() function" spa "El cálculo de contraseña no tiene el formato esperado. Revise si se está usando el algoritmo correcto de contraseña con la función PASSWORD()" ER_FK_COLUMN_CANNOT_DROP chi "无法删除'%-.192s'列:在外部索引约束'%-.192s'中需要" eng "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s'" ger "Kann Spalte '%-.192s' nicht löschen: wird für eine Fremdschlüsselbeschränkung '%-.192s' benötigt" spa "No puedo eliminar la columna '%-.192s': necesaria en restricción de clave foránea '%-.192s'" ER_FK_COLUMN_CANNOT_DROP_CHILD chi "无法删除列'%-.192s':在外键约束'%-.192s'中需要,表%-.192s" eng "Cannot drop column '%-.192s': needed in a foreign key constraint '%-.192s' of table %-.192s" ger "Kann Spalte '%-.192s' nicht löschen: wird für eine Fremdschlüsselbeschränkung '%-.192s' der Tabelle %-.192s benötigt" spa "No puedo eliminar la columna '%-.192s': necesaria en restriccón de clave foránea '%-.192s' de la tabla %-.192s" ER_FK_COLUMN_NOT_NULL chi "列'%-.192s'不能没有null:在外键约束'%-.192s'设置为null" eng "Column '%-.192s' cannot be NOT NULL: needed in a foreign key constraint '%-.192s' SET NULL" ger "Spalte '%-.192s' kann nicht NOT NULL sein: wird für eine Fremdschlüsselbeschränkung '%-.192s' SET NULL benötigt" spa "La columna '%-.192s' no puede ser NOT NULL: necesaria en restricción de clave foránea '%-.192s' SET NULL" ER_DUP_INDEX chi "重复索引%`s。这已弃用,将在未来的版本中不允许" eng "Duplicate index %`s. This is deprecated and will be disallowed in a future release" spa "Índice duplicado %`s. Éste está obsoleto y será quitado en entregas futuras" ER_FK_COLUMN_CANNOT_CHANGE chi "无法更改列'%-.192s':用于外部键约束'%-.192s'" eng "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s'" spa "No puedo cambiar la columna '%-.192s': usada en una restricción de clave foránea '%-.192s'" ER_FK_COLUMN_CANNOT_CHANGE_CHILD chi "无法更改列'%-.192s':用于在外部键约束'%-.192s'的表'%-.192s'" eng "Cannot change column '%-.192s': used in a foreign key constraint '%-.192s' of table '%-.192s'" spa "No puedo cambiar la columna '%-.192s': usada en restricción de clave foránea '%-.192s' de la tabla '%-.192s'" ER_FK_CANNOT_DELETE_PARENT chi "无法从表中删除来自表中的父级的表中的行'%-.192s”表'%-.192s'" eng "Cannot delete rows from table which is parent in a foreign key constraint '%-.192s' of table '%-.192s'" spa "No puedo borrar filas de la tabla que es padre en restricción de clave foránea '%-.192s' de la tabla '%-.192s'" ER_MALFORMED_PACKET chi "畸形通信包" eng "Malformed communication packet" spa "Paquete de comunicación malformado" ER_READ_ONLY_MODE chi "以只读模式运行" eng "Running in read-only mode" spa "Ejecutando em modo sólo-lectura" ER_GTID_NEXT_TYPE_UNDEFINED_GROUP chi "当GTID_NEXT设置为GTID时,必须在提交或回滚后立即将其再次设置。如果在从SQL线程中看到此错误消息,则表示当前事务中的表是在主站和从站上的非交易的事务性。在客户端连接中,它意味着您在事务之前执行SET GTID_NEXT并忘记将GTID_NEXT设置为不同的标识符或在提交或回滚后“自动”。当前gtid_next是'%s'" eng "When GTID_NEXT is set to a GTID, you must explicitly set it again after a COMMIT or ROLLBACK. If you see this error message in the slave SQL thread, it means that a table in the current transaction is transactional on the master and non-transactional on the slave. In a client connection, it means that you executed SET GTID_NEXT before a transaction and forgot to set GTID_NEXT to a different identifier or to 'AUTOMATIC' after COMMIT or ROLLBACK. Current GTID_NEXT is '%s'" spa "Cuando GTID_NEXT se pone a GTID, debe vd de ponerlo de nuevo de forma explícita tras un COMMIT o ROLLBACK. Si vd ve este mensaje de error en el hilo (thread) de SQL esclavo, indica que una tabla de la transacción en curso es transaccional en el maestro (master) y no transaccional en el esclavo. En una conexión cliente, indica que has ejecutado SET GTID_NEXT antes de una transacción y has olvidado poner GTID_NEXT a un identificador diferente o a 'AUTOMATIC' tras COMMIT o ROLLBACK. El GTID_NEXT actual es '%s'" ER_VARIABLE_NOT_SETTABLE_IN_SP chi "无法在存储过程中设置系统变量%.200s" eng "The system variable %.200s cannot be set in stored procedures" spa "La variable de sistema %.200s no se puede poner en procedimentos almacenados" ER_CANT_SET_GTID_PURGED_WHEN_GTID_MODE_IS_OFF chi "只能在GTID_MODE = ON设置GTID_PURGED" eng "GTID_PURGED can only be set when GTID_MODE = ON" spa "GTID_PURGED sólo se puede usar cuando GTID_MODE = ON" ER_CANT_SET_GTID_PURGED_WHEN_GTID_EXECUTED_IS_NOT_EMPTY chi "只有在GTID_EXECUTED为空时才可以设置GTID_PURGED" eng "GTID_PURGED can only be set when GTID_EXECUTED is empty" spa "GTID_PURGED sólo se puede poner cuando GTID_EXECUTED está vacío" ER_CANT_SET_GTID_PURGED_WHEN_OWNED_GTIDS_IS_NOT_EMPTY chi "只有在没有持续的事务时才可以设置GTID_PURGED(即使在其他客户端中不)" eng "GTID_PURGED can only be set when there are no ongoing transactions (not even in other clients)" spa "GTID_PURGED sólo se puede poner cuando no hay trasacciones en curso (ni incluso en otros clientes)" ER_GTID_PURGED_WAS_CHANGED chi "GTID_PURGED从'%s'更改为'%s'" eng "GTID_PURGED was changed from '%s' to '%s'" spa "GTID_PURGED se cambió de '%s' a '%s'" ER_GTID_EXECUTED_WAS_CHANGED chi "GTID_EXECUTE从'%s'更改为'%s'" eng "GTID_EXECUTED was changed from '%s' to '%s'" spa "GTID_EXECUTED se cambió de '%s' a '%s'" ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES chi "无法执行语句:由于BINLOG_FORMAT = STATEMENT,因此无法写入二进制日志,并将复制和非复制表写入" eng "Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT, and both replicated and non replicated tables are written to" spa "No puedo ejecutar sentencia: imposible escribir en historial (log) binario desde BINLOG_FORMAT = STATEMENT y en tablas replicadas y no replicadas" ER_ALTER_OPERATION_NOT_SUPPORTED 0A000 chi "此操作不支持%s。试试%s" eng "%s is not supported for this operation. Try %s" spa "%s no está soportado para esta operación. Pruebe %s" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON 0A000 chi "不支持%s。原因:%s。试试%s" eng "%s is not supported. Reason: %s. Try %s" spa "%s no está soportado. Motivo: %s. Pruebe %s" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COPY chi "复制算法需要锁定" eng "COPY algorithm requires a lock" spa "El algoritmo de COPY requiere de un bloqueo" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_PARTITION chi "分区特定操作尚不支持锁定/算法" eng "Partition specific operations do not yet support LOCK/ALGORITHM" spa "Las operaciones específicas de partición aún no soportan LOCK/ALGORITHM" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_RENAME chi "参与外键的列被更名" eng "Columns participating in a foreign key are renamed" spa "Las columnas que participan en una clave foránea son renombradas" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_COLUMN_TYPE chi "无法更改列类型" eng "Cannot change column type" spa "No puedo cambiar el tipo de la columna" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FK_CHECK chi "添加外键需要figner_key_checks = OFF" eng "Adding foreign keys needs foreign_key_checks=OFF" spa "El añadir claves foráneas necesita de foreign_key_checks=OFF" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_IGNORE chi "使用忽略创建唯一索引需要复制算法删除重复行" eng "Creating unique indexes with IGNORE requires COPY algorithm to remove duplicate rows" spa "El crear ídices únicos con IGNORE requiere del algoritmo COPY para quitar filas duplicadas" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOPK chi "不允许删除主键,而不添加新的主键" eng "Dropping a primary key is not allowed without also adding a new primary key" spa "Eliminar una clave primaria no está permitido sin añadir también una nueva clave primaria" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_AUTOINC chi "添加自动增量列需要锁定" eng "Adding an auto-increment column requires a lock" spa "Para añadir una columna auto-incrementable se requiere de un bloqueo" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_HIDDEN_FTS chi "无法使用用户可见的替换隐藏的FTS_DOC_ID" eng "Cannot replace hidden FTS_DOC_ID with a user-visible one" spa "No puedo reemplazar FTS_DOC_ID oculta con una visible-por-usuario" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_CHANGE_FTS chi "无法删除或重命名FTS_DOC_ID" eng "Cannot drop or rename FTS_DOC_ID" spa "No puedo eliminar o renombrar FTS_DOC_ID" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_FTS chi "fulltext索引创建需要锁定" eng "Fulltext index creation requires a lock" spa "La creación de un índice Fulltext requiere de un bloqueo" ER_SQL_SLAVE_SKIP_COUNTER_NOT_SETTABLE_IN_GTID_MODE chi "使用GTID_Mode = ON运行时,无法设置SQL_SLAVE_SKIP_COUNTER。相反,对于要跳过的每个事务,使用与事务相同的GTID生成空事务" eng "sql_slave_skip_counter can not be set when the server is running with GTID_MODE = ON. Instead, for each transaction that you want to skip, generate an empty transaction with the same GTID as the transaction" spa "sql_slave_skip_counter no se puede poner cuando el servidor se ejecuta con GTID_MODE = ON. En su lugar, para cada transacción que desees saltar, genera una transacción vacía con el mismo GTID que la transacción" ER_DUP_UNKNOWN_IN_INDEX 23000 chi "索引的重复条目'%-.192s'" cze "Zdvojený klíč (číslo klíče '%-.192s')" dan "Flere ens nøgler for indeks '%-.192s'" eng "Duplicate entry for key '%-.192s'" est "Kattuv väärtus võtmele '%-.192s'" fre "Duplicata du champ pour la clef '%-.192s'" ger "Doppelter Eintrag für Schlüssel '%-.192s'" greek "Διπλή εγγραφή για το κλειδί '%-.192s'" hun "Duplikalt bejegyzes a '%-.192s' kulcs szerint" ita "Valore duplicato per la chiave '%-.192s'" jpn "は索引 '%-.192s' で重複しています。" kor "중복된 입력 값: key '%-.192s'" nla "Dubbele ingang voor zoeksleutel '%-.192s'" nor "Like verdier for nøkkel '%-.192s'" norwegian-ny "Like verdiar for nykkel '%-.192s'" pol "Powtórzone wystąpienie dla klucza '%-.192s'" por "Entrada duplicada para a chave '%-.192s'" rum "Cimpul e duplicat pentru cheia '%-.192s'" rus "Дублирующаяся запись по ключу '%-.192s'" serbian "Dupliran unos za ključ '%-.192s'" slo "Opakovaný kľúč (číslo kľúča '%-.192s')" spa "Entrada duplicada para la clave '%-.192s'" swe "Dublett för nyckel '%-.192s'" ukr "Дублюючий запис для ключа '%-.192s'" ER_IDENT_CAUSES_TOO_LONG_PATH chi "对象的长数据库名称和标识符导致路径长度超过%d字符。路径:'%s'" eng "Long database name and identifier for object resulted in path length exceeding %d characters. Path: '%s'" spa "Nombre largo de base de datos e identificador para objeto resultó en que el tamaño de la ruta excedió de %d caracteres. Ruta: '%s'" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_NOT_NULL chi "无法将null转换为非常量默认值" eng "cannot convert NULL to non-constant DEFAULT" spa "no puedo convertir NULL a DEFAULT no-constante" ER_MUST_CHANGE_PASSWORD_LOGIN bgn "Паролата ви е изтекла. За да влезете трябва да я смените използвайки клиент който поддрържа такива пароли" chi "您的密码已过期。要登录您必须使用支持过期密码的客户端更改它" eng "Your password has expired. To log in you must change it using a client that supports expired passwords" rum "Parola ta a expirat. Pentru a te loga, trebuie sa o schimbi folosind un client ce suporta parole expirate" spa "Su contraseña ha expirado. Para ingresar, vd debe de cambiarla usando un cliente que soporte contraseñas expiradas" ER_ROW_IN_WRONG_PARTITION chi "在错误分区%s中找到了一行" eng "Found a row in wrong partition %s" spa "Hallada una fila en partición equivocada %s" swe "Hittade en rad i fel partition %s" ER_MTS_EVENT_BIGGER_PENDING_JOBS_SIZE_MAX chi "无法安排事件%s,中继日志名称%s,position%s对工作线程,因为它的大小%lu超过了slave_pending_jobs_size_max (%lu)" eng "Cannot schedule event %s, relay-log name %s, position %s to Worker thread because its size %lu exceeds %lu of slave_pending_jobs_size_max" spa "No puedo organizar evento %s, nombre de historial (log)-reenvío %s, posiciona %s a hilo (thread) de Trabajador porque su tamaño %lu excede %lu de slave_pending_jobs_size_max" ER_INNODB_NO_FT_USES_PARSER chi "无法在InnoDB表上CREATE FULLTEXT INDEX WITH PARSER" eng "Cannot CREATE FULLTEXT INDEX WITH PARSER on InnoDB table" spa "No puedo CREATE FULLTEXT INDEX WITH PARSER en tabla InnoDB" ER_BINLOG_LOGICAL_CORRUPTION chi "二进制日志文件'%s'逻辑损坏:%s" eng "The binary log file '%s' is logically corrupted: %s" spa "El fichero/archivo de historial (log) binario '%s' está lógicamente corrupto: %s" ER_WARN_PURGE_LOG_IN_USE chi "未清除文件%s,因为它被%d线程读取,只清除%d文件中的%d" eng "file %s was not purged because it was being read by %d thread(s), purged only %d out of %d files" spa "el fchero %s no se ha purgado porque estaba siendo leído por hilo(s) (thread) %d, purgado sólo %d de %d ficheros/archivos" ER_WARN_PURGE_LOG_IS_ACTIVE chi "文件%s未清除,因为它是活动日志文件" eng "file %s was not purged because it is the active log file" spa "el fichero/archivo %s no fue purgado porque es el fichero/archivo activo de historial (log)" ER_AUTO_INCREMENT_CONFLICT chi "更新中的自动增量值与内部生成的值冲突" eng "Auto-increment value in UPDATE conflicts with internally generated values" spa "Valor de Auto-incremento en UPDATE está en conflicto con valores generados internamente" WARN_ON_BLOCKHOLE_IN_RBR chi "未记录行事件的%s语句,该语句以行格式修改BlackHole表。表:'%-.192s'" eng "Row events are not logged for %s statements that modify BLACKHOLE tables in row format. Table(s): '%-.192s'" spa "Los eventos de fila no son puestos en historial (log) para sentencias %s que modifican tablas BLACKHOLE en formato de fila. Tabla(s): '%-.192s'" ER_SLAVE_MI_INIT_REPOSITORY chi "从设备无法从存储库初始化主信息结构" eng "Slave failed to initialize master info structure from the repository" spa "El esclavo falló al inicializar información de estructura del maestro (master) desde el repositorio" ER_SLAVE_RLI_INIT_REPOSITORY chi "从站无法从存储库初始化中继日志信息结构" eng "Slave failed to initialize relay log info structure from the repository" spa "El esclavo falló al inicializar estructura de información de historial (log) de reenvío desde el repositorio" ER_ACCESS_DENIED_CHANGE_USER_ERROR 28000 bgn "Отказан достъп при опит за смяна към потребител %-.48s'@'%-.64s' (използвана парола: %s). Затваряне на връзката" chi "访问拒绝尝试更改为用户'%-.48s'@'%-.64s'(使用密码:%s)。断开连接" eng "Access denied trying to change to user '%-.48s'@'%-.64s' (using password: %s). Disconnecting" spa "Acceso denegado intentando cambiar a usuario '%-.48s'@'%-.64s' (usando contraseña: %s). Desconectando" ER_INNODB_READ_ONLY chi "innodb是只读模式" eng "InnoDB is in read only mode" hindi "InnoDB केवल READ-ONLY मोड में है" spa "InnoDB está en modo de sólo lectura" ER_STOP_SLAVE_SQL_THREAD_TIMEOUT chi "STOP SLAVE命令执行不完整:从SQL线程获得停止信号,线程正忙,一旦当前任务完成后,SQL线程将停止" eng "STOP SLAVE command execution is incomplete: Slave SQL thread got the stop signal, thread is busy, SQL thread will stop once the current task is complete" spa "La ejecución del comando STOP SLAVE está incompleta: El hilo (thread) de SQL esclavo recibió la señal de parada, hilo (thread) ocupado, el hilo (thread) SQL se parará una vez que se complete la tarea actual" ER_STOP_SLAVE_IO_THREAD_TIMEOUT chi "STOP SLAVE命令执行不完整:从机动程线程得到停止信号,线程很忙,一旦当前任务完成后,IO线程将停止。" eng "STOP SLAVE command execution is incomplete: Slave IO thread got the stop signal, thread is busy, IO thread will stop once the current task is complete" spa "La ejecución del comando STOP SLAVE está incompleta: El hilo (thread) de E/S esclavo recibió la señal de parada, hilo (thread) ocupado, el hilo (thread) de E/S se parará una vez que se complete la tarea actual" ER_TABLE_CORRUPT chi "无法执行操作。表'%-.64s。%-.64s'丢失,损坏或包含不良数据" eng "Operation cannot be performed. The table '%-.64s.%-.64s' is missing, corrupt or contains bad data" spa "La operación no se puede realizar. Falta la tabla '%-.64s.%-.64s', está corrupta o contiene datos malos" ER_TEMP_FILE_WRITE_FAILURE chi "临时文件写入失败" eng "Temporary file write failure" spa "Fallo al escribir fichero/archivo temporal" ER_INNODB_FT_AUX_NOT_HEX_ID chi "升级索引名称失败,请使用创建索引(ALTER TABLE)算法复制来重建索引" eng "Upgrade index name failed, please use create index(alter table) algorithm copy to rebuild index" spa "Falló la mejora de nombre de índice. Por favor, use una copia del algoritmo de create index(alter table) para reconstruir el índice" # # # MariaDB error messages section starts here # The following is here to allow us to detect if there was missing # error messages in the errmsg.sys file ER_LAST_MYSQL_ERROR_MESSAGE eng "" # MariaDB error numbers starts from 1900 start-error-number 1900 ER_UNUSED_18 eng "You should never see it" ER_GENERATED_COLUMN_FUNCTION_IS_NOT_ALLOWED chi "函数或表达式'%s'不能用于%s的%`s" eng "Function or expression '%s' cannot be used in the %s clause of %`s" spa "La Función o expresión '%s' no se puede usar en la cláusula %s de %`s" ER_UNUSED_19 eng "You should never see it" ER_PRIMARY_KEY_BASED_ON_GENERATED_COLUMN chi "主键无法在生成的列上定义" eng "Primary key cannot be defined upon a generated column" spa "La clave primaria no se puede definir sobre una columna generada" ER_KEY_BASED_ON_GENERATED_VIRTUAL_COLUMN chi "无法在虚拟生成的列上定义键/索引" eng "Key/Index cannot be defined on a virtual generated column" spa "Key/Index no se puede definir en una columna virtual generada" ER_WRONG_FK_OPTION_FOR_GENERATED_COLUMN chi "无法在生成的列上定义%s子句的外键" eng "Cannot define foreign key with %s clause on a generated column" spa "No puedo definir clave foránea con cláusula %s en una columna generada" ER_WARNING_NON_DEFAULT_VALUE_FOR_GENERATED_COLUMN chi "忽略了表'%s'中为生成的列'%s'指定的值已被忽略" eng "The value specified for generated column '%s' in table '%s' has been ignored" spa "El valor especificado para columna generada '%s' en la tabla '%s' ha sido ignorado" ER_UNSUPPORTED_ACTION_ON_GENERATED_COLUMN chi "生成的列尚未支持这一点" eng "This is not yet supported for generated columns" spa "Esto no está aún soportado para columnas generadas" ER_UNUSED_20 eng "You should never see it" ER_UNUSED_21 eng "You should never see it" ER_UNSUPPORTED_ENGINE_FOR_GENERATED_COLUMNS chi "%s存储引擎不支持生成的列" eng "%s storage engine does not support generated columns" hindi "स्टोरेज इंजन %s COMPUTED कॉलम्स को सपोर्ट नहीं करता" spa "El motor de almacenaje %s no soporta columnas generadas" ER_UNKNOWN_OPTION chi "未知选项'%-.64s'" eng "Unknown option '%-.64s'" hindi "अज्ञात विकल्प '%-.64s'" spa "Opción desconocida '%-.64s'" ER_BAD_OPTION_VALUE chi "值不正确'%-.64T'选项'%-.64s'" eng "Incorrect value '%-.64T' for option '%-.64s'" hindi "गलत मान '%-.64T' विकल्प '%-.64s' के लिए" spa "Valor incorrecto '%-.64T' para opción '%-.64s'" ER_UNUSED_6 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_UNUSED_7 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_UNUSED_8 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_DATA_OVERFLOW 22003 chi "转换'%-.128s'到%-.32s时溢出。值截断" eng "Got overflow when converting '%-.128s' to %-.32s. Value truncated" spa "Obtenido desbordamiento al convertir '%-.128s' a %-.32s. Valor truncado" ER_DATA_TRUNCATED 22003 chi "转换'%-.128s'到%-.32s时值截断" eng "Truncated value '%-.128s' when converting to %-.32s" spa "Valor truncado '%-.128s' al convertir a %-.32s" ER_BAD_DATA 22007 chi "非法值'%-.128s',在转换%-.32s时遇到" eng "Encountered illegal value '%-.128s' when converting to %-.32s" spa "Encontrado valor ilegal '%-.128s' al convertir a %-.32s" ER_DYN_COL_WRONG_FORMAT chi "遇到非法格式的动态列字符串" eng "Encountered illegal format of dynamic column string" spa "Encontrado formato ilegal de cadena en columna dinámica" ER_DYN_COL_IMPLEMENTATION_LIMIT chi "达到动态列实现限制" eng "Dynamic column implementation limit reached" spa "Alcanzado límite de implementación de columna dinámica" ER_DYN_COL_DATA 22007 chi "非法值用作动态列函数的参数" eng "Illegal value used as argument of dynamic column function" spa "Valor ilegal usado como argumento de función de columna dinámica" ER_DYN_COL_WRONG_CHARSET chi "动态列包含未知字符集" eng "Dynamic column contains unknown character set" spa "Columna dinámica contiene conjunto desconocido de caracteres" ER_ILLEGAL_SUBQUERY_OPTIMIZER_SWITCHES chi "“in_to_exists”或'materialization'optimizer_switch标志中的至少一个必须是'开启'" eng "At least one of the 'in_to_exists' or 'materialization' optimizer_switch flags must be 'on'" hindi "कम से कम 'in_to_exists' या 'materialization' optimizer_switch फ्लैग 'ON' होना चाहिए" spa "Al menos una de las banderas de optimizer_switch 'in_to_exists' o 'materialization' debe de estar a 'on'" ER_QUERY_CACHE_IS_DISABLED chi "查询缓存已禁用(调整大小或类似命令正在进行中);稍后重复此命令" eng "Query cache is disabled (resize or similar command in progress); repeat this command later" spa "Caché de consulta (query) desactivada (el comando ajustar o similar está en proceso); repite este comando más tarde" ER_QUERY_CACHE_IS_GLOBALY_DISABLED chi "查询缓存全局禁用,您无法为此会话启用它" eng "Query cache is globally disabled and you can't enable it only for this session" hindi "क्वेरी कैश ग्लोबल स्तर पर DISABLED है और आप इसे केवल सत्र के लिए ENABLE नहीं कर सकते" spa "La caché de consulta (query) está desactivada de forma global y no puede activarla sólo para esta sesión" ER_VIEW_ORDERBY_IGNORED chi "查看'%-.192s'.'%-.192s's ORDER BY子句被忽略,因为还有其他ORDER BY子句" eng "View '%-.192s'.'%-.192s' ORDER BY clause ignored because there is other ORDER BY clause already" spa "Cláusula de vista '%-.192s'.'%-.192s' ORDER BY ignorada porque ya hay otra clásula ORDER BY" ER_CONNECTION_KILLED 70100 chi "连接被杀死" eng "Connection was killed" hindi "कनेक्शन को समाप्त कर दिया गया है" spa "La conexión fue matada" ER_UNUSED_12 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SKIP_REPLICATION chi "无法修改事务中的@@session.skip_replication" eng "Cannot modify @@session.skip_replication inside a transaction" spa "No puedo modificar @@session.skip_replication dentro de una transacción" ER_STORED_FUNCTION_PREVENTS_SWITCH_SKIP_REPLICATION chi "无法修改存储函数或触发器内的@@session.skip_replication" eng "Cannot modify @@session.skip_replication inside a stored function or trigger" spa "No puedo modificar @@session.skip_replication dentro de una función almacenada o disparador" ER_QUERY_RESULT_INCOMPLETE eng "Query execution was interrupted. The query exceeded %s %llu. The query result may be incomplete" ER_NO_SUCH_TABLE_IN_ENGINE 42S02 chi "表'%-.192s.%-.192s'在引擎中不存在" eng "Table '%-.192s.%-.192s' doesn't exist in engine" hindi "टेबल '%-.192s.%-.192s' इंजन में मौजूद नहीं है" spa "La tabla '%-.192s.%-.192s' no existe en el motor" swe "Det finns ingen tabell som heter '%-.192s.%-.192s' i handlern" ER_TARGET_NOT_EXPLAINABLE chi "目标未运行可解释的命令" eng "Target is not running an EXPLAINable command" spa "El objetivo no está ejecutando un comando EXPLAINable" ER_CONNECTION_ALREADY_EXISTS chi "连接'%.*s'与现有连接'%.*s'冲突" eng "Connection '%.*s' conflicts with existing connection '%.*s'" spa "La conexión '%.*s' está en conflicto con la conexión existente '%.*s'" ER_MASTER_LOG_PREFIX chi "Master'%.*s':" eng "Master '%.*s': " spa "Maestro (master) '%.*s': " ER_CANT_START_STOP_SLAVE chi "不能%sSLAVE'%.*s'" eng "Can't %s SLAVE '%.*s'" spa "No puedo %s ESCLAVO '%.*s'" ER_SLAVE_STARTED chi "SLAVE '%.*s'开始了" eng "SLAVE '%.*s' started" spa "ESCLAVO '%.*s' arrancado" ER_SLAVE_STOPPED chi "slave'%.*s'停止了" eng "SLAVE '%.*s' stopped" spa "ESCLAVO '%.*s' parado" ER_SQL_DISCOVER_ERROR chi "引擎%s无法发现表%`-.192s.%`-.192s,'%s'" eng "Engine %s failed to discover table %`-.192s.%`-.192s with '%s'" spa "El motor %s no pudo descubr la tabla %`-.192s.%`-.192s con '%s'" ER_FAILED_GTID_STATE_INIT chi "初始化复制GTID状态失败" eng "Failed initializing replication GTID state" spa "Fallo inicializando estado de réplica GTID" ER_INCORRECT_GTID_STATE chi "无法解析GTID列表" eng "Could not parse GTID list" spa "No pude analizar la lista GTID" ER_CANNOT_UPDATE_GTID_STATE chi "无法更新Replication Slave GTID状态" eng "Could not update replication slave gtid state" spa "No pude actualizar estado gtid de esclavo de réplica" ER_DUPLICATE_GTID_DOMAIN chi "GTID %u-%u-%llu和%u-%u-%llu冲突(重复域ID%u)" eng "GTID %u-%u-%llu and %u-%u-%llu conflict (duplicate domain id %u)" spa "Conflicto GTID %u-%u-%llu y %u-%u-%llu (duplicado id de dominio %u)" ER_GTID_OPEN_TABLE_FAILED chi "未能打开%s.%s" eng "Failed to open %s.%s" ger "Öffnen von %s.%s fehlgeschlagen" spa "No pude abrir %s.%s" ER_GTID_POSITION_NOT_FOUND_IN_BINLOG chi "连接从站请求从GTID%u-%u-%llu开始,这不在Master的Binlog中" eng "Connecting slave requested to start from GTID %u-%u-%llu, which is not in the master's binlog" spa "Se ha requerido que conectar esclavo arranque desde GTID %u-%u-%llu, el cual no está en el binlog del maestro (master)" ER_CANNOT_LOAD_SLAVE_GTID_STATE chi "无法从表%s中加载Replication Slave GTID位置。%s" eng "Failed to load replication slave GTID position from table %s.%s" spa "No pude cargar posición GTID de esclavo de réplica desde la tabla %s.%s" ER_MASTER_GTID_POS_CONFLICTS_WITH_BINLOG chi "指定的GTID%u-%u-%llu与二进制日志冲突,其中包含更新的GTID%u-%u-%llu。如果使用master_gtid_pos = current_pos,则Binlog位置将覆盖@@gtid_slave_pos的新值" eng "Specified GTID %u-%u-%llu conflicts with the binary log which contains a more recent GTID %u-%u-%llu. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos" spa "El especificado GTID %u-%u-%llu está en conflicto con el historial (log) binario el cual contiene un más reciente GTID %u-%u-%llu. Si se usa MASTER_GTID_POS=CURRENT_POS, la posición de binlog sobreescribirá el nuevo valor de @@gtid_slave_pos" ER_MASTER_GTID_POS_MISSING_DOMAIN chi "指定值为@@gtid_slave_pos不包含复制域%u的值。这与二进制日志冲突,其中包含gtid%u-%u-%llu。如果使用master_gtid_pos = current_pos,则Binlog位置将覆盖@@ gtid_slave_pos的新值" eng "Specified value for @@gtid_slave_pos contains no value for replication domain %u. This conflicts with the binary log which contains GTID %u-%u-%llu. If MASTER_GTID_POS=CURRENT_POS is used, the binlog position will override the new value of @@gtid_slave_pos" spa "El valor especificado para @@gtid_slave_pos no contiene valor para dominio de réplica %u. Esto está en conflicto con el historial (log) binario el cual contiene un GTID %u-%u-%llu. Si se usa MASTER_GTID_POS=CURRENT_POS, la posición binlog sobreescribirá el nuevo valor de @@gtid_slave_pos" ER_UNTIL_REQUIRES_USING_GTID chi "启动从站,直到master_gtid_pos要求从站使用gtid" eng "START SLAVE UNTIL master_gtid_pos requires that slave is using GTID" spa "START SLAVE UNTIL master_gtid_pos requiere que esclavo esté usando GTID" ER_GTID_STRICT_OUT_OF_ORDER chi "尝试对Binlog GTID%u-%u-%llu进行,这将创建具有现有GTID%u-%u-%llu的订单无序序列号,并且启用了GTID严格模式" eng "An attempt was made to binlog GTID %u-%u-%llu which would create an out-of-order sequence number with existing GTID %u-%u-%llu, and gtid strict mode is enabled" spa "Se ha intentado hacer binlog de GTID %u-%u-%llu lo cual crearía un número de secuencia fuera de orden con el existente GTID %u-%u-%llu y está activado gtid en modo estricto" ER_GTID_START_FROM_BINLOG_HOLE chi "主机上的Binlog缺少从站所需请求的GTID%u-%u-%llu(即使存在后续的序列号),并启用GTID严格模式" eng "The binlog on the master is missing the GTID %u-%u-%llu requested by the slave (even though a subsequent sequence number does exist), and GTID strict mode is enabled" spa "Al binlog del maestro (master) le falta el GTID %u-%u-%llu requerido por el esclavo (incluso aunque existe un número posterior de secuencia) y está activado GTID en modo estricto" ER_SLAVE_UNEXPECTED_MASTER_SWITCH chi "重新连接后,从master收到意外的GTID。这通常表示在不重新启动从线程的情况下替换主服务器。%s." eng "Unexpected GTID received from master after reconnect. This normally indicates that the master server was replaced without restarting the slave threads. %s" spa "Se ha recibido un GTID inesperado desde el maestro (master) tras reconectar. Esto indica normalmente que el servidor maestro (master) ha sido reemplazado sin rearrancar los hilos (threads) del esclavo. %s" ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO chi "无法修改@@sessient.gtid_domain_id或@@session.gtid_seq_no" eng "Cannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a transaction" spa "No puedo modificar @@session.gtid_domain_id o @@session.gtid_seq_no dentro de una transacción" ER_STORED_FUNCTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO chi "无法修改@@sessient.gtid_domain_id或@@session.gtid_seq_no或触发器" eng "Cannot modify @@session.gtid_domain_id or @@session.gtid_seq_no inside a stored function or trigger" spa "No puedo modificar @@session.gtid_domain_id o @@session.gtid_seq_no dentro de una función almacenada o de un disparador" ER_GTID_POSITION_NOT_FOUND_IN_BINLOG2 chi "连接从站请求从GTID%u-%u-%llu开始,这不在Master的Binlog中。由于Master的Binlog包含具有更高序列号的GTID,因此它可能意味着由于执行额外错误的交易,因此slave已经分歧" eng "Connecting slave requested to start from GTID %u-%u-%llu, which is not in the master's binlog. Since the master's binlog contains GTIDs with higher sequence numbers, it probably means that the slave has diverged due to executing extra erroneous transactions" spa "Se ha requerido arrancar la conexión a esclavo desde GTID %u-%u-%llu, el cual no está en el binlog del maestro (master). Ya que el binlog del maestro (master) contiene GTIDs con números mayores de secuencia, es probable que indique que el esclavo diverge debido a ejecutar transacciones extra erróneas" ER_BINLOG_MUST_BE_EMPTY chi "如果已将任何GTID记录到二进制日志,则不允许此操作。首先运行RESET MASTER擦除日志" eng "This operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the log" spa "Esta operación no está permitida si cualquier GTID ha sido puesto en historial (log) binario. Ejecuta primero RESET MASTER para borrar el historial (log)" ER_NO_SUCH_QUERY chi "未知查询ID:%lld" eng "Unknown query id: %lld" ger "Unbekannte Abfrage-ID: %lld" hindi "अज्ञात क्वेरी ID: %lld" rus "Неизвестный номер запроса: %lld" spa "Id desconocido de consulta (query): %lld" ER_BAD_BASE64_DATA chi "错误Base64数据作为位置%u" eng "Bad base64 data as position %u" spa "Datos base64 malos en posición %u" ER_INVALID_ROLE OP000 chi "无效的角色规范%`s" eng "Invalid role specification %`s" hindi "अमान्य रोल विनिर्देश %`s" rum "Rolul %`s este invalid" spa "Especificación inválida de rol %`s" ER_INVALID_CURRENT_USER 0L000 chi "当前用户无效" eng "The current user is invalid" hindi "वर्तमान यूज़र अमान्य है" rum "Utilizatorul curent este invalid" spa "El usuario en curso no es válido" ER_CANNOT_GRANT_ROLE chi "无法将角色'%s'授予:%s" eng "Cannot grant role '%s' to: %s" hindi "रोल '%s', %s को प्रदान नहीं कर सकते" rum "Rolul '%s' nu poate fi acordat catre: %s" spa "No puedo conceder rol '%s' a: %s" ER_CANNOT_REVOKE_ROLE chi "无法撤消来自:%s的角色'%s'" eng "Cannot revoke role '%s' from: %s" hindi "रोल '%s', %s से हटाया नहीं जा सका" rum "Rolul '%s' nu poate fi revocat de la: %s" spa "No puedo revocar rol '%s' desde: %s" ER_CHANGE_SLAVE_PARALLEL_THREADS_ACTIVE chi "无法更改@@slave_parallel_threads,而另一个更改正在进行中" eng "Cannot change @@slave_parallel_threads while another change is in progress" spa "No puedo cambiar @@slave_parallel_threads mientras otro cambio esté en proceso" ER_PRIOR_COMMIT_FAILED chi "由于早期提交的失败取决于依赖于哪个依赖性,提交失败" eng "Commit failed due to failure of an earlier commit on which this one depends" spa "Ha fallado la acometida (commit) debido a un fallo previo en acometida (commit) de la que depende ésta" ER_IT_IS_A_VIEW 42S02 chi "'%-.192s'是一个VIEW" eng "'%-.192s' is a view" hindi "'%-.192s' एक VIEW है" spa "'%-.192s' es una vista" ER_SLAVE_SKIP_NOT_IN_GTID chi "使用并行复制和带有多个复制域的GTID时,无法使用@@SQL_SLAVE_SKIP_COUNTER。相反,可以使用明确设置@@gtid_slave_pos以在给定的gtid位置之后跳到" eng "When using parallel replication and GTID with multiple replication domains, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position" spa "Al usar réplica paralela y GTID con múltiples dominios de réplica, no se puede usar @@sql_slave_skip_counter. En su lugar, poner @@gtid_slave_pos de forma explícita se puede usar para saltar tras una posición GTID dada" ER_TABLE_DEFINITION_TOO_BIG chi "表%`s的定义太大了" eng "The definition for table %`s is too big" hindi "टेबल %`s की परिभाषा बहुत बड़ी है" spa "La definición para la tabla %`s es demasiado larga" ER_PLUGIN_INSTALLED chi "插件'%-.192s'已安装" eng "Plugin '%-.192s' already installed" hindi "प्लग-इन '%-.192s' पहले से ही इन्स्टॉल्ड है" rus "Плагин '%-.192s' уже установлен" spa "Ya instalado el enchufe (plugin) '%-.192s'" ER_STATEMENT_TIMEOUT 70100 chi "查询执行中断(超出MAX_STATEMENT_TIME)" eng "Query execution was interrupted (max_statement_time exceeded)" spa "Se ha interrumpido la ejecución de una consulta (query) (excedido max_statement_time) ER_SUBQUERIES_NOT_SUPPORTED 42000 chi "%s不支持子查询或存储的函数" eng "%s does not support subqueries or stored functions" spa "%s no soporta subconsultas (subqueries) o funciones almacenadas" ER_SET_STATEMENT_NOT_SUPPORTED 42000 chi "系统变量%.200s无法在set语句中设置。“" eng "The system variable %.200s cannot be set in SET STATEMENT." spa "La variable del sistema %.200s no se puede poner en SET STATEMENT." ER_UNUSED_9 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_USER_CREATE_EXISTS chi "无法创建用户'%-.64s'@'%-.64s';它已经存在" eng "Can't create user '%-.64s'@'%-.64s'; it already exists" hindi "यूज़र '%-.64s'@'%-.64s' को नहीं बना सकते; यह पहले से ही मौजूद है" spa "No puedo crear usuario '%-.64s'@'%-.64s'; ya existe" ER_USER_DROP_EXISTS chi "无法删除用户'%-.64s'@'%-.64s';它不存在" eng "Can't drop user '%-.64s'@'%-.64s'; it doesn't exist" hindi "यूज़र '%-.64s'@'%-.64s' को ड्रॉप नहीं कर सकते; यह मौजूद नहीं है" spa "No puedo eliminar usuario '%-.64s'@'%-.64s'; no existe" ER_ROLE_CREATE_EXISTS chi "无法创建角色'%-.64s';它已经存在" eng "Can't create role '%-.64s'; it already exists" hindi "रोल '%-.64s' को नहीं बना सकते; यह पहले से ही मौजूद है" spa "No puedo crear rol '%-.64s'; ya existe" ER_ROLE_DROP_EXISTS chi "无法删除'%-.64s'。它不存在" eng "Can't drop role '%-.64s'; it doesn't exist" hindi "रोल '%-.64s' को ड्रॉप नहीं कर सकते; यह मौजूद नहीं है" spa "No puedo eliminar rol '%-.64s'; no existe" ER_CANNOT_CONVERT_CHARACTER chi "无法将'%s'字符0x转换为0x%-.64s到'%s'" eng "Cannot convert '%s' character 0x%-.64s to '%s'" spa "No puedo convertir '%s' carácter 0x%-.64s a '%s'" ER_INVALID_DEFAULT_VALUE_FOR_FIELD 22007 chi "列的默认值不正确'%-.128T' '%.192s'" eng "Incorrect default value '%-.128T' for column '%.192s'" hindi "गलत डिफ़ॉल्ट मान '%-.128T' कॉलम '%.192s' के लिए" spa "Valor por defecto incorrecto '%-.128T' para columna '%.192s'" ER_KILL_QUERY_DENIED_ERROR chi "你不是查询%lld的所有者" eng "You are not owner of query %lld" ger "Sie sind nicht Eigentümer von Abfrage %lld" hindi "आप क्वेरी %lld के OWNER नहीं हैं" rus "Вы не являетесь владельцем запроса %lld" spa "No eres el propietario de la consulta (query) %lld" ER_NO_EIS_FOR_FIELD chi "没有收集无关的统计信息列'%s'" eng "Engine-independent statistics are not collected for column '%s'" hindi "Engine-independent सांख्यिकी कॉलम '%s' के लिए एकत्रित नहीं किया जा रहा है" spa "No se han recolectado estadísticas independientes del motor para la columna '%s'" ukr "Незалежна від типу таблиці статистика не збирається для стовбця '%s'" ER_WARN_AGGFUNC_DEPENDENCE chi "聚合函数'%-.192s)'SELECT#%d的属于选择#%d" eng "Aggregate function '%-.192s)' of SELECT #%d belongs to SELECT #%d" spa "La función de agregación '%-.192s)' del SELECT #%d pertenece a SELECT #%d" ukr "Агрегатна функція '%-.192s)' з SELECTу #%d належить до SELECTу #%d" WARN_INNODB_PARTITION_OPTION_IGNORED chi "<%-.64s> innodb分区忽略的选项" eng "<%-.64s> option ignored for InnoDB partition" spa "<%-.64s> opción ignorada para partición InnoDB" # # Internal errors, not used # skip-to-error-number 2000 # MySQL 5.7 error numbers starts here skip-to-error-number 3000 ER_FILE_CORRUPT chi "文件%s已损坏" eng "File %s is corrupted" spa "El fichero/archivo %s está corrupto" ER_ERROR_ON_MASTER chi "查询在主设备上部分完成(主设备:%d)并中止。你的master在这一点上有可能不一致。如果您确定您的主站是可以的,请在从站上手动运行此查询,然后使用SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1; START SLAVE ;查询:'%s'" eng "Query partially completed on the master (error on master: %d) and was aborted. There is a chance that your master is inconsistent at this point. If you are sure that your master is ok, run this query manually on the slave and then restart the slave with SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;. Query:'%s'" spa "Consulta (query) completada de forma parcial en el maestro (master) (error en maestro (master): %d) y se ha abortado. Existe una posibilidad de que su maestro (master) esté inconsitente en este punto. Si está seguro de que su maestro (master) está ok, ejecute esta consulta (query) de forma manual en el esclavo y luego rearranque el esclavo mediante SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;. Consulta (query):'%s'" ER_INCONSISTENT_ERROR chi "查询在主站和从站上引起了不同的错误。主站错误:消息(格式)='%s'错误代码=%d;从站错误:实际消息='%s',错误代码=%d。默认数据库:'%s'。查询:'%s'" eng "Query caused different errors on master and slave. Error on master: message (format)='%s' error code=%d; Error on slave:actual message='%s', error code=%d. Default database:'%s'. Query:'%s'" spa "La consulta (query) ha ocasionado diferentes errores en el maestro (master) y en el esclavo. Error en maestro (master): mensaje (formato)='%s' código de error=%d; Error en esclavo: mensaje actual='%s', código de error=%d. Base de datos por defecto:'%s'. Consulta (query):'%s'" ER_STORAGE_ENGINE_NOT_LOADED chi "表'%s'的存储引擎'%s'没有加载。" eng "Storage engine for table '%s'.'%s' is not loaded." spa "El motor de almacenaje para la tabla '%s'.'%s' no ha sido cargado." ER_GET_STACKED_DA_WITHOUT_ACTIVE_HANDLER 0Z002 chi "处理程序未激活时GET STACKED DIAGNOSTICS" eng "GET STACKED DIAGNOSTICS when handler not active" spa "GET STACKED DIAGNOSTICS cuando el manejador no está activo" ER_WARN_LEGACY_SYNTAX_CONVERTED chi "不再支持%s。该语句被转换为%s。" eng "%s is no longer supported. The statement was converted to %s." spa "%s ya no está soportada. Se ha convertido la sentencia a %s." ER_BINLOG_UNSAFE_FULLTEXT_PLUGIN chi "语句不安全,因为它使用全文解析器插件,它可能不会在从站上返回相同的值。" eng "Statement is unsafe because it uses a fulltext parser plugin which may not return the same value on the slave." spa "La sentencia no es segura porque usa un enchufe (plugin) analizador de fulltext que puede que no devuelva el mismo valor en el esclavo." ER_CANNOT_DISCARD_TEMPORARY_TABLE chi "无法丢弃与临时表相关联的/导入表空间" eng "Cannot DISCARD/IMPORT tablespace associated with temporary table" spa "No puedo DISCARD/IMPORT espacio de tabla asociado con tabla temporal" ER_FK_DEPTH_EXCEEDED chi "外键级联删除/更新超出了%d的最大深度。" eng "Foreign key cascade delete/update exceeds max depth of %d." spa "La cascada borrar/actualizar en clave foránea excede la máxima profundidad de %d." ER_COL_COUNT_DOESNT_MATCH_PLEASE_UPDATE_V2 chi "列数为%s.%s是错误的。预期的%d,找到%d。使用MariaDB%d创建,现在运行%d。请使用mariadb-upgrade来修复此错误。" eng "Column count of %s.%s is wrong. Expected %d, found %d. Created with MariaDB %d, now running %d. Please use mariadb-upgrade to fix this error." ger "Spaltenanzahl von %s.%s falsch. %d erwartet, aber %d erhalten. Erzeugt mit MariaDB %d, jetzt unter %d. Bitte benutzen Sie mariadb-upgrade, um den Fehler zu beheben" spa "El contador de columna de %s.%s está equivocado. Se esperaba %d, hallado %d, Creado con MariaDB %d, ahora ejecutando %d. Por favor, use mariadb-upgrade para arreglar este error." ER_WARN_TRIGGER_DOESNT_HAVE_CREATED chi "触发器%s.%s.%s没有CREATE属性。" eng "Trigger %s.%s.%s does not have CREATED attribute." spa "El disparador %s.%s.%s no tiene el atributo CREATED." ER_REFERENCED_TRG_DOES_NOT_EXIST_MYSQL chi "引用的触发器'%s'用于给定的动作时间和事件类型不存在。" eng "Referenced trigger '%s' for the given action time and event type does not exist." spa "El disparador referenciado '%s' para el momento dado de acción y el tipo de evento no existe." ER_EXPLAIN_NOT_SUPPORTED chi "EXPLAIN FOR CONNECTION仅支持SELECT/UPDATE/INSERT/DELETE/REPLACE" eng "EXPLAIN FOR CONNECTION command is supported only for SELECT/UPDATE/INSERT/DELETE/REPLACE" spa "El comando EXPLAIN FOR CONNECTION sólo se soporta para SELECT/UPDATE/INSERT/DELETE/REPLACE" ER_INVALID_FIELD_SIZE chi "列'%-.192s'的大小无效。" eng "Invalid size for column '%-.192s'." spa "Tamaño inválido para columna '%-.192s'." ER_MISSING_HA_CREATE_OPTION chi "表存储引擎'%-.64s'所找到的必备创建选项丢失" eng "Table storage engine '%-.64s' found required create option missing" spa "El motor hallado de almacenaje de tabla '%-.64s' requería de la opción de crear que falta" ER_ENGINE_OUT_OF_MEMORY chi "存储引擎'%-.64s'中的内存不足。" eng "Out of memory in storage engine '%-.64s'." spa "Memoria agotada en motor de almacenaje '%-.64s'." ER_PASSWORD_EXPIRE_ANONYMOUS_USER chi "匿名用户的密码不能过期。" eng "The password for anonymous user cannot be expired." spa "La contraseña para usuario anónimo no puede expirar." ER_SLAVE_SQL_THREAD_MUST_STOP chi "无法使用正在运行的从SQL线程执行此操作;首先运行STOP SLAVE SQL_THREAD" eng "This operation cannot be performed with a running slave sql thread; run STOP SLAVE SQL_THREAD first" spa "Esta operación no se puede realizar con hilo (thread) sql esclavo en ejecución; ejecuta STOP SLAVE SQL_THREAD primero" ER_NO_FT_MATERIALIZED_SUBQUERY chi "无法在物化的子查询上创建FullText索引" eng "Cannot create FULLTEXT index on materialized subquery" spa "No puedo crear índice FULLTEXT en subconsulta (subquery) materializada" ER_INNODB_UNDO_LOG_FULL chi "撤消日志错误:%s" eng "Undo Log error: %s" spa "Error de Historial (log) de Deshacer: %s" ER_INVALID_ARGUMENT_FOR_LOGARITHM 2201E chi "对数的参数无效" eng "Invalid argument for logarithm" spa "Argumento inválido para logaritmo" ER_SLAVE_CHANNEL_IO_THREAD_MUST_STOP chi "无法使用正在运行的slave IO线程执行此操作;首先运行STOP SLAVE IO_THREAD FOR CHANNEL'%s'。" eng "This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '%s' first." spa "Esta operación no se puede realizar con un hilo (thread) de e/s de esclavo en ejecución; ejecuta STOP SLAVE IO_THREAD FOR CHANNEL '%s' primero." ER_WARN_OPEN_TEMP_TABLES_MUST_BE_ZERO chi "当从站具有临时表时,此操作可能不安全。表将保持打开,直到服务器重新启动或通过任何复制的DROP语句删除表。建议等到Slave_open_temp_tables = 0。" eng "This operation may not be safe when the slave has temporary tables. The tables will be kept open until the server restarts or until the tables are deleted by any replicated DROP statement. Suggest to wait until slave_open_temp_tables = 0." spa "Esta operación puede no ser segura cuando el esclavo tenga tablas temporales. Las tablas serán mantenidas abiertas hasta que el servidor rearranque o hasta que las tablas sean borradas por cualquier sentencia DROP replicada. Se sugiere esperar hasta slave_open_temp_tables = 0." ER_WARN_ONLY_MASTER_LOG_FILE_NO_POS chi "使用CHANGE MASTER TO master_log_file子句更改master,但没有master_log_pos子句可能不安全。旧位置值可能对新的二进制日志文件无效。" eng "CHANGE MASTER TO with a MASTER_LOG_FILE clause but no MASTER_LOG_POS clause may not be safe. The old position value may not be valid for the new binary log file." spa "CHANGE MASTER TO mediante una cláusula MASTER_LOG_FILE pero sin existir cláusula MASTER_LOG_POS puede no ser seguro. El valor viejo de la posición puede no ser válido para el nuevo fichero/archivo binario de historial (log)." ER_UNUSED_1 eng "You should never see it" ER_NON_RO_SELECT_DISABLE_TIMER chi "SELECT不是只读语句,禁用计时器" eng "Select is not a read only statement, disabling timer" spa "Select no es una sentencia de sólo lectura, desactivando cronómetro" ER_DUP_LIST_ENTRY chi "重复条目'%-.192s'。" eng "Duplicate entry '%-.192s'." spa "Entrada duplicada '%-.192s'." ER_SQL_MODE_NO_EFFECT chi "'%s'模式不再有任何效果。使用STRICT_ALL_TABLES或STRICT_TRANS_TABLES。" eng "'%s' mode no longer has any effect. Use STRICT_ALL_TABLES or STRICT_TRANS_TABLES instead." spa "El modo '%s' ya no tiene efecto alguno. Use STRICT_ALL_TABLES o STRICT_TRANS_TABLES en su lugar" ER_AGGREGATE_ORDER_FOR_UNION chi "表达式#%u ORDER BY包含聚合函数并适用于UNION" eng "Expression #%u of ORDER BY contains aggregate function and applies to a UNION" spa "La expresión #%u de ORDER BY contiene función de agregación y se aplica a UNION" ER_AGGREGATE_ORDER_NON_AGG_QUERY chi "表达式#%u通过包含聚合函数,并适用于非聚合查询的结果" eng "Expression #%u of ORDER BY contains aggregate function and applies to the result of a non-aggregated query" spa "La expresión #%u de ORDER BY contiene función de agregación y se aplica al resultado de una consulta (query) no agregada" ER_SLAVE_WORKER_STOPPED_PREVIOUS_THD_ERROR chi "在启用了slave保存提交次序时至少有一个以前的工人遇到错误后,slave工作者已停止。要保留提交次序,此线程执行的最后一项事务尚未提交。在修复任何故障线程后重新启动从站时,您也应该修复此工作人。" eng "Slave worker has stopped after at least one previous worker encountered an error when slave-preserve-commit-order was enabled. To preserve commit order, the last transaction executed by this thread has not been committed. When restarting the slave after fixing any failed threads, you should fix this worker as well." spa "El trabajador esclavo se ha parado tras al menos encontrar un error en trabajador previo cuando slave-preserve-commit-order fue activado. Para preserver el orden de acometida (commit), la última transacción ejecutada por este hilo (thread) no se ha acometido (commit). Al rearrancar el esclavo tras arreglar cualquier hilo (thread) fallido, vd debería de arreglar este trabajador también" ER_DONT_SUPPORT_SLAVE_PRESERVE_COMMIT_ORDER chi "slave_preerve_commit_order不支持%s。" eng "slave_preserve_commit_order is not supported %s." spa "slave_preserve_commit_order no está soportado %s." ER_SERVER_OFFLINE_MODE chi "服务器目前处于离线模式" eng "The server is currently in offline mode" spa "El servidor se encuentra actualmente en modo fuera de línea" ER_GIS_DIFFERENT_SRIDS chi "二进制几何函数%s给定两个不同SRID的几何形状:%u和%u,应该是相同的。" eng "Binary geometry function %s given two geometries of different srids: %u and %u, which should have been identical." spa "La función binaria de geomertía %s ha dado dos geometrías de diferente srids: %u y %u, que deberían de haber sido idénticas" ER_GIS_UNSUPPORTED_ARGUMENT chi "调用几何函数%s与不受支持类型的参数。" eng "Calling geometry function %s with unsupported types of arguments." spa "Llamando a función de geometría %s con tipos de argumento no soportados." ER_GIS_UNKNOWN_ERROR chi "未知的GIS错误发生在功能%s中。" eng "Unknown GIS error occurred in function %s." spa "Ha ocurrido un error GIS desconocido en función %s." ER_GIS_UNKNOWN_EXCEPTION chi "在GIS功能%s中捕获的未知异常。" eng "Unknown exception caught in GIS function %s." spa "Excepción desconocida capturada en función GIS %s." ER_GIS_INVALID_DATA 22023 chi "提供给功能%s的GIS数据无效。" eng "Invalid GIS data provided to function %s." spa "Suministrados datos GIS inválidos a función %s." ER_BOOST_GEOMETRY_EMPTY_INPUT_EXCEPTION chi "几何形状在功能%s中没有数据。" eng "The geometry has no data in function %s." spa "La geometría no tiene datos en función %s." ER_BOOST_GEOMETRY_CENTROID_EXCEPTION chi "无法计算质心,因为在功能%s中几何为空。" eng "Unable to calculate centroid because geometry is empty in function %s." spa "Imposible calcular centroid porque la geometría está vacía en la función %s." ER_BOOST_GEOMETRY_OVERLAY_INVALID_INPUT_EXCEPTION chi "几何叠加计算错误:几何数据在功能%s中无效。" eng "Geometry overlay calculation error: geometry data is invalid in function %s." spa "Error de cálculo de superposición de geometría: el dato de geometría es inválido en la función %s." ER_BOOST_GEOMETRY_TURN_INFO_EXCEPTION chi "几何旋转信息计算错误:几何数据在功能%s中无效。" eng "Geometry turn info calculation error: geometry data is invalid in function %s." spa "Error de cálculo de información devuelto: los datos de geometría son inválidos en la función %s." ER_BOOST_GEOMETRY_SELF_INTERSECTION_POINT_EXCEPTION chi "在功能%s中出乎意料地中断交叉点的分析程序。" eng "Analysis procedures of intersection points interrupted unexpectedly in function %s." spa "Los procedimientos de análisis de puntos de intersección se interrumpieron inesperadamente en la función %s." ER_BOOST_GEOMETRY_UNKNOWN_EXCEPTION chi "在功能%s中抛出的未知异常。" eng "Unknown exception thrown in function %s." spa "Excepción desconocida lanzada en la función %s." ER_STD_BAD_ALLOC_ERROR chi "内存分配错误:%-.256s。函数%s。" eng "Memory allocation error: %-.256s in function %s." spa "Error en adjudicación de memoria: %-.256s en la función %s." ER_STD_DOMAIN_ERROR chi "域名错误:%-.256s. 函数%s" eng "Domain error: %-.256s in function %s." spa "Error en dominio: %-.256s en función %s." ER_STD_LENGTH_ERROR chi "长度误差:%-.256s函数%s。" eng "Length error: %-.256s in function %s." spa "Error de tamaño: %-.256s en función %s." ER_STD_INVALID_ARGUMENT chi "无效的参数错误:%-.256s函数%s。" eng "Invalid argument error: %-.256s in function %s." spa "Error de argumento inválido: %-.256s en función %s." ER_STD_OUT_OF_RANGE_ERROR chi "超出范围错误:%-.256s 函数%s。" eng "Out of range error: %-.256s in function %s." spa "Error de fuera de rango: %-.256s en función %s." ER_STD_OVERFLOW_ERROR chi "溢出错误:%-.256s。功能%s。" eng "Overflow error: %-.256s in function %s." spa "Error de desbordamiento: %-.256s en función %s." ER_STD_RANGE_ERROR chi "范围错误:%-.256s函数%s。" eng "Range error: %-.256s in function %s." spa "Error de rango: %-.256s en función %s." ER_STD_UNDERFLOW_ERROR chi "下溢错误:%-.256s函数%s。" eng "Underflow error: %-.256s in function %s." spa "Error de refreno (underflow): %-.256s en la función %s." ER_STD_LOGIC_ERROR chi "逻辑错误:%-.256s 函数%s。" eng "Logic error: %-.256s in function %s." spa "Error lógico: %-.256s en la función %s." ER_STD_RUNTIME_ERROR chi "运行时错误:%-.256s函数%s。" eng "Runtime error: %-.256s in function %s." spa "Error en tiempo de ejecución: %-.256s en la función %s." ER_STD_UNKNOWN_EXCEPTION chi "未知例外:%-.384s在函数%s中。" eng "Unknown exception: %-.384s in function %s." spa "Excepción desconocida: %-.384s en la función %s." ER_GIS_DATA_WRONG_ENDIANESS chi "几何字节字符串必须是小endian。" eng "Geometry byte string must be little endian." spa "La cadena de byte en Geometría debe de ser 'little endian'." ER_CHANGE_MASTER_PASSWORD_LENGTH chi "为Replication User提供的密码超过32个字符的最大长度" eng "The password provided for the replication user exceeds the maximum length of 32 characters" spa "La contraseña suministrada para el usuario de réplica excede el tamaño máximo de 32 caracteres" ER_USER_LOCK_WRONG_NAME 42000 chi "用户级锁名名称'%-.192s'不正确。" eng "Incorrect user-level lock name '%-.192s'." spa "Nombre de bloqueo incorrecto a nivel de usuario '%-.192s'." # Should be different from ER_LOCK_DEADLOCK since it doesn't cause implicit # rollback. Should not be mapped to SQLSTATE 40001 for the same reason. ER_USER_LOCK_DEADLOCK chi "在尝试获得用户级锁时发现死锁;尝试回滚交易/释放锁定并重新启动锁定采集。" eng "Deadlock found when trying to get user-level lock; try rolling back transaction/releasing locks and restarting lock acquisition." spa "Hallado estancamiento (deadlock) al intentar obtener bloqueo a nivel de usuario; intente retroceder (roll back) bloqueos de transacción/entrega y rearranque la adquisición de bloqueo." ER_REPLACE_INACCESSIBLE_ROWS chi "无法执行REPLACE,因为它需要删除不在视图中的行" eng "REPLACE cannot be executed as it requires deleting rows that are not in the view" spa "REPLACE no se puede ejecutar ya que requiere borrar filas que no están en la vista" ER_ALTER_OPERATION_NOT_SUPPORTED_REASON_GIS chi "不要支持使用GIS索引的表中的在线操作" eng "Do not support online operation on table with GIS index" spa "No soporta operación en línea en tabla con índice GIS" # MariaDB extra error numbers starts from 4000 skip-to-error-number 4000 ER_UNUSED_26 0A000 eng "This error never happens" spa "Este error nunca ocurre" ER_UNUSED_27 eng "This error never happens" spa "Este error nunca ocurre" ER_WITH_COL_WRONG_LIST chi "使用列列表并选择字段列表具有不同的列计数" eng "WITH column list and SELECT field list have different column counts" spa "La lista de columnas de WITH y lista de campos de SELECT tienen diferentes contadores de columna" ER_TOO_MANY_DEFINITIONS_IN_WITH_CLAUSE chi "WITH条款中的元素太多了" eng "Too many WITH elements in WITH clause" spa "Demasiados elementos WITH en cláusua WITH" ER_DUP_QUERY_NAME chi "WITH子句重复查询名称%`-.64s" eng "Duplicate query name %`-.64s in WITH clause" spa "Nombre de consulta (query) %`-.64s duplicada en cláusula WITH" ER_RECURSIVE_WITHOUT_ANCHORS chi "没有元素'%s'递归的锚点" eng "No anchors for recursive WITH element '%s'" spa "No hay anclajes para elemento WITH recursivo '%s'" ER_UNACCEPTABLE_MUTUAL_RECURSION chi "锚定表'%s'不可接受的相互递归" eng "Unacceptable mutual recursion with anchored table '%s'" spa "Recursión mutua inaceptable con tabla anclada '%s'" ER_REF_TO_RECURSIVE_WITH_TABLE_IN_DERIVED chi "物质化的衍生参考指向递归的WITH 表'%s'" eng "Reference to recursive WITH table '%s' in materialized derived" spa "Referencia recursiva con WITH tabla '%s' en derivada materializada" ER_NOT_STANDARD_COMPLIANT_RECURSIVE chi "表'%s'R_WRONG_WINDOW_SPEC_NAME违反了递归定义的限制" eng "Restrictions imposed on recursive definitions are violated for table '%s'" ER_WRONG_WINDOW_SPEC_NAME chi "没有定义名称'%s'的窗口规范" eng "Window specification with name '%s' is not defined" spa "Especificación de ventana con nombre '%s' no definida" ER_DUP_WINDOW_NAME chi "具有相同名称'%s'的多个窗口规范" eng "Multiple window specifications with the same name '%s'" spa "Múltiples especificaciones de ventana con el mismo nombre '%s'" ER_PARTITION_LIST_IN_REFERENCING_WINDOW_SPEC chi "窗口规范引用另一个'%s'不能包含分区列表" eng "Window specification referencing another one '%s' cannot contain partition list" spa "La especificación de ventana que referencia a otra '%s' no puede contener una lista de partición" ER_ORDER_LIST_IN_REFERENCING_WINDOW_SPEC chi "引用的窗口规范'%s'已包含次序列表" eng "Referenced window specification '%s' already contains order list" spa "La especificación de ventana referenciada '%s' ya contiene lista de orden" ER_WINDOW_FRAME_IN_REFERENCED_WINDOW_SPEC chi "引用的窗口规范'%s'不能包含窗口框架" eng "Referenced window specification '%s' cannot contain window frame" spa "La especificación referenciada de ventana '%s' no puede contener marco de ventana" ER_BAD_COMBINATION_OF_WINDOW_FRAME_BOUND_SPECS chi "窗框绑定规格的不可接受的组合" eng "Unacceptable combination of window frame bound specifications" spa "Combinación inaceptable de especificaciones ligadas a marco de ventana" ER_WRONG_PLACEMENT_OF_WINDOW_FUNCTION chi "窗口函数仅在SELECT列表和ORDER BY子句中允许" eng "Window function is allowed only in SELECT list and ORDER BY clause" spa "La función de ventana sólo se permite en lista SELECT y en cláusula ORDER BY" ER_WINDOW_FUNCTION_IN_WINDOW_SPEC chi "窗口规范中不允许窗口功能" eng "Window function is not allowed in window specification" spa "La función de ventana no está permitida en especificación de ventana" ER_NOT_ALLOWED_WINDOW_FRAME chi "窗框不允许使用'%s'" eng "Window frame is not allowed with '%s'" spa "El marco de ventana no está permitido con '%s'" ER_NO_ORDER_LIST_IN_WINDOW_SPEC chi "在“%s”的窗口规范中没有订单列表" eng "No order list in window specification for '%s'" spa "No exite lista de orden en especificación de ventana para '%s'" ER_RANGE_FRAME_NEEDS_SIMPLE_ORDERBY chi "范围型框架需要单个排序键订购逐个条款" eng "RANGE-type frame requires ORDER BY clause with single sort key" spa "El marco tipo-RANGE requiere de la cláusula ORDER BY con clave única de clasificación" ER_WRONG_TYPE_FOR_ROWS_FRAME chi "行类型框架需要整数" eng "Integer is required for ROWS-type frame" spa "Se requiere de un entero para marco tipo-ROWS" ER_WRONG_TYPE_FOR_RANGE_FRAME chi "范围类型框架需要数字数据类型" eng "Numeric datatype is required for RANGE-type frame" spa "Se requiere de tipo de dato numérico para marco tipo-RANGE" ER_FRAME_EXCLUSION_NOT_SUPPORTED chi "帧排除尚不支持" eng "Frame exclusion is not supported yet" spa "No se seporta aún la exclusión del marco" ER_WINDOW_FUNCTION_DONT_HAVE_FRAME chi "此窗口功能可能没有窗口框架" eng "This window function may not have a window frame" spa "Esta función de ventana puede no tener un marco de ventana" ER_INVALID_NTILE_ARGUMENT chi "NTILE的参数必须大于0" eng "Argument of NTILE must be greater than 0" spa "El argumento de NTILE debe de ser mayor de 0" ER_CONSTRAINT_FAILED 23000 chi "CONSTRAINT %`s失败的%`-.192s。%`-.192s" eng "CONSTRAINT %`s failed for %`-.192s.%`-.192s" ger "CONSTRAINT %`s fehlgeschlagen: %`-.192s.%`-.192s" rus "проверка CONSTRAINT %`s для %`-.192s.%`-.192s провалилась" spa "No se cumple la RESTRICCIÓN %`s para %`-.192s.%`-.192s" ukr "Перевірка CONSTRAINT %`s для %`-.192s.%`-.192s не пройшла" ER_EXPRESSION_IS_TOO_BIG chi "%s条款中的表达太大了" eng "Expression in the %s clause is too big" spa "La expresión en la cláusula %s es demasiado grande" ER_ERROR_EVALUATING_EXPRESSION chi "获得了一个错误评估存储的表达式%s" eng "Got an error evaluating stored expression %s" spa "Obtenido error evaluando expresión almacenada %s" ER_CALCULATING_DEFAULT_VALUE chi "计算默认值为%`s时出错" eng "Got an error when calculating default value for %`s" spa "Obtenido un error al calcular valor por defecto para %`s" ER_EXPRESSION_REFERS_TO_UNINIT_FIELD 01000 chi "字段%`-.64s的表达指的是未初始化的字段%`s" eng "Expression for field %`-.64s is referring to uninitialized field %`s" spa "La expresión para campo %`-.64s se refiere a un campo sin inicializar %`s" ER_PARTITION_DEFAULT_ERROR chi "只允许一个默认分区" eng "Only one DEFAULT partition allowed" spa "Sólo se permite una partición DEFAULT" ukr "Припустимо мати тільки один DEFAULT розділ" ER_REFERENCED_TRG_DOES_NOT_EXIST chi "给定动作时间和事件类型的引用触发'%s'不存在" eng "Referenced trigger '%s' for the given action time and event type does not exist" spa "No existe disparador referenciado '%s' para el momento dado de acción y para el tipo de evento" ER_INVALID_DEFAULT_PARAM chi "此类参数使用不支持默认/忽略值" eng "Default/ignore value is not supported for such parameter usage" spa "El valor por defecto/ignorado no está soportado para tal utilización de parámetro" ukr "Значення за замовчуванням або ігнороване значення не підтримано для цього випадку використання параьетра" ER_BINLOG_NON_SUPPORTED_BULK chi "仅支持基于行的复制,支持批量操作" eng "Only row based replication supported for bulk operations" spa "Sólo la réplica basada en fila es soportada para operaciones enormes" ER_BINLOG_UNCOMPRESS_ERROR chi "解压压缩的binlog失败" eng "Uncompress the compressed binlog failed" spa "Ha fallado la descompresión del binlog comprimido" ER_JSON_BAD_CHR chi "坏JSON,参数%d 函数'%s' 位置%d" eng "Broken JSON string in argument %d to function '%s' at position %d" spa "Cadena JSON rota en argumento %d para función '%s' en posición %d" ER_JSON_NOT_JSON_CHR chi "变量%d出现禁止字符,函数'%s'在%d处" eng "Character disallowed in JSON in argument %d to function '%s' at position %d" spa "Carácter no permitido en JSON en argumento %d para función '%s' en la posición %d" ER_JSON_EOS chi "JSON文本中的意外结尾,参数%d 函数'%s'" eng "Unexpected end of JSON text in argument %d to function '%s'" spa "Fin inesperado de texto JSON en argumento %d a función '%s'" ER_JSON_SYNTAX chi "JSON文本语法错误 参数%d 函数'%s' 位置%d" eng "Syntax error in JSON text in argument %d to function '%s' at position %d" spa "Error de sintaxis en texto JSON en argumento %d a función '%s' en la posición %d" ER_JSON_ESCAPING chi "JSON文本中逸出不正确 参数%d 函数'%s' 位置%d" eng "Incorrect escaping in JSON text in argument %d to function '%s' at position %d" spa "Incorrecta escapatoria en texto JSON en argumento %d a función '%s' en la posicón %d" ER_JSON_DEPTH chi "超过JSON嵌套深度的%d限制 参数%d 函数'%s' 位置%d的" eng "Limit of %d on JSON nested structures depth is reached in argument %d to function '%s' at position %d" spa "El límite de %d en profundidad de estructuras JSON anidadas se ha alcanzado en argumento %d a función '%s' en la posición %d" ER_JSON_PATH_EOS chi "JSON文本路径错误 参数%d 函数'%s'" eng "Unexpected end of JSON path in argument %d to function '%s'" spa "Fin inesperado de ruta JSON en argumento %d a función '%s'" ER_JSON_PATH_SYNTAX chi "JSON路径语法错误 参数%d 函数'%s' 位置%d" eng "Syntax error in JSON path in argument %d to function '%s' at position %d" spa "Error de sintaxis en ruta JSON en argumento %d a función '%s' en la posición %d" ER_JSON_PATH_DEPTH chi "JSON路径深度上限达到:%d 参数%d 函数'%s' 位置%d" eng "Limit of %d on JSON path depth is reached in argument %d to function '%s' at position %d" spa "El límite de %d en profundidad de ruta JSON se ha alcanzado en argumento %d a función '%s' en la posición %d" ER_JSON_PATH_NO_WILDCARD chi "JSON路径中的通配符不允许 参数%d 函数'%s'" eng "Wildcards in JSON path not allowed in argument %d to function '%s'" spa "Comodines en ruta JSON no permitidos en argumento %d a función '%s'" ER_JSON_PATH_ARRAY chi "JSON路径应当以排列为终 参数%d 函数'%s'" eng "JSON path should end with an array identifier in argument %d to function '%s'" spa "La ruta JSON debería de terminar con identificador de arreglo en argumento %d a función '%s'" ER_JSON_ONE_OR_ALL chi "函数'%s'的第二个参数必须是'一个'或'全部'" eng "Argument 2 to function '%s' must be "one" or "all"." spa "El argumento 2 a función '%s' debe de ser "one" o "all"." ER_UNSUPPORTED_COMPRESSED_TABLE chi "CREATE TEMPORARY TABLE 不允许用ROW_FORMAT=COMPRESSED或KEY_BLOCK_SIZE" eng "InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE." spa "InnoDB rechaza grabar en tablas con ROW_FORMAT=COMPRESSED o KEY_BLOCK_SIZE." ER_GEOJSON_INCORRECT chi "为st_geomfromgeojson函数指定了不正确的GeoJSON格式。" eng "Incorrect GeoJSON format specified for st_geomfromgeojson function." spa "Especficado formato GeoJSON incorrecto para función st_geomfromgeojson." ER_GEOJSON_TOO_FEW_POINTS chi "Geojson格式不正确 - Linestring指定的太少点。" eng "Incorrect GeoJSON format - too few points for linestring specified." spa "Formato GeoJSON incorrecto - demasiados pocos puntos especificados para linestring." ER_GEOJSON_NOT_CLOSED chi "Geojson格式不正确 - 多边形未关闭。" eng "Incorrect GeoJSON format - polygon not closed." spa "Formato GeoJSON incorrect - polígono no cerrado." ER_JSON_PATH_EMPTY chi "path表达式'$'不允许在参数%d中允许运行'%s'。" eng "Path expression '$' is not allowed in argument %d to function '%s'." spa "La expresión de ruta '$' no está permitida en argumento %d a función '%s'." ER_SLAVE_SAME_ID chi "与此从站相同的server_uuId / server_id的从站已连接到主设备" eng "A slave with the same server_uuid/server_id as this slave has connected to the master" spa "Un esclavo con el mismo server_uuid/server_id que este esclavo se ha conectado al maestro (master)" ER_FLASHBACK_NOT_SUPPORTED chi "闪回不支持%s%s" eng "Flashback does not support %s %s" spa "Retrospectiva no soporta %s %s" # # MyRocks error messages # ER_KEYS_OUT_OF_ORDER chi "钥匙在散装负载期间出现订单" eng "Keys are out order during bulk load" spa "Claves desordenadas durante carga enorme" ER_OVERLAPPING_KEYS chi "批量负载行重叠现有行" eng "Bulk load rows overlap existing rows" spa "La carga enorme de filas se superpone con filas existentes" ER_REQUIRE_ROW_BINLOG_FORMAT chi "binlog_format != ROW时无法在master上执行更新" eng "Can't execute updates on master with binlog_format != ROW." spa "No puedo ejecutar actualizaciones en maestro (master) con binlog_format != ROW." ER_ISOLATION_MODE_NOT_SUPPORTED chi "MyRocks仅支持读取承诺和可重复读取隔离级别。请从当前隔离级别的%s改变" eng "MyRocks supports only READ COMMITTED and REPEATABLE READ isolation levels. Please change from current isolation level %s" spa "MyRocks soporta sólo niveles de aislamiento READ COMMITTED y REPEATABLE READ. Por favor, cambie desde nivel de aislamiento actual %s" ER_ON_DUPLICATE_DISABLED chi "当在MyRocks禁用唯一检查时,INSERT,UPDATE, LOAD,使用Clauses更新或替换索引的子句(即,在重复的重复键更新,替换)中,不允许使用。查询:%s" eng "When unique checking is disabled in MyRocks, INSERT,UPDATE,LOAD statements with clauses that update or replace the key (i.e. INSERT ON DUPLICATE KEY UPDATE, REPLACE) are not allowed. Query: %s" spa "Al desactivar chequeo de único en MyRocks, las sentencias INSERT, UPDATE, LOAD con cláusulas que actualizan o reemplazan la clave (p.ej. INSERT ON DUPLICATE KEY UPDATE, REPLACE) no se permiten. Consulte (query): %s" ER_UPDATES_WITH_CONSISTENT_SNAPSHOT chi "START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT时,无法执行更新。" eng "Can't execute updates when you started a transaction with START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT." spa "No puedo ejecutar actualizaciones cuando has iniciado una transacción mediante START TRANSACTION WITH CONSISTENT [ROCKSDB] SNAPSHOT." ER_ROLLBACK_ONLY chi "此交易回滚并无法承诺。只支持支持的操作是滚动,因此将丢弃所有待处理的更改。请重新启动其他事务。" eng "This transaction was rolled back and cannot be committed. Only supported operation is to roll it back, so all pending changes will be discarded. Please restart another transaction." spa "Esta transacción se ha retrocedido (rolled back) y no puede ser acometida (commit). La única operación soportada es retroceder (roll back), de tal forma que se descartarán todos los cambios pendientes. Por favor, rearranque otra transacción." ER_ROLLBACK_TO_SAVEPOINT chi "如果修改行,MyRocks目前不支持保存点的回滚。" eng "MyRocks currently does not support ROLLBACK TO SAVEPOINT if modifying rows." spa "MyRocks en este momento no soporta ROLLBACK TO SAVEPOINT si se están modificando filas." ER_ISOLATION_LEVEL_WITH_CONSISTENT_SNAPSHOT chi "在RockSDB存储引擎中,START TRANSACTION WITH CONSISTENT SNAPSHOT 只支持REPEATABLE READ隔离" eng "Only REPEATABLE READ isolation level is supported for START TRANSACTION WITH CONSISTENT SNAPSHOT in RocksDB Storage Engine." spa "Sólo el nivel de aislamiento REPEATABLE READ se soporta para START TRANSACTION WITH CONSISTENT SNAPSHOT en Motor de Almacenaje RocksDB." ER_UNSUPPORTED_COLLATION chi "字符串索引列%s的不受支持的归类。%s使用二进制校构(%s)。" eng "Unsupported collation on string indexed column %s.%s Use binary collation (%s)." spa "Cotejo (collation) no soportado en columna indizada de cadena %s.%s Use cotejo binario (%s)." ER_METADATA_INCONSISTENCY chi "表'%s'不存在,但MyRocks内存存在元数据信息。这是数据不一致的标志。请检查是否存在'%s.frm',并尝试恢复如果它不存在。" eng "Table '%s' does not exist, but metadata information exists inside MyRocks. This is a sign of data inconsistency. Please check if '%s.frm' exists, and try to restore it if it does not exist." spa "La tabla '%s' no existe, pero existe información de metadatos dentro de MyRocks. Esto es una señal de datos inconsistentes. Por favor, revise si existe '%s.frm' e intente restaurarla si no existe." ER_CF_DIFFERENT chi "列族('%s')标志(%d)与现有标志(%d)不同。分配新的CF标志,或者不要更改现有的CF标志。" eng "Column family ('%s') flag (%d) is different from an existing flag (%d). Assign a new CF flag, or do not change existing CF flag." spa "La familia de columna ('%s') bandera (%d) es diferente de una bandera existente (%d). Asigne una nueva bandera CF o no cambie la bandera CF." ER_RDB_TTL_DURATION_FORMAT chi "Myrocks中的TTL持续时间(%s)必须是无符号非空64位整数。" eng "TTL duration (%s) in MyRocks must be an unsigned non-null 64-bit integer." spa "La duración de TTL (%s) en MyRocks debe de ser un entero sin signo no-null de 64-bit." ER_RDB_STATUS_GENERAL chi "状态误差%d从RockSDB收到:%s" eng "Status error %d received from RocksDB: %s" spa "Recibido error de estado %d desde RocksDB: %s" ER_RDB_STATUS_MSG chi "%s,状态误差%d从rocksdb收到:%s" eng "%s, Status error %d received from RocksDB: %s" spa "%s, Recibido error de estado %d desde RocksDB: %s" ER_RDB_TTL_UNSUPPORTED chi "当表有隐藏的PK时,目前禁用TTL支持。" eng "TTL support is currently disabled when table has a hidden PK." spa "El soporte TTL está desactivado en este momento cuando la tabla tiene una PK oculta." ER_RDB_TTL_COL_FORMAT chi "Myrocks中的TTL列(%s)必须是一个无符号的非空64位整数,存在于表内,并具有伴随的TTL持续时间。" eng "TTL column (%s) in MyRocks must be an unsigned non-null 64-bit integer, exist inside the table, and have an accompanying ttl duration." spa "La columna TTL (%s) en MyRocks debe de ser un entero sin signo no-null de 64-bit, debe de existir dentro de la tabla y debe de tener una duración ttl acompañante." ER_PER_INDEX_CF_DEPRECATED chi "已弃用每个索引列族选项" eng "The per-index column family option has been deprecated" spa "La opcion de familia de columna por-índice está obsoleta" ER_KEY_CREATE_DURING_ALTER chi "MyRocks在Alter期间创建新的索引定义失败。" eng "MyRocks failed creating new key definitions during alter." spa "MyRocks no pudo crear nuevas definiciones de clave durante 'alter'." ER_SK_POPULATE_DURING_ALTER chi "MyRocks在Alter期间失败填充次要索引。" eng "MyRocks failed populating secondary key during alter." spa "MyRocks falló al poblar clave secundaria duante el 'alter'." # MyRocks messages end ER_SUM_FUNC_WITH_WINDOW_FUNC_AS_ARG chi "窗口函数不能用作组函数的参数。" eng "Window functions can not be used as arguments to group functions." spa "Las funciones de ventana no se pueden usar como argumentos para agrupar funciones." ER_NET_OK_PACKET_TOO_LARGE chi "好的包太大了" eng "OK packet too large" spa "Paquete OK demasiado grande" ER_GEOJSON_EMPTY_COORDINATES chi "Geojson格式不正确 - 空的'coordinates'阵列。" eng "Incorrect GeoJSON format - empty 'coordinates' array." spa "Formato GeoJSON incorrecto - arreglo vacío de coordenadas." ER_MYROCKS_CANT_NOPAD_COLLATION chi "MyRocks目前不支持与“No Pad \”属性的归类。" eng "MyRocks doesn't currently support collations with \"No pad\" attribute." spa "MyRocks no soporta en la actualidad cotejos con atributo \"No pad\"." ER_ILLEGAL_PARAMETER_DATA_TYPES2_FOR_OPERATION chi "非法参数数据类型%s和%s为操作'%s'" eng "Illegal parameter data types %s and %s for operation '%s'" spa "Tipos de datos de parámetro ilegales %s y %s para operación '%s'" ER_ILLEGAL_PARAMETER_DATA_TYPE_FOR_OPERATION chi "非法参数数据类型%s用于操作'%s'" eng "Illegal parameter data type %s for operation '%s'" spa "Tipo de dato %s de parámetro ilegal para operación '%s'" ER_WRONG_PARAMCOUNT_TO_CURSOR 42000 chi "对Cursor的参数计数不正确'%-.192s'" eng "Incorrect parameter count to cursor '%-.192s'" spa "Contador incorrecto de parámetro para cursor '%-.192s'" rus "Некорректное количество параметров для курсора '%-.192s'" ER_UNKNOWN_STRUCTURED_VARIABLE chi "未知的结构系统变量或行程变量'%-.*s'" eng "Unknown structured system variable or ROW routine variable '%-.*s'" spa "Variable de sistema con estructura desconocida o variable de rutina ROW '%-.*s'" ER_ROW_VARIABLE_DOES_NOT_HAVE_FIELD chi "行变量'%-.192s'没有字段'%-.192s'" eng "Row variable '%-.192s' does not have a field '%-.192s'" spa "La variable de fila '%-.192s' no tiene un campo '%-.192s'" ER_END_IDENTIFIER_DOES_NOT_MATCH chi "结束标识符'%-.192s'不匹配'%-.192s'" eng "END identifier '%-.192s' does not match '%-.192s'" spa "Identificador END '%-.192s' no coincide con '%-.192s'" ER_SEQUENCE_RUN_OUT chi "序列'%-.64s。%-.64s'已经用完了" eng "Sequence '%-.64s.%-.64s' has run out" spa "La secuencia '%-.64s.%-.64s' se ha agotado" ER_SEQUENCE_INVALID_DATA chi "序列'%-.64s。%-.64s的值冲突" eng "Sequence '%-.64s.%-.64s' has out of range value for options" spa "La secuencia '%-.64s.%-.64s' tiene un valor fuera de rango para las opciones" ER_SEQUENCE_INVALID_TABLE_STRUCTURE chi "序列'%-.64s。%-.64s'表结构无效(%s)" eng "Sequence '%-.64s.%-.64s' table structure is invalid (%s)" spa "La estuctura de tabla de secuencia '%-.64s.%-.64s' es inválida (%s)" ER_SEQUENCE_ACCESS_ERROR chi "序列'%-.64s。%-.64s的访问错误" eng "Sequence '%-.64s.%-.64s' access error" spa "Error en acceso a secuencia '%-.64s.%-.64s'" ER_SEQUENCE_BINLOG_FORMAT eng "Sequences requires binlog_format mixed or row" spa "Las secuencias requieren binlog_format mixto o fila" ER_NOT_SEQUENCE 42S02 chi "'%-.64s。%-.64s'不是序列" eng "'%-.64s.%-.64s' is not a SEQUENCE" spa "'%-.64s.%-.64s' no es una SECUENCIA" ER_NOT_SEQUENCE2 42S02 chi "'%-.192s'不是序列" eng "'%-.192s' is not a SEQUENCE" spa "'%-.192s' no es una SECUENCIA" ER_UNKNOWN_SEQUENCES 42S02 chi "未知序列:'%-.300s'" eng "Unknown SEQUENCE: '%-.300s'" spa "SECUENCIA desconocida: '%-.300s'" ER_UNKNOWN_VIEW 42S02 chi "未知视图:'%-.300s'" eng "Unknown VIEW: '%-.300s'" spa "VISTA desconocida: '%-.300s'" ER_WRONG_INSERT_INTO_SEQUENCE chi "错误插入序列。人们只能将单表插入到序列对象(与mariadb-dump)中进行。如果要更改序列,请使用更改序列。" eng "Wrong INSERT into a SEQUENCE. One can only do single table INSERT into a sequence object (like with mariadb-dump). If you want to change the SEQUENCE, use ALTER SEQUENCE instead." spa "INSERT equivocado dentro de SEQUENCE. Uno sólo puede hacer INSERT único en tabla dentro de un objeto de secuencia (como con volcado-mariadb). Si desea cambiar la SECUENCIA, use ALTER SEQUENCE en su lugar." ER_SP_STACK_TRACE chi "在%u中以%s" eng "At line %u in %s" spa "En la línea %u en %s" ER_PACKAGE_ROUTINE_IN_SPEC_NOT_DEFINED_IN_BODY chi "在包规范中声明子程序'%-.192s',但未在包主体中定义" eng "Subroutine '%-.192s' is declared in the package specification but is not defined in the package body" spa "La subrutina '%-.192s' está declarada en la especificación del paquete pero no está definida en el cuerpo del paquete" ER_PACKAGE_ROUTINE_FORWARD_DECLARATION_NOT_DEFINED chi "子程序'%-.192s'具有前向声明但未定义" eng "Subroutine '%-.192s' has a forward declaration but is not defined" spa "La subrutina '%-.192s' tiene una declaración adelantada pero no está definida" ER_COMPRESSED_COLUMN_USED_AS_KEY chi "压缩列'%-.192s'不能用于索引规范" eng "Compressed column '%-.192s' can't be used in key specification" spa "Una columna comprimida '%-.192s' no se puede usar en especificación de clave" ER_UNKNOWN_COMPRESSION_METHOD chi "未知压缩方法:%s" eng "Unknown compression method: %s" spa "Método de compresión desconocido: %s" ER_WRONG_NUMBER_OF_VALUES_IN_TVC chi "使用的表值构造函数具有不同数量的值" eng "The used table value constructor has a different number of values" spa "El constructor del valor de tabla usado tiene un número diferente de valores" ER_FIELD_REFERENCE_IN_TVC chi "字段参考'%-.192s'不能用于表值构造函数" eng "Field reference '%-.192s' can't be used in table value constructor" spa "La referencia a campo '%-.192s' no se puede usar en constructor de valor de tabla" ER_WRONG_TYPE_FOR_PERCENTILE_FUNC chi "%s函数需要数字数据类型" eng "Numeric datatype is required for %s function" spa "Se requiere de tipo de dato numérico para función %s" ER_ARGUMENT_NOT_CONSTANT chi "%s函数的参数不是分区的常量" eng "Argument to the %s function is not a constant for a partition" spa "El argumento de la función %s no es una constante para una partición" ER_ARGUMENT_OUT_OF_RANGE chi "%s函数的参数不属于范围[0,1]" eng "Argument to the %s function does not belong to the range [0,1]" spa "El argumento de la función %s no pertenece al rango [0,1]" ER_WRONG_TYPE_OF_ARGUMENT chi "%s函数仅接受可以转换为数字类型的参数" eng "%s function only accepts arguments that can be converted to numerical types" spa "La función %s sólo acepta argumentos que se puedan convertir a tipos numéricos" ER_NOT_AGGREGATE_FUNCTION chi "在错误的上下文中使用的聚合特定指令(fetch组下一行)" eng "Aggregate specific instruction (FETCH GROUP NEXT ROW) used in a wrong context" spa "Instrucción específica de agregación (FETCH GROUP NEXT ROW) usada en contexto equivocado" ER_INVALID_AGGREGATE_FUNCTION chi "聚合函数丢失的聚合特定指令(fetch组下一行)" eng "Aggregate specific instruction(FETCH GROUP NEXT ROW) missing from the aggregate function" spa "Falta instrucción específica de agregación (FETCH GROUP NEXT ROW) de la función de agregación" ER_INVALID_VALUE_TO_LIMIT chi "限制仅接受整数值" eng "Limit only accepts integer values" spa "El límite sólo acepta valores enteros" ER_INVISIBLE_NOT_NULL_WITHOUT_DEFAULT chi "隐形列%`s必须具有默认值" eng "Invisible column %`s must have a default value" spa "Una columna invisible %`s debe de tener valor por defecto" # MariaDB error numbers related to System Versioning ER_UPDATE_INFO_WITH_SYSTEM_VERSIONING chi "匹配的行:%ld已更改:%ld插入:%ld警告:%ld" eng "Rows matched: %ld Changed: %ld Inserted: %ld Warnings: %ld" spa "Filas coincidentes: %ld Cambiadas: %ld Insertadas: %ld Avisos: %ld" ER_VERS_FIELD_WRONG_TYPE chi "%`s必须为系统版本为表%s的类型%`s" eng "%`s must be of type %s for system-versioned table %`s" spa "%`s debe de ser del tipo %s para tabla versionada del sistema %`s" ER_VERS_ENGINE_UNSUPPORTED chi "Transaction-Precise系统版本控制%`s不受支持" eng "Transaction-precise system versioning for %`s is not supported" spa "No se soporta versionado de sistema de transacción precisa para %`s" ER_UNUSED_23 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_PARTITION_WRONG_TYPE chi "错误的分区类型,预期类型:%`s" eng "Wrong partitioning type, expected type: %`s" spa "Tipo de partición equivocada, tipo esperado: %`s" WARN_VERS_PART_FULL chi "版本化表%`s.%`s:partition%`s已满,添加更多历史分区(out of %s)" eng "Versioned table %`s.%`s: last HISTORY partition (%`s) is out of %s, need more HISTORY partitions" spa "Tabla versionada %`s.%`s: última partición HISTORY (%`s) fuera de %s, necesita de más particiones HISTORY" WARN_VERS_PARAMETERS chi "也许缺少参数:%s" eng "Maybe missing parameters: %s" spa "Parámetros que quizás faltan: %s" ER_VERS_DROP_PARTITION_INTERVAL chi "只能在旋转间隔时丢弃最旧的分区" eng "Can only drop oldest partitions when rotating by INTERVAL" spa "Sólo se pueden eliminar viejas particiones al rotar mediante INTERVAL" ER_UNUSED_25 eng "You should never see it" spa "Nunca debería vd de ver esto" WARN_VERS_PART_NON_HISTORICAL chi "分区%`s包含非历史数据" eng "Partition %`s contains non-historical data" spa "La partición %`s contiene datos no históricos" ER_VERS_ALTER_NOT_ALLOWED chi "系统版本为%`s.%`s不允许。更改@@system_versioning_alter_history用ALTER。" eng "Not allowed for system-versioned %`s.%`s. Change @@system_versioning_alter_history to proceed with ALTER." spa "No permitido para versionado del sistema %`s.%`s. Cambie @@system_versioning_alter_history para proceder con ALTER." ER_VERS_ALTER_ENGINE_PROHIBITED chi "不允许系统版本为%`s.%`s。不支持更改返回/来自本机系统版本传输引擎。" eng "Not allowed for system-versioned %`s.%`s. Change to/from native system versioning engine is not supported." spa "No permitido para versionado del sistema %`s.%`s. Cambio a/desde motor de versionado nativo no soportado." ER_VERS_RANGE_PROHIBITED chi "不允许使用SYSTEM_TIME范围选择器" eng "SYSTEM_TIME range selector is not allowed" spa "Selector de rango SYSTEM_TIME no permitido" ER_CONFLICTING_FOR_SYSTEM_TIME chi "与递归的System_time子句相冲突" eng "Conflicting FOR SYSTEM_TIME clauses in WITH RECURSIVE" spa "Cláusulas conflictivas FOR SYSTEM_TIME en WITH RECURSIVE" ER_VERS_TABLE_MUST_HAVE_COLUMNS chi "表%`s必须至少有一个版本后的列" eng "Table %`s must have at least one versioned column" spa "La tabla %`s debe de tener al menos una columna versionada" ER_VERS_NOT_VERSIONED chi "表%`s不是系统版本的" eng "Table %`s is not system-versioned" spa "La tabla %`s no es versionada del sistema" ER_MISSING chi "%`s的错误参数:缺少'%s'" eng "Wrong parameters for %`s: missing '%s'" spa "Parámetros equivocados para %`s: falta '%s'" ER_VERS_PERIOD_COLUMNS chi "system_time的时期必须使用列%`s和%`s" eng "PERIOD FOR SYSTEM_TIME must use columns %`s and %`s" spa "PERIOD FOR SYSTEM_TIME debe de usar columnas %`s y %`s" ER_PART_WRONG_VALUE chi "用于分区%`s的错误参数:'%s'的错误值" eng "Wrong parameters for partitioned %`s: wrong value for '%s'" spa "Parámetros equivocados para particionado %`s: valor equivocado para '%s'" ER_VERS_WRONG_PARTS chi "%`s的错误分区:必须至少有一个HISTORY,只能有一个CURRENT" eng "Wrong partitions for %`s: must have at least one HISTORY and exactly one last CURRENT" spa "Particiones equivocadas para %`s: debe de tener al menos una HISTORY y exactamente un último CURRENT" ER_VERS_NO_TRX_ID chi "TRX_ID%llu在`mysql.transaction_registry`中找不到" eng "TRX_ID %llu not found in `mysql.transaction_registry`" spa "TRX_ID %llu no hallado en `mysql.transaction_registry`" ER_VERS_ALTER_SYSTEM_FIELD chi "无法更改系统版本配置字段%`s" eng "Can not change system versioning field %`s" spa "No puedo cambiar campo de versionado de sistema %`s" ER_DROP_VERSIONING_SYSTEM_TIME_PARTITION chi "无法删除由SYSTEM_TIME分区的表%`s的系统版本" eng "Can not DROP SYSTEM VERSIONING for table %`s partitioned BY SYSTEM_TIME" spa "No puedo DROP SYSTEM VERSIONING para la tabla %`s particionada BY SYSTEM_TIME" ER_VERS_DB_NOT_SUPPORTED chi "不支持%`s数据库中的系统版本化表" eng "System-versioned tables in the %`s database are not supported" spa "No se soportan las tablas versionadas del sistema en la base de datos %`s" ER_VERS_TRT_IS_DISABLED chi "事务注册表已禁用" eng "Transaction registry is disabled" spa "El registro de transaciones está desactivado" ER_VERS_DUPLICATE_ROW_START_END chi "重复行%s列%`s" eng "Duplicate ROW %s column %`s" spa "Duplicada FILA %s columna %`s" ER_VERS_ALREADY_VERSIONED chi "表%`s已经是系统版本的" eng "Table %`s is already system-versioned" spa "La tabla %`s ya es versionada del sistema" ER_UNUSED_24 eng "You should never see it" spa "Nunca debería vd de ver esto" ER_VERS_NOT_SUPPORTED chi "系统版本的表不支持%s" eng "System-versioned tables do not support %s" spa "Las tablas versionadas del sistema no soportan %s" ER_VERS_TRX_PART_HISTORIC_ROW_NOT_SUPPORTED chi "事务 - 精确的系统 - 版本的表不支持按行开始或行末端分区" eng "Transaction-precise system-versioned tables do not support partitioning by ROW START or ROW END" spa "Las tablas versionadas del sistemas de transacción precisa no soportan particionado mediante ROW START o ROW END" ER_INDEX_FILE_FULL chi "表'%-.192s'的索引文件已满" eng "The index file for table '%-.192s' is full" spa "El fichero/archivo índice para la tabla '%-.192s' está lleno" ER_UPDATED_COLUMN_ONLY_ONCE chi "列%`s.%`s在单个更新语句中不能更换一次" eng "The column %`s.%`s cannot be changed more than once in a single UPDATE statement" spa "La columna %`s.%`s no se pude cambiar más de ua vez en una sentencia UPDATE única" ER_EMPTY_ROW_IN_TVC chi "在此上下文中,表值构造函数不允许在没有元素的行" eng "Row with no elements is not allowed in table value constructor in this context" spa "Fila sin elementos no se permite en constructor de valor de tabla en este contexto" ER_VERS_QUERY_IN_PARTITION chi "表%`s的SYSTEM_TIME分区不支持历史查询" eng "SYSTEM_TIME partitions in table %`s does not support historical query" spa "Las particiones SYSTEM_TIME en la tabla %`s no soportan consulta (query) histórica" ER_KEY_DOESNT_SUPPORT chi "%s索引%`s不支持此操作" eng "%s index %`s does not support this operation" spa "%s índice %`s no soporta esta operación" ER_ALTER_OPERATION_TABLE_OPTIONS_NEED_REBUILD chi "更改表选项需要将要重建的表格重建" eng "Changing table options requires the table to be rebuilt" spa "Cambiar las opciones de tabla requiere que la tabla sea reconstruida" ER_BACKUP_LOCK_IS_ACTIVE chi "由于您在运行BACKUP STAGE,无法执行命令" eng "Can't execute the command as you have a BACKUP STAGE active" spa "No puedo ejecutar el comando cuando vd tiene activo un BACKUP STAGE" ER_BACKUP_NOT_RUNNING chi "您必须启动备份“备份阶段开始”" eng "You must start backup with \"BACKUP STAGE START\"" spa "Vd debe de arracar respaldo mediante \"BACKUP STAGE START\"" ER_BACKUP_WRONG_STAGE chi "备份阶段'%s'相同或在当前备份阶段'%s'之前" eng "Backup stage '%s' is same or before current backup stage '%s'" spa "La fase de respaldo '%s' es la misma o anterior a la fase de respaldo actual '%s'" ER_BACKUP_STAGE_FAILED chi "备份阶段'%s'失败" eng "Backup stage '%s' failed" spa "La fase de respaldo '%s' ha fallado" ER_BACKUP_UNKNOWN_STAGE chi "未知备份阶段:'%s'。阶段应该是START,FLUSH,BLOCK_DDL,BLOCK_COMIT或END之一" eng "Unknown backup stage: '%s'. Stage should be one of START, FLUSH, BLOCK_DDL, BLOCK_COMMIT or END" spa "Fase de respaldo desconocida: '%s'. La fase debería de ser una de START, FLUSH, BLOCK_DDL, BLOCK_COMMIT o END" ER_USER_IS_BLOCKED chi "由于凭证错误太多,用户被阻止;用'ALTER USER / FLUSH PRIVILEGES'解锁" eng "User is blocked because of too many credential errors; unblock with 'ALTER USER / FLUSH PRIVILEGES'" spa "El usuario está bloqueado a causa de demasiados errores de credenciales; desbloquee mediante 'ALTER USER / FLUSH PRIVILEGES'" ER_ACCOUNT_HAS_BEEN_LOCKED chi "访问拒绝,此帐户已锁定" eng "Access denied, this account is locked" rum "Acces refuzat, acest cont este blocat" spa "Acceso denegado, esta cuenta está bloqueada" ER_PERIOD_TEMPORARY_NOT_ALLOWED chi "应用程序时间段表不能临时" eng "Application-time period table cannot be temporary" spa "Una tabla de período de momento-de-aplicación no puede ser temporal" ER_PERIOD_TYPES_MISMATCH chi "%`s的期间的字段有不同的类型" eng "Fields of PERIOD FOR %`s have different types" spa "Los campos de PERIOD FOR %`s tienen tipos diferentes" ER_MORE_THAN_ONE_PERIOD chi "无法指定多个应用程序时间段" eng "Cannot specify more than one application-time period" spa "No se puede especificar más de un período de momento de aplicación" ER_PERIOD_FIELD_WRONG_ATTRIBUTES chi "期间字段%`s不能是%s" eng "Period field %`s cannot be %s" spa "El campo de período %`s no puede ser %s" ER_PERIOD_NOT_FOUND chi "期间%`s未在表中找到" eng "Period %`s is not found in table" spa "El período %`s no se ha hallado en la tabla" ER_PERIOD_COLUMNS_UPDATED chi "列%`s在更新集列表中指定的周期%`s中使用" eng "Column %`s used in period %`s specified in update SET list" spa "La columna %`s usada en período %`s especificado en lista de actualizar SET" ER_PERIOD_CONSTRAINT_DROP chi "无法DROP CONSTRAINT `%s`。使用DROP PERIOD `%s`" eng "Can't DROP CONSTRAINT `%s`. Use DROP PERIOD `%s` for this" spa "No puedo DROP CONSTRAINT `%s`. Use DROP PERIOD `%s` para esto" ER_TOO_LONG_KEYPART 42000 S1009 chi "指定的索引部分太长;最大索引部分长度为 %u 个字节" eng "Specified key part was too long; max key part length is %u bytes" spa "La parte de clave especificada es demasiado larga; el tamaño máximo de la parte de clave es de %u bytes" ER_TOO_LONG_DATABASE_COMMENT eng "Comment for database '%-.64s' is too long (max = %u)" spa "El comentario para la base de datos '%-.64s' es demasiado largo (máx = %u)" ER_UNKNOWN_DATA_TYPE eng "Unknown data type: '%-.64s'" spa "Tipo de datos desconocido: '%-.64s'" ER_UNKNOWN_OPERATOR eng "Operator does not exist: '%-.128s'" spa "El operador no existe: '%-.128s'" ER_WARN_HISTORY_ROW_START_TIME eng "Table `%s.%s` history row start '%s' is later than row end '%s'" spa "En la historia de la tabla `%s.%s` el inicio de fila '%s' es posterior al fin de fila '%s'" ER_PART_STARTS_BEYOND_INTERVAL eng "%`s: STARTS is later than query time, first history partition may exceed INTERVAL value" spa "%`s: STARTS es posterior al momento de consulta (query), la primera partición de historia puede exceder el valor INTERVAL" ER_GALERA_REPLICATION_NOT_SUPPORTED eng "Galera replication not supported" spa "La replicación en Galera no está soportada" ER_LOAD_INFILE_CAPABILITY_DISABLED eng "The used command is not allowed because the MariaDB server or client has disabled the local infile capability" rum "Comanda folosită nu este permisă deoarece clientul sau serverul MariaDB a dezactivat această capabilitate" spa "El comando usado no está permitido porque el servidor MariaDB o el cliente han desactivado la capacidad 'local infile'" ER_NO_SECURE_TRANSPORTS_CONFIGURED eng "No secure transports are configured, unable to set --require_secure_transport=ON" spa "No se han configurado transportes seguros, imposible poner --require_secure_transport=ON" ER_SLAVE_IGNORED_SHARED_TABLE eng "Slave SQL thread ignored the '%s' because table is shared" ger "Slave-SQL-Thread hat die Abfrage '%s' ignoriert" nla "Slave SQL thread negeerde de query '%s'" por "Slave SQL thread ignorado a consulta devido '%s'" spa "Hilo (thread) SQL esclavo ignoró la '%s' porque la tabla está compartida" swe "Slav SQL tråden ignorerade '%s' pga tabellen är delad" ER_NO_AUTOINCREMENT_WITH_UNIQUE eng "AUTO_INCREMENT column %`s cannot be used in the UNIQUE index %`s" spa "La columna %'s con AUTO_INCREMENT no se puede usar en índice UNIQUE %`s" ER_KEY_CONTAINS_PERIOD_FIELDS eng "Key %`s cannot explicitly include column %`s" spa "La clave %`s no puede incluir de forma explícita la columna %`s" ER_KEY_CANT_HAVE_WITHOUT_OVERLAPS eng "Key %`s cannot have WITHOUT OVERLAPS" spa "La clave %`s no puede tener WITHOUT OVERLAPS" ER_NOT_ALLOWED_IN_THIS_CONTEXT eng "'%-.128s' is not allowed in this context" spa "'%-.128s' no está permitido en este contexto" ER_DATA_WAS_COMMITED_UNDER_ROLLBACK eng "Engine %s does not support rollback. Changes were committed during rollback call" spa "El motor %s no soporta retroceso (rollback). Los cambios se acometieron (commit) durante la llamada a retroceso (rollback)" ER_PK_INDEX_CANT_BE_IGNORED eng "A primary key cannot be marked as IGNORE" spa "Una clave primaria no se puede marcar como IGNORE" ER_BINLOG_UNSAFE_SKIP_LOCKED eng "SKIP LOCKED makes this statement unsafe" spa "SKIP LOCKED hace que esta sentencia sea no segura" ER_JSON_TABLE_ERROR_ON_FIELD eng "Field '%s' can't be set for JSON_TABLE '%s'." spa "El campo '%s' no se puede poner para JSON_TABLE '%s'." ER_JSON_TABLE_ALIAS_REQUIRED eng "Every table function must have an alias." spa "Cada función de tabla debe de tener un alias." ER_JSON_TABLE_SCALAR_EXPECTED eng "Can't store an array or an object in the scalar column '%s' of JSON_TABLE '%s'." spa "No puedo guardar un arreglo o un objeto en la columna escalar '%s' de JSON_TABLE '%s'." ER_JSON_TABLE_MULTIPLE_MATCHES eng "Can't store multiple matches of the path in the column '%s' of JSON_TABLE '%s'." spa "No puedo guardar múltiples coincidencias de la ruta en la columna '%s' de JSON_TABLE '%s'." ER_WITH_TIES_NEEDS_ORDER eng "FETCH ... WITH TIES requires ORDER BY clause to be present" spa "FETCH ... WITH TIES requiere que esté presente la cláusula ORDER BY" ER_REMOVED_ORPHAN_TRIGGER eng "Dropped orphan trigger '%-.64s', originally created for table: '%-.192s'" spa "Eliminado disparador huérfano '%-.64s', creado originálmente para la tabla: '%-.192s'" ER_STORAGE_ENGINE_DISABLED eng "Storage engine %s is disabled" spa "El motor de almacenaje %s está desactivado" PKAh[4?M fill_help_tables.sqlnu[ -- Copyright (c) 2003, 2008-2012, Oracle and/or its affiliates. All rights reserved. -- -- This program is free software; you can redistribute it and/or modify -- it under the terms of the GNU General Public License as published by -- the Free Software Foundation; version 2 of the License. -- -- This program is distributed in the hope that it will be useful, -- but WITHOUT ANY WARRANTY; without even the implied warranty of -- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -- GNU General Public License for more details. -- -- You should have received a copy of the GNU General Public License -- along with this program; if not, write to the Free Software -- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -- DO NOT EDIT THIS FILE. It is generated automatically. -- To use this file, load its contents into the mysql database. For example, -- with the mysql client program, process the file like this, where -- file_name is the name of this file: -- mysql -u root -p mysql < file_name set names 'utf8'; set sql_log_bin = 0; use mysql; delete from help_topic; delete from help_category; delete from help_keyword; delete from help_relation; lock tables help_topic write, help_category write, help_keyword write, help_relation write; insert into help_category (help_category_id,name,parent_category_id,url) values (1,'Contents',0,''); insert into help_category (help_category_id,name,parent_category_id,url) values (2,'Polygon Properties',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (3,'WKT',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (4,'Numeric Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (5,'Plugins',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (6,'MBR',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (7,'Control Flow Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (8,'Transactions',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (9,'Help Metadata',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (10,'Account Management',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (11,'Point Properties',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (12,'Encryption Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (13,'LineString Properties',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (14,'Miscellaneous Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (15,'Logical Operators',47,''); insert into help_category (help_category_id,name,parent_category_id,url) values (16,'Functions and Modifiers for Use with GROUP BY',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (17,'Information Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (18,'Assignment Operators',47,''); insert into help_category (help_category_id,name,parent_category_id,url) values (19,'Comparison Operators',47,''); insert into help_category (help_category_id,name,parent_category_id,url) values (20,'Bit Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (21,'Table Maintenance',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (22,'User-Defined Functions',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (23,'Data Types',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (24,'Compound Statements',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (25,'Geometry Constructors',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (26,'Administration',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (27,'Data Manipulation',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (28,'Utility',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (29,'Language Structure',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (30,'Geometry Relations',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (31,'Date and Time Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (32,'WKB',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (33,'Procedures',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (34,'Geographic Features',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (35,'Geometry Properties',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (36,'String Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (37,'Functions',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (38,'Data Definition',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (39,'Sequences',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (40,'JSON Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (41,'Window Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (42,'Spider Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (43,'Dynamic Column Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (44,'Galera Functions',37,''); insert into help_category (help_category_id,name,parent_category_id,url) values (45,'Temporal Tables',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (46,'GeoJSON',34,''); insert into help_category (help_category_id,name,parent_category_id,url) values (47,'Operators',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (48,'Arithmetic Operators',47,''); insert into help_category (help_category_id,name,parent_category_id,url) values (49,'Replication',1,''); insert into help_category (help_category_id,name,parent_category_id,url) values (50,'Prepared Statements',1,''); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (1,9,'HELP_DATE','Help Contents generated from the MariaDB Knowledge Base on 23 January 2023.','',''); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (2,9,'HELP_VERSION','Help Contents generated for MariaDB 10.6 from the MariaDB Knowledge Base on 23 January 2023.','',''); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (3,2,'AREA','A synonym for ST_AREA.\n\nURL: https://mariadb.com/kb/en/polygon-properties-area/','','https://mariadb.com/kb/en/polygon-properties-area/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (4,2,'CENTROID','A synonym for ST_CENTROID.\n\nURL: https://mariadb.com/kb/en/centroid/','','https://mariadb.com/kb/en/centroid/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (5,2,'ExteriorRing','A synonym for ST_ExteriorRing.\n\nURL: https://mariadb.com/kb/en/polygon-properties-exteriorring/','','https://mariadb.com/kb/en/polygon-properties-exteriorring/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (6,2,'InteriorRingN','A synonym for ST_InteriorRingN.\n\nURL: https://mariadb.com/kb/en/polygon-properties-interiorringn/','','https://mariadb.com/kb/en/polygon-properties-interiorringn/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (7,2,'NumInteriorRings','A synonym for ST_NumInteriorRings.\n\nURL: https://mariadb.com/kb/en/polygon-properties-numinteriorrings/','','https://mariadb.com/kb/en/polygon-properties-numinteriorrings/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (8,2,'ST_AREA','Syntax\n------\n\nST_Area(poly)\nArea(poly)\n\nDescription\n-----------\n\nReturns as a double-precision number the area of the Polygon value poly, as\nmeasured in its spatial reference system.\n\nST_Area() and Area() are synonyms.\n\nExamples\n--------\n\nSET @poly = \'Polygon((0 0,0 3,3 0,0 0),(1 1,1 2,2 1,1 1))\';\n\nSELECT Area(GeomFromText(@poly));\n+---------------------------+\n| Area(GeomFromText(@poly)) |\n+---------------------------+\n| 4 |\n+---------------------------+\n\nURL: https://mariadb.com/kb/en/st_area/','','https://mariadb.com/kb/en/st_area/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (9,2,'ST_CENTROID','Syntax\n------\n\nST_Centroid(mpoly)\nCentroid(mpoly)\n\nDescription\n-----------\n\nReturns a point reflecting the mathematical centroid (geometric center) for\nthe MultiPolygon mpoly. The resulting point will not necessarily be on the\nMultiPolygon.\n\nST_Centroid() and Centroid() are synonyms.\n\nExamples\n--------\n\nSET @poly = ST_GeomFromText(\'POLYGON((0 0,20 0,20 20,0 20,0 0))\');\nSELECT ST_AsText(ST_Centroid(@poly)) AS center;\n+--------------+\n| center |\n+--------------+\n| POINT(10 10) |\n+--------------+\n\nURL: https://mariadb.com/kb/en/st_centroid/','','https://mariadb.com/kb/en/st_centroid/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (10,2,'ST_ExteriorRing','Syntax\n------\n\nST_ExteriorRing(poly)\nExteriorRing(poly)\n\nDescription\n-----------\n\nReturns the exterior ring of the Polygon value poly as a LineString.\n\nST_ExteriorRing() and ExteriorRing() are synonyms.\n\nExamples\n--------\n\nSET @poly = \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\n\nSELECT AsText(ExteriorRing(GeomFromText(@poly)));\n+-------------------------------------------+\n| AsText(ExteriorRing(GeomFromText(@poly))) |\n+-------------------------------------------+\n| LINESTRING(0 0,0 3,3 3,3 0,0 0) |\n+-------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_exteriorring/','','https://mariadb.com/kb/en/st_exteriorring/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (11,2,'ST_InteriorRingN','Syntax\n------\n\nST_InteriorRingN(poly,N)\nInteriorRingN(poly,N)\n\nDescription\n-----------\n\nReturns the N-th interior ring for the Polygon value poly as a LineString.\nRings are numbered beginning with 1.\n\nST_InteriorRingN() and InteriorRingN() are synonyms.\n\nExamples\n--------\n\nSET @poly = \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\n\nSELECT AsText(InteriorRingN(GeomFromText(@poly),1));\n+----------------------------------------------+\n| AsText(InteriorRingN(GeomFromText(@poly),1)) |\n+----------------------------------------------+\n| LINESTRING(1 1,1 2,2 2,2 1,1 1) |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_interiorringn/','','https://mariadb.com/kb/en/st_interiorringn/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (12,2,'ST_NumInteriorRings','Syntax\n------\n\nST_NumInteriorRings(poly)\nNumInteriorRings(poly)\n\nDescription\n-----------\n\nReturns an integer containing the number of interior rings in the Polygon\nvalue poly.\n\nNote that according the the OpenGIS standard, a POLYGON should have exactly\none ExteriorRing and all other rings should lie within that ExteriorRing and\nthus be the InteriorRings. Practically, however, some systems, including\nMariaDB\'s, permit polygons to have several \'ExteriorRings\'. In the case of\nthere being multiple, non-overlapping exterior rings ST_NumInteriorRings()\nwill return 1.\n\nST_NumInteriorRings() and NumInteriorRings() are synonyms.\n\nExamples\n--------\n\nSET @poly = \'Polygon((0 0,0 3,3 3,3 0,0 0),(1 1,1 2,2 2,2 1,1 1))\';\n\nSELECT NumInteriorRings(GeomFromText(@poly));\n+---------------------------------------+\n| NumInteriorRings(GeomFromText(@poly)) |\n+---------------------------------------+\n| 1 |\n+---------------------------------------+\n\nNon-overlapping \'polygon\':\n\nSELECT ST_NumInteriorRings(ST_PolyFromText(\'POLYGON((0 0,10 0,10 10,0 10,0 0),\n (-1 -1,-5 -1,-5 -5,-1 -5,-1 -1))\')) AS NumInteriorRings;\n+------------------+\n| NumInteriorRings |\n+------------------+\n| 1 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/st_numinteriorrings/','','https://mariadb.com/kb/en/st_numinteriorrings/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (13,3,'WKT Definition','Description\n-----------\n\nThe Well-Known Text (WKT) representation of Geometry is designed to exchange\ngeometry data in ASCII form. Examples of the basic geometry types include:\n\n+-----------------------------------------------------------------------------+\n| Geometry Types |\n+-----------------------------------------------------------------------------+\n| POINT |\n+-----------------------------------------------------------------------------+\n| LINESTRING |\n+-----------------------------------------------------------------------------+\n| POLYGON |\n+-----------------------------------------------------------------------------+\n| MULTIPOINT |\n+-----------------------------------------------------------------------------+\n| MULTILINESTRING |\n+-----------------------------------------------------------------------------+\n| MULTIPOLYGON |\n+-----------------------------------------------------------------------------+\n| GEOMETRYCOLLECTION |\n+-----------------------------------------------------------------------------+\n| GEOMETRY |\n+-----------------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/wkt-definition/','','https://mariadb.com/kb/en/wkt-definition/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (14,3,'AsText','A synonym for ST_AsText().\n\nURL: https://mariadb.com/kb/en/wkt-astext/','','https://mariadb.com/kb/en/wkt-astext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (15,3,'AsWKT','A synonym for ST_AsText().\n\nURL: https://mariadb.com/kb/en/wkt-aswkt/','','https://mariadb.com/kb/en/wkt-aswkt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (16,3,'GeomCollFromText','A synonym for ST_GeomCollFromText.\n\nURL: https://mariadb.com/kb/en/wkt-geomcollfromtext/','','https://mariadb.com/kb/en/wkt-geomcollfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (17,3,'GeometryCollectionFromText','A synonym for ST_GeomCollFromText.\n\nURL: https://mariadb.com/kb/en/geometrycollectionfromtext/','','https://mariadb.com/kb/en/geometrycollectionfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (18,3,'GeometryFromText','A synonym for ST_GeomFromText.\n\nURL: https://mariadb.com/kb/en/geometryfromtext/','','https://mariadb.com/kb/en/geometryfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (19,3,'GeomFromText','A synonym for ST_GeomFromText.\n\nURL: https://mariadb.com/kb/en/wkt-geomfromtext/','','https://mariadb.com/kb/en/wkt-geomfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (20,3,'LineFromText','A synonym for ST_LineFromText.\n\nURL: https://mariadb.com/kb/en/wkt-linefromtext/','','https://mariadb.com/kb/en/wkt-linefromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (21,3,'LineStringFromText','A synonym for ST_LineFromText.\n\nURL: https://mariadb.com/kb/en/linestringfromtext/','','https://mariadb.com/kb/en/linestringfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (22,3,'MLineFromText','Syntax\n------\n\nMLineFromText(wkt[,srid])\nMultiLineStringFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a MULTILINESTRING value using its WKT representation and SRID.\n\nMLineFromText() and MultiLineStringFromText() are synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_multi_line (g MULTILINESTRING);\nSHOW FIELDS FROM gis_multi_line;\nINSERT INTO gis_multi_line VALUES\n (MultiLineStringFromText(\'MULTILINESTRING((10 48,10 21,10 0),(16 0,16\n23,16 48))\')),\n (MLineFromText(\'MULTILINESTRING((10 48,10 21,10 0))\')),\n (MLineFromWKB(AsWKB(MultiLineString(\n LineString(Point(1, 2), Point(3, 5)),\n LineString(Point(2, 5), Point(5, 8), Point(21, 7))))));\n\nURL: https://mariadb.com/kb/en/mlinefromtext/','','https://mariadb.com/kb/en/mlinefromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (23,3,'MPointFromText','Syntax\n------\n\nMPointFromText(wkt[,srid])\nMultiPointFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOINT value using its WKT representation and SRID.\n\nMPointFromText() and MultiPointFromText() are synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_multi_point (g MULTIPOINT);\nSHOW FIELDS FROM gis_multi_point;\nINSERT INTO gis_multi_point VALUES\n (MultiPointFromText(\'MULTIPOINT(0 0,10 10,10 20,20 20)\')),\n (MPointFromText(\'MULTIPOINT(1 1,11 11,11 21,21 21)\')),\n (MPointFromWKB(AsWKB(MultiPoint(Point(3, 6), Point(4, 10)))));\n\nURL: https://mariadb.com/kb/en/mpointfromtext/','','https://mariadb.com/kb/en/mpointfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (24,3,'MPolyFromText','Syntax\n------\n\nMPolyFromText(wkt[,srid])\nMultiPolygonFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a MULTIPOLYGON value using its WKT representation and SRID.\n\nMPolyFromText() and MultiPolygonFromText() are synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_multi_polygon (g MULTIPOLYGON);\nSHOW FIELDS FROM gis_multi_polygon;\nINSERT INTO gis_multi_polygon VALUES\n (MultiPolygonFromText(\'MULTIPOLYGON(\n ((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromText(\'MULTIPOLYGON(\n ((28 26,28 0,84 0,84 42,28 26),(52 18,66 23,73 9,48 6,52 18)),\n ((59 18,67 18,67 13,59 13,59 18)))\')),\n (MPolyFromWKB(AsWKB(MultiPolygon(Polygon(\n LineString(Point(0, 3), Point(3, 3), Point(3, 0), Point(0, 3)))))));\n\nURL: https://mariadb.com/kb/en/mpolyfromtext/','','https://mariadb.com/kb/en/mpolyfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (25,3,'MultiLineStringFromText','A synonym for MLineFromText.\n\nURL: https://mariadb.com/kb/en/multilinestringfromtext/','','https://mariadb.com/kb/en/multilinestringfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (26,3,'MultiPointFromText','A synonym for MPointFromText.\n\nURL: https://mariadb.com/kb/en/multipointfromtext/','','https://mariadb.com/kb/en/multipointfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (27,3,'MultiPolygonFromText','A synonym for MPolyFromText.\n\nURL: https://mariadb.com/kb/en/multipolygonfromtext/','','https://mariadb.com/kb/en/multipolygonfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (28,3,'PointFromText','A synonym for ST_PointFromText.\n\nURL: https://mariadb.com/kb/en/wkt-pointfromtext/','','https://mariadb.com/kb/en/wkt-pointfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (29,3,'PolyFromText','A synonym for ST_PolyFromText.\n\nURL: https://mariadb.com/kb/en/wkt-polyfromtext/','','https://mariadb.com/kb/en/wkt-polyfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (30,3,'PolygonFromText','A synonym for ST_PolyFromText.\n\nURL: https://mariadb.com/kb/en/polygonfromtext/','','https://mariadb.com/kb/en/polygonfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (31,3,'ST_AsText','Syntax\n------\n\nST_AsText(g)\nAsText(g)\nST_AsWKT(g)\nAsWKT(g)\n\nDescription\n-----------\n\nConverts a value in internal geometry format to its WKT representation and\nreturns the string result.\n\nST_AsText(), AsText(), ST_AsWKT() and AsWKT() are all synonyms.\n\nExamples\n--------\n\nSET @g = \'LineString(1 1,4 4,6 6)\';\n\nSELECT ST_AsText(ST_GeomFromText(@g));\n+--------------------------------+\n| ST_AsText(ST_GeomFromText(@g)) |\n+--------------------------------+\n| LINESTRING(1 1,4 4,6 6) |\n+--------------------------------+\n\nURL: https://mariadb.com/kb/en/st_astext/','','https://mariadb.com/kb/en/st_astext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (32,3,'ST_ASWKT','A synonym for ST_ASTEXT().\n\nURL: https://mariadb.com/kb/en/st_aswkt/','','https://mariadb.com/kb/en/st_aswkt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (33,3,'ST_GeomCollFromText','Syntax\n------\n\nST_GeomCollFromText(wkt[,srid])\nST_GeometryCollectionFromText(wkt[,srid])\nGeomCollFromText(wkt[,srid])\nGeometryCollectionFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a GEOMETRYCOLLECTION value using its WKT representation and SRID.\n\nST_GeomCollFromText(), ST_GeometryCollectionFromText(), GeomCollFromText() and\nGeometryCollectionFromText() are all synonyms.\n\nExample\n-------\n\nCREATE TABLE gis_geometrycollection (g GEOMETRYCOLLECTION);\nSHOW FIELDS FROM gis_geometrycollection;\nINSERT INTO gis_geometrycollection VALUES\n (GeomCollFromText(\'GEOMETRYCOLLECTION(POINT(0 0), LINESTRING(0 0,10\n10))\')),\n (GeometryFromWKB(AsWKB(GeometryCollection(Point(44, 6),\nLineString(Point(3, 6), Point(7, 9)))))),\n (GeomFromText(\'GeometryCollection()\')),\n (GeomFromText(\'GeometryCollection EMPTY\'));\n\nURL: https://mariadb.com/kb/en/st_geomcollfromtext/','','https://mariadb.com/kb/en/st_geomcollfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (34,3,'ST_GeometryCollectionFromText','A synonym for ST_GeomCollFromText.\n\nURL: https://mariadb.com/kb/en/st_geometrycollectionfromtext/','','https://mariadb.com/kb/en/st_geometrycollectionfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (35,3,'ST_GeometryFromText','A synonym for ST_GeomFromText.\n\nURL: https://mariadb.com/kb/en/st_geometryfromtext/','','https://mariadb.com/kb/en/st_geometryfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (36,3,'ST_GeomFromText','Syntax\n------\n\nST_GeomFromText(wkt[,srid])\nST_GeometryFromText(wkt[,srid])\nGeomFromText(wkt[,srid])\nGeometryFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a geometry value of any type using its WKT representation and SRID.\n\nGeomFromText(), GeometryFromText(), ST_GeomFromText() and\nST_GeometryFromText() are all synonyms.\n\nExample\n-------\n\nSET @g = ST_GEOMFROMTEXT(\'POLYGON((1 1,1 5,4 9,6 9,9 3,7 2,1 1))\');\n\nURL: https://mariadb.com/kb/en/st_geomfromtext/','','https://mariadb.com/kb/en/st_geomfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (37,3,'ST_LineFromText','Syntax\n------\n\nST_LineFromText(wkt[,srid])\nST_LineStringFromText(wkt[,srid])\nLineFromText(wkt[,srid])\nLineStringFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a LINESTRING value using its WKT representation and SRID.\n\nST_LineFromText(), ST_LineStringFromText(), ST_LineFromText() and\nST_LineStringFromText() are all synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_line (g LINESTRING);\nSHOW FIELDS FROM gis_line;\nINSERT INTO gis_line VALUES\n (LineFromText(\'LINESTRING(0 0,0 10,10 0)\')),\n (LineStringFromText(\'LINESTRING(10 10,20 10,20 20,10 20,10 10)\')),\n (LineStringFromWKB(AsWKB(LineString(Point(10, 10), Point(40, 10)))));\n\nURL: https://mariadb.com/kb/en/st_linefromtext/','','https://mariadb.com/kb/en/st_linefromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (38,3,'ST_LineStringFromText','A synonym for ST_LineFromText.\n\nURL: https://mariadb.com/kb/en/st_linestringfromtext/','','https://mariadb.com/kb/en/st_linestringfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (39,3,'ST_PointFromText','Syntax\n------\n\nST_PointFromText(wkt[,srid])\nPointFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a POINT value using its WKT representation and SRID.\n\nST_PointFromText() and PointFromText() are synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_point (g POINT);\nSHOW FIELDS FROM gis_point;\nINSERT INTO gis_point VALUES\n (PointFromText(\'POINT(10 10)\')),\n (PointFromText(\'POINT(20 10)\')),\n (PointFromText(\'POINT(20 20)\')),\n (PointFromWKB(AsWKB(PointFromText(\'POINT(10 20)\'))));\n\nURL: https://mariadb.com/kb/en/st_pointfromtext/','','https://mariadb.com/kb/en/st_pointfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (40,3,'ST_PolyFromText','Syntax\n------\n\nST_PolyFromText(wkt[,srid])\nST_PolygonFromText(wkt[,srid])\nPolyFromText(wkt[,srid])\nPolygonFromText(wkt[,srid])\n\nDescription\n-----------\n\nConstructs a POLYGON value using its WKT representation and SRID.\n\nST_PolyFromText(), ST_PolygonFromText(), PolyFromText() and\nST_PolygonFromText() are all synonyms.\n\nExamples\n--------\n\nCREATE TABLE gis_polygon (g POLYGON);\nINSERT INTO gis_polygon VALUES\n (PolygonFromText(\'POLYGON((10 10,20 10,20 20,10 20,10 10))\')),\n (PolyFromText(\'POLYGON((0 0,50 0,50 50,0 50,0 0), (10 10,20 10,20 20,10\n20,10 10))\'));\n\nURL: https://mariadb.com/kb/en/st_polyfromtext/','','https://mariadb.com/kb/en/st_polyfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (41,3,'ST_PolygonFromText','A synonym for ST_PolyFromText.\n\nURL: https://mariadb.com/kb/en/st_polygonfromtext/','','https://mariadb.com/kb/en/st_polygonfromtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (42,4,'DIV','Syntax\n------\n\nDIV\n\nDescription\n-----------\n\nInteger division. Similar to FLOOR(), but is safe with BIGINT values.\nIncorrect results may occur for non-integer operands that exceed BIGINT range.\n\nIf the ERROR_ON_DIVISION_BY_ZERO SQL_MODE is used, a division by zero produces\nan error. Otherwise, it returns NULL.\n\nThe remainder of a division can be obtained using the MOD operator.\n\nExamples\n--------\n\nSELECT 300 DIV 7;\n+-----------+\n| 300 DIV 7 |\n+-----------+\n| 42 |\n+-----------+\n\nSELECT 300 DIV 0;\n+-----------+\n| 300 DIV 0 |\n+-----------+\n| NULL |\n+-----------+\n\nURL: https://mariadb.com/kb/en/div/','','https://mariadb.com/kb/en/div/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (43,4,'ABS','Syntax\n------\n\nABS(X)\n\nDescription\n-----------\n\nReturns the absolute (non-negative) value of X. If X is not a number, it is\nconverted to a numeric type.\n\nExamples\n--------\n\nSELECT ABS(42);\n+---------+\n| ABS(42) |\n+---------+\n| 42 |\n+---------+\n\nSELECT ABS(-42);\n+----------+\n| ABS(-42) |\n+----------+\n| 42 |\n+----------+\n\nSELECT ABS(DATE \'1994-01-01\');\n+------------------------+\n| ABS(DATE \'1994-01-01\') |\n+------------------------+\n| 19940101 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/abs/','','https://mariadb.com/kb/en/abs/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (44,4,'ACOS','Syntax\n------\n\nACOS(X)\n\nDescription\n-----------\n\nReturns the arc cosine of X, that is, the value whose cosine is X. Returns\nNULL if X is not in the range -1 to 1.\n\nExamples\n--------\n\nSELECT ACOS(1);\n+---------+\n| ACOS(1) |\n+---------+\n| 0 |\n+---------+\n\nSELECT ACOS(1.0001);\n+--------------+\n| ACOS(1.0001) |\n+--------------+\n| NULL |\n+--------------+\n\nSELECT ACOS(0);\n+-----------------+\n| ACOS(0) |\n+-----------------+\n| 1.5707963267949 |\n+-----------------+\n\nSELECT ACOS(0.234);\n+------------------+\n| ACOS(0.234) |\n+------------------+\n| 1.33460644244679 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/acos/','','https://mariadb.com/kb/en/acos/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (45,4,'ASIN','Syntax\n------\n\nASIN(X)\n\nDescription\n-----------\n\nReturns the arc sine of X, that is, the value whose sine is X. Returns NULL if\nX is not in the range -1 to 1.\n\nExamples\n--------\n\nSELECT ASIN(0.2);\n+--------------------+\n| ASIN(0.2) |\n+--------------------+\n| 0.2013579207903308 |\n+--------------------+\n\nSELECT ASIN(\'foo\');\n+-------------+\n| ASIN(\'foo\') |\n+-------------+\n| 0 |\n+-------------+\n\nSHOW WARNINGS;\n+---------+------+-----------------------------------------+\n| Level | Code | Message |\n+---------+------+-----------------------------------------+\n| Warning | 1292 | Truncated incorrect DOUBLE value: \'foo\' |\n+---------+------+-----------------------------------------+\n\nURL: https://mariadb.com/kb/en/asin/','','https://mariadb.com/kb/en/asin/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (46,4,'ATAN','Syntax\n------\n\nATAN(X)\n\nDescription\n-----------\n\nReturns the arc tangent of X, that is, the value whose tangent is X.\n\nExamples\n--------\n\nSELECT ATAN(2);\n+--------------------+\n| ATAN(2) |\n+--------------------+\n| 1.1071487177940904 |\n+--------------------+\n\nSELECT ATAN(-2);\n+---------------------+\n| ATAN(-2) |\n+---------------------+\n| -1.1071487177940904 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/atan/','','https://mariadb.com/kb/en/atan/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (47,4,'ATAN2','Syntax\n------\n\nATAN(Y,X), ATAN2(Y,X)\n\nDescription\n-----------\n\nReturns the arc tangent of the two variables X and Y. It is similar to\ncalculating the arc tangent of Y / X, except that the signs of both arguments\nare used to determine the quadrant of the result.\n\nExamples\n--------\n\nSELECT ATAN(-2,2);\n+---------------------+\n| ATAN(-2,2) |\n+---------------------+\n| -0.7853981633974483 |\n+---------------------+\n\nSELECT ATAN2(PI(),0);\n+--------------------+\n| ATAN2(PI(),0) |\n+--------------------+\n| 1.5707963267948966 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/atan2/','','https://mariadb.com/kb/en/atan2/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (48,4,'CEIL','Syntax\n------\n\nCEIL(X)\n\nDescription\n-----------\n\nCEIL() is a synonym for CEILING().\n\nURL: https://mariadb.com/kb/en/ceil/','','https://mariadb.com/kb/en/ceil/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (49,4,'CEILING','Syntax\n------\n\nCEILING(X)\n\nDescription\n-----------\n\nReturns the smallest integer value not less than X.\n\nExamples\n--------\n\nSELECT CEILING(1.23);\n+---------------+\n| CEILING(1.23) |\n+---------------+\n| 2 |\n+---------------+\n\nSELECT CEILING(-1.23);\n+----------------+\n| CEILING(-1.23) |\n+----------------+\n| -1 |\n+----------------+\n\nURL: https://mariadb.com/kb/en/ceiling/','','https://mariadb.com/kb/en/ceiling/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (50,4,'CONV','Syntax\n------\n\nCONV(N,from_base,to_base)\n\nDescription\n-----------\n\nConverts numbers between different number bases. Returns a string\nrepresentation of the number N, converted from base from_base to base to_base.\n\nReturns NULL if any argument is NULL, or if the second or third argument are\nnot in the allowed range.\n\nThe argument N is interpreted as an integer, but may be specified as an\ninteger or a string. The minimum base is 2 and the maximum base is 36. If\nto_base is a negative number, N is regarded as a signed number. Otherwise, N\nis treated as unsigned. CONV() works with 64-bit precision.\n\nSome shortcuts for this function are also available: BIN(), OCT(), HEX(),\nUNHEX(). Also, MariaDB allows binary literal values and hexadecimal literal\nvalues.\n\nExamples\n--------\n\nSELECT CONV(\'a\',16,2);\n+----------------+\n| CONV(\'a\',16,2) |\n+----------------+\n| 1010 |\n+----------------+\n\nSELECT CONV(\'6E\',18,8);\n+-----------------+\n| CONV(\'6E\',18,8) |\n+-----------------+\n| 172 |\n+-----------------+\n\nSELECT CONV(-17,10,-18);\n+------------------+\n| CONV(-17,10,-18) |\n+------------------+\n| -H |\n+------------------+\n\nSELECT CONV(12+\'10\'+\'10\'+0xa,10,10);\n+------------------------------+\n| CONV(12+\'10\'+\'10\'+0xa,10,10) |\n+------------------------------+\n| 42 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/conv/','','https://mariadb.com/kb/en/conv/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (51,4,'COS','Syntax\n------\n\nCOS(X)\n\nDescription\n-----------\n\nReturns the cosine of X, where X is given in radians.\n\nExamples\n--------\n\nSELECT COS(PI());\n+-----------+\n| COS(PI()) |\n+-----------+\n| -1 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/cos/','','https://mariadb.com/kb/en/cos/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (52,4,'COT','Syntax\n------\n\nCOT(X)\n\nDescription\n-----------\n\nReturns the cotangent of X.\n\nExamples\n--------\n\nSELECT COT(42);\n+--------------------+\n| COT(42) |\n+--------------------+\n| 0.4364167060752729 |\n+--------------------+\n\nSELECT COT(12);\n+---------------------+\n| COT(12) |\n+---------------------+\n| -1.5726734063976893 |\n+---------------------+\n\nSELECT COT(0);\nERROR 1690 (22003): DOUBLE value is out of range in \'cot(0)\'\n\nURL: https://mariadb.com/kb/en/cot/','','https://mariadb.com/kb/en/cot/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (53,4,'CRC32','Syntax\n------\n\n<= MariaDB 10.7\n\nCRC32(expr)\n\nFrom MariaDB 10.8\n\nCRC32([par,]expr)\n\nDescription\n-----------\n\nComputes a cyclic redundancy check (CRC) value and returns a 32-bit unsigned\nvalue. The result is NULL if the argument is NULL. The argument is expected to\nbe a string and (if possible) is treated as one if it is not.\n\nUses the ISO 3309 polynomial that used by zlib and many others. MariaDB 10.8\nintroduced the CRC32C() function, which uses the alternate Castagnoli\npolynomia.\n\nMariaDB starting with 10.8\n--------------------------\nOften, CRC is computed in pieces. To facilitate this, MariaDB 10.8.0\nintroduced an optional parameter: CRC32(\'MariaDB\')=CRC32(CRC32(\'Maria\'),\'DB\').\n\nExamples\n--------\n\nSELECT CRC32(\'MariaDB\');\n+------------------+\n| CRC32(\'MariaDB\') |\n+------------------+\n| 4227209140 |\n+------------------+\n\nSELECT CRC32(\'mariadb\');\n+------------------+\n| CRC32(\'mariadb\') |\n+------------------+\n| 2594253378 |\n+------------------+\n\nFrom MariaDB 10.8.0\n\nSELECT CRC32(CRC32(\'Maria\'),\'DB\');\n+----------------------------+\n| CRC32(CRC32(\'Maria\'),\'DB\') |\n+----------------------------+\n| 4227209140 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/crc32/','','https://mariadb.com/kb/en/crc32/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (54,4,'DEGREES','Syntax\n------\n\nDEGREES(X)\n\nDescription\n-----------\n\nReturns the argument X, converted from radians to degrees.\n\nThis is the converse of the RADIANS() function.\n\nExamples\n--------\n\nSELECT DEGREES(PI());\n+---------------+\n| DEGREES(PI()) |\n+---------------+\n| 180 |\n+---------------+\n\nSELECT DEGREES(PI() / 2);\n+-------------------+\n| DEGREES(PI() / 2) |\n+-------------------+\n| 90 |\n+-------------------+\n\nSELECT DEGREES(45);\n+-----------------+\n| DEGREES(45) |\n+-----------------+\n| 2578.3100780887 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/degrees/','','https://mariadb.com/kb/en/degrees/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (55,4,'EXP','Syntax\n------\n\nEXP(X)\n\nDescription\n-----------\n\nReturns the value of e (the base of natural logarithms) raised to the power of\nX. The inverse of this function is LOG() (using a single argument only) or\nLN().\n\nIf X is NULL, this function returns NULL.\n\nExamples\n--------\n\nSELECT EXP(2);\n+------------------+\n| EXP(2) |\n+------------------+\n| 7.38905609893065 |\n+------------------+\n\nSELECT EXP(-2);\n+--------------------+\n| EXP(-2) |\n+--------------------+\n| 0.1353352832366127 |\n+--------------------+\n\nSELECT EXP(0);\n+--------+\n| EXP(0) |\n+--------+\n| 1 |\n+--------+\n\nSELECT EXP(NULL);\n+-----------+\n| EXP(NULL) |\n+-----------+\n| NULL |\n+-----------+\n\nURL: https://mariadb.com/kb/en/exp/','','https://mariadb.com/kb/en/exp/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (56,4,'FLOOR','Syntax\n------\n\nFLOOR(X)\n\nDescription\n-----------\n\nReturns the largest integer value not greater than X.\n\nExamples\n--------\n\nSELECT FLOOR(1.23);\n+-------------+\n| FLOOR(1.23) |\n+-------------+\n| 1 |\n+-------------+\n\nSELECT FLOOR(-1.23);\n+--------------+\n| FLOOR(-1.23) |\n+--------------+\n| -2 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/floor/','','https://mariadb.com/kb/en/floor/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (57,4,'LN','Syntax\n------\n\nLN(X)\n\nDescription\n-----------\n\nReturns the natural logarithm of X; that is, the base-e logarithm of X. If X\nis less than or equal to 0, or NULL, then NULL is returned.\n\nThe inverse of this function is EXP().\n\nExamples\n--------\n\nSELECT LN(2);\n+-------------------+\n| LN(2) |\n+-------------------+\n| 0.693147180559945 |\n+-------------------+\n\nSELECT LN(-2);\n+--------+\n| LN(-2) |\n+--------+\n| NULL |\n+--------+\n\nURL: https://mariadb.com/kb/en/ln/','','https://mariadb.com/kb/en/ln/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (58,4,'LOG','Syntax\n------\n\nLOG(X), LOG(B,X)\n\nDescription\n-----------\n\nIf called with one parameter, this function returns the natural logarithm of\nX. If X is less than or equal to 0, then NULL is returned.\n\nIf called with two parameters, it returns the logarithm of X to the base B. If\nB is <= 1 or X <= 0, the function returns NULL.\n\nIf any argument is NULL, the function returns NULL.\n\nThe inverse of this function (when called with a single argument) is the EXP()\nfunction.\n\nExamples\n--------\n\nLOG(X):\n\nSELECT LOG(2);\n+-------------------+\n| LOG(2) |\n+-------------------+\n| 0.693147180559945 |\n+-------------------+\n\nSELECT LOG(-2);\n+---------+\n| LOG(-2) |\n+---------+\n| NULL |\n+---------+\n\nLOG(B,X)\n\nSELECT LOG(2,16);\n+-----------+\n| LOG(2,16) |\n+-----------+\n| 4 |\n+-----------+\n\nSELECT LOG(3,27);\n+-----------+\n| LOG(3,27) |\n+-----------+\n| 3 |\n+-----------+\n\nSELECT LOG(3,1);\n+----------+\n| LOG(3,1) |\n+----------+\n| 0 |\n+----------+\n\nSELECT LOG(3,0);\n+----------+\n| LOG(3,0) |\n+----------+\n| NULL |\n+----------+\n\nURL: https://mariadb.com/kb/en/log/','','https://mariadb.com/kb/en/log/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (59,4,'LOG10','Syntax\n------\n\nLOG10(X)\n\nDescription\n-----------\n\nReturns the base-10 logarithm of X.\n\nExamples\n--------\n\nSELECT LOG10(2);\n+-------------------+\n| LOG10(2) |\n+-------------------+\n| 0.301029995663981 |\n+-------------------+\n\nSELECT LOG10(100);\n+------------+\n| LOG10(100) |\n+------------+\n| 2 |\n+------------+\n\nSELECT LOG10(-100);\n+-------------+\n| LOG10(-100) |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/log10/','','https://mariadb.com/kb/en/log10/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (60,4,'LOG2','Syntax\n------\n\nLOG2(X)\n\nDescription\n-----------\n\nReturns the base-2 logarithm of X.\n\nExamples\n--------\n\nSELECT LOG2(4398046511104);\n+---------------------+\n| LOG2(4398046511104) |\n+---------------------+\n| 42 |\n+---------------------+\n\nSELECT LOG2(65536);\n+-------------+\n| LOG2(65536) |\n+-------------+\n| 16 |\n+-------------+\n\nSELECT LOG2(-100);\n+------------+\n| LOG2(-100) |\n+------------+\n| NULL |\n+------------+\n\nURL: https://mariadb.com/kb/en/log2/','','https://mariadb.com/kb/en/log2/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (61,4,'MOD','Syntax\n------\n\nMOD(N,M), N % M, N MOD M\n\nDescription\n-----------\n\nModulo operation. Returns the remainder of N divided by M. See also Modulo\nOperator.\n\nIf the ERROR_ON_DIVISION_BY_ZERO SQL_MODE is used, any number modulus zero\nproduces an error. Otherwise, it returns NULL.\n\nThe integer part of a division can be obtained using DIV.\n\nExamples\n--------\n\nSELECT 1042 % 50;\n+-----------+\n| 1042 % 50 |\n+-----------+\n| 42 |\n+-----------+\n\nSELECT MOD(234, 10);\n+--------------+\n| MOD(234, 10) |\n+--------------+\n| 4 |\n+--------------+\n\nSELECT 253 % 7;\n+---------+\n| 253 % 7 |\n+---------+\n| 1 |\n+---------+\n\nSELECT MOD(29,9);\n+-----------+\n| MOD(29,9) |\n+-----------+\n| 2 |\n+-----------+\n\nSELECT 29 MOD 9;\n+----------+\n| 29 MOD 9 |\n+----------+\n| 2 |\n+----------+\n\nURL: https://mariadb.com/kb/en/mod/','','https://mariadb.com/kb/en/mod/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (62,4,'OCT','Syntax\n------\n\nOCT(N)\n\nDescription\n-----------\n\nReturns a string representation of the octal value of N, where N is a longlong\n(BIGINT) number. This is equivalent to CONV(N,10,8). Returns NULL if N is NULL.\n\nExamples\n--------\n\nSELECT OCT(34);\n+---------+\n| OCT(34) |\n+---------+\n| 42 |\n+---------+\n\nSELECT OCT(12);\n+---------+\n| OCT(12) |\n+---------+\n| 14 |\n+---------+\n\nURL: https://mariadb.com/kb/en/oct/','','https://mariadb.com/kb/en/oct/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (63,4,'PI','Syntax\n------\n\nPI()\n\nDescription\n-----------\n\nReturns the value of π (pi). The default number of decimal places displayed is\nsix, but MariaDB uses the full double-precision value internally.\n\nExamples\n--------\n\nSELECT PI();\n+----------+\n| PI() |\n+----------+\n| 3.141593 |\n+----------+\n\nSELECT PI()+0.0000000000000000000000;\n+-------------------------------+\n| PI()+0.0000000000000000000000 |\n+-------------------------------+\n| 3.1415926535897931159980 |\n+-------------------------------+\n\nURL: https://mariadb.com/kb/en/pi/','','https://mariadb.com/kb/en/pi/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (64,4,'POW','Syntax\n------\n\nPOW(X,Y)\n\nDescription\n-----------\n\nReturns the value of X raised to the power of Y.\n\nPOWER() is a synonym.\n\nExamples\n--------\n\nSELECT POW(2,3);\n+----------+\n| POW(2,3) |\n+----------+\n| 8 |\n+----------+\n\nSELECT POW(2,-2);\n+-----------+\n| POW(2,-2) |\n+-----------+\n| 0.25 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/pow/','','https://mariadb.com/kb/en/pow/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (65,4,'POWER','Syntax\n------\n\nPOWER(X,Y)\n\nDescription\n-----------\n\nThis is a synonym for POW(), which returns the value of X raised to the power\nof Y.\n\nURL: https://mariadb.com/kb/en/power/','','https://mariadb.com/kb/en/power/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (66,4,'RADIANS','Syntax\n------\n\nRADIANS(X)\n\nDescription\n-----------\n\nReturns the argument X, converted from degrees to radians. Note that π radians\nequals 180 degrees.\n\nThis is the converse of the DEGREES() function.\n\nExamples\n--------\n\nSELECT RADIANS(45);\n+-------------------+\n| RADIANS(45) |\n+-------------------+\n| 0.785398163397448 |\n+-------------------+\n\nSELECT RADIANS(90);\n+-----------------+\n| RADIANS(90) |\n+-----------------+\n| 1.5707963267949 |\n+-----------------+\n\nSELECT RADIANS(PI());\n+--------------------+\n| RADIANS(PI()) |\n+--------------------+\n| 0.0548311355616075 |\n+--------------------+\n\nSELECT RADIANS(180);\n+------------------+\n| RADIANS(180) |\n+------------------+\n| 3.14159265358979 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/radians/','','https://mariadb.com/kb/en/radians/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (67,4,'RAND','Syntax\n------\n\nRAND(), RAND(N)\n\nDescription\n-----------\n\nReturns a random DOUBLE precision floating point value v in the range 0 <= v <\n1.0. If a constant integer argument N is specified, it is used as the seed\nvalue, which produces a repeatable sequence of column values. In the example\nbelow, note that the sequences of values produced by RAND(3) is the same both\nplaces where it occurs.\n\nIn a WHERE clause, RAND() is evaluated each time the WHERE is executed.\n\nStatements using the RAND() function are not safe for statement-based\nreplication.\n\nPractical uses\n--------------\n\nThe expression to get a random integer from a given range is the following:\n\nFLOOR(min_value + RAND() * (max_value - min_value +1))\n\nRAND() is often used to read random rows from a table, as follows:\n\nSELECT * FROM my_table ORDER BY RAND() LIMIT 10;\n\nNote, however, that this technique should never be used on a large table as it\nwill be extremely slow. MariaDB will read all rows in the table, generate a\nrandom value for each of them, order them, and finally will apply the LIMIT\nclause.\n\nExamples\n--------\n\nCREATE TABLE t (i INT);\n\nINSERT INTO t VALUES(1),(2),(3);\n\nSELECT i, RAND() FROM t;\n+------+-------------------+\n| i | RAND() |\n+------+-------------------+\n| 1 | 0.255651095188829 |\n| 2 | 0.833920199269355 |\n| 3 | 0.40264774151393 |\n+------+-------------------+\n\nSELECT i, RAND(3) FROM t;\n+------+-------------------+\n| i | RAND(3) |\n+------+-------------------+\n| 1 | 0.90576975597606 |\n| 2 | 0.373079058130345 |\n| 3 | 0.148086053457191 |\n+------+-------------------+\n\nSELECT i, RAND() FROM t;\n+------+-------------------+\n| i | RAND() |\n+------+-------------------+\n| 1 | 0.511478140495232 |\n| 2 | 0.349447508668012 |\n| 3 | 0.212803152588013 |\n+------+-------------------+\n\nUsing the same seed, the same sequence will be returned:\n\nSELECT i, RAND(3) FROM t;\n+------+-------------------+\n| i | RAND(3) |\n+------+-------------------+\n| 1 | 0.90576975597606 |\n| 2 | 0.373079058130345 |\n| 3 | 0.148086053457191 |\n+------+-------------------+\n\nGenerating a random number from 5 to 15:\n\nSELECT FLOOR(5 + (RAND() * 11));\n\nURL: https://mariadb.com/kb/en/rand/','','https://mariadb.com/kb/en/rand/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (68,4,'ROUND','Syntax\n------\n\nROUND(X), ROUND(X,D)\n\nDescription\n-----------\n\nRounds the argument X to D decimal places. D defaults to 0 if not specified. D\ncan be negative to cause D digits left of the decimal point of the value X to\nbecome zero.\n\nThe rounding algorithm depends on the data type of X:\n\n* for floating point types (FLOAT, DOUBLE) the C libraries rounding function\nis used, so the behavior *may* differ between operating systems\n* for fixed point types (DECIMAL, DEC/NUMBER/FIXED) the \"round half up\" rule\nis used, meaning that e.g. a value ending in exactly .5 is always rounded up.\n\nExamples\n--------\n\nSELECT ROUND(-1.23);\n+--------------+\n| ROUND(-1.23) |\n+--------------+\n| -1 |\n+--------------+\n\nSELECT ROUND(-1.58);\n+--------------+\n| ROUND(-1.58) |\n+--------------+\n| -2 |\n+--------------+\n\nSELECT ROUND(1.58); \n+-------------+\n| ROUND(1.58) |\n+-------------+\n| 2 |\n+-------------+\n\nSELECT ROUND(1.298, 1);\n+-----------------+\n| ROUND(1.298, 1) |\n+-----------------+\n| 1.3 |\n+-----------------+\n\nSELECT ROUND(1.298, 0);\n+-----------------+\n| ROUND(1.298, 0) |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT ROUND(23.298, -1);\n+-------------------+\n| ROUND(23.298, -1) |\n+-------------------+\n| 20 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/round/','','https://mariadb.com/kb/en/round/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (69,4,'SIGN','Syntax\n------\n\nSIGN(X)\n\nDescription\n-----------\n\nReturns the sign of the argument as -1, 0, or 1, depending on whether X is\nnegative, zero, or positive.\n\nExamples\n--------\n\nSELECT SIGN(-32);\n+-----------+\n| SIGN(-32) |\n+-----------+\n| -1 |\n+-----------+\n\nSELECT SIGN(0);\n+---------+\n| SIGN(0) |\n+---------+\n| 0 |\n+---------+\n\nSELECT SIGN(234);\n+-----------+\n| SIGN(234) |\n+-----------+\n| 1 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/sign/','','https://mariadb.com/kb/en/sign/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (70,4,'SIN','Syntax\n------\n\nSIN(X)\n\nDescription\n-----------\n\nReturns the sine of X, where X is given in radians.\n\nExamples\n--------\n\nSELECT SIN(1.5707963267948966);\n+-------------------------+\n| SIN(1.5707963267948966) |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT SIN(PI());\n+----------------------+\n| SIN(PI()) |\n+----------------------+\n| 1.22460635382238e-16 |\n+----------------------+\n\nSELECT ROUND(SIN(PI()));\n+------------------+\n| ROUND(SIN(PI())) |\n+------------------+\n| 0 |\n+------------------+\n\nURL: https://mariadb.com/kb/en/sin/','','https://mariadb.com/kb/en/sin/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (71,4,'SQRT','Syntax\n------\n\nSQRT(X)\n\nDescription\n-----------\n\nReturns the square root of X. If X is negative, NULL is returned.\n\nExamples\n--------\n\nSELECT SQRT(4);\n+---------+\n| SQRT(4) |\n+---------+\n| 2 |\n+---------+\n\nSELECT SQRT(20);\n+------------------+\n| SQRT(20) |\n+------------------+\n| 4.47213595499958 |\n+------------------+\n\nSELECT SQRT(-16);\n+-----------+\n| SQRT(-16) |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT SQRT(1764);\n+------------+\n| SQRT(1764) |\n+------------+\n| 42 |\n+------------+\n\nURL: https://mariadb.com/kb/en/sqrt/','','https://mariadb.com/kb/en/sqrt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (72,4,'TAN','Syntax\n------\n\nTAN(X)\n\nDescription\n-----------\n\nReturns the tangent of X, where X is given in radians.\n\nExamples\n--------\n\nSELECT TAN(0.7853981633974483);\n+-------------------------+\n| TAN(0.7853981633974483) |\n+-------------------------+\n| 0.9999999999999999 |\n+-------------------------+\n\nSELECT TAN(PI());\n+-----------------------+\n| TAN(PI()) |\n+-----------------------+\n| -1.22460635382238e-16 |\n+-----------------------+\n\nSELECT TAN(PI()+1);\n+-----------------+\n| TAN(PI()+1) |\n+-----------------+\n| 1.5574077246549 |\n+-----------------+\n\nSELECT TAN(RADIANS(PI()));\n+--------------------+\n| TAN(RADIANS(PI())) |\n+--------------------+\n| 0.0548861508080033 |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/tan/','','https://mariadb.com/kb/en/tan/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (73,4,'TRUNCATE','This page documents the TRUNCATE function. See TRUNCATE TABLE for the DDL\nstatement.\n\nSyntax\n------\n\nTRUNCATE(X,D)\n\nDescription\n-----------\n\nReturns the number X, truncated to D decimal places. If D is 0, the result has\nno decimal point or fractional part. D can be negative to cause D digits left\nof the decimal point of the value X to become zero.\n\nExamples\n--------\n\nSELECT TRUNCATE(1.223,1);\n+-------------------+\n| TRUNCATE(1.223,1) |\n+-------------------+\n| 1.2 |\n+-------------------+\n\nSELECT TRUNCATE(1.999,1);\n+-------------------+\n| TRUNCATE(1.999,1) |\n+-------------------+\n| 1.9 |\n+-------------------+\n\nSELECT TRUNCATE(1.999,0); \n+-------------------+\n| TRUNCATE(1.999,0) |\n+-------------------+\n| 1 |\n+-------------------+\n\nSELECT TRUNCATE(-1.999,1);\n+--------------------+\n| TRUNCATE(-1.999,1) |\n+--------------------+\n| -1.9 |\n+--------------------+\n\nSELECT TRUNCATE(122,-2);\n+------------------+\n| TRUNCATE(122,-2) |\n+------------------+\n| 100 |\n+------------------+\n\nSELECT TRUNCATE(10.28*100,0);\n+-----------------------+\n| TRUNCATE(10.28*100,0) |\n+-----------------------+\n| 1028 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/truncate/','','https://mariadb.com/kb/en/truncate/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (74,5,'INSTALL PLUGIN','Syntax\n------\n\nINSTALL PLUGIN [IF NOT EXISTS] plugin_name SONAME \'plugin_library\'\n\nDescription\n-----------\n\nThis statement installs an individual plugin from the specified library. To\ninstall the whole library (which could be required), use INSTALL SONAME. See\nalso Installing a Plugin.\n\nplugin_name is the name of the plugin as defined in the plugin declaration\nstructure contained in the library file. Plugin names are not case sensitive.\nFor maximal compatibility, plugin names should be limited to ASCII letters,\ndigits, and underscore, because they are used in C source files, shell command\nlines, M4 and Bourne shell scripts, and SQL environments.\n\nplugin_library is the name of the shared library that contains the plugin\ncode. The file name extension can be omitted (which makes the statement look\nthe same on all architectures).\n\nThe shared library must be located in the plugin directory (that is, the\ndirectory named by the plugin_dir system variable). The library must be in the\nplugin directory itself, not in a subdirectory. By default, plugin_dir is\nplugin directory under the directory named by the pkglibdir configuration\nvariable, but it can be changed by setting the value of plugin_dir at server\nstartup. For example, set its value in a my.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\nIf the value of plugin_dir is a relative path name, it is taken to be relative\nto the MySQL base directory (the value of the basedir system variable).\n\nINSTALL PLUGIN adds a line to the mysql.plugin table that describes the\nplugin. This table contains the plugin name and library file name.\n\nINSTALL PLUGIN causes the server to read option (my.cnf) files just as during\nserver startup. This enables the plugin to pick up any relevant options from\nthose files. It is possible to add plugin options to an option file even\nbefore loading a plugin (if the loose prefix is used). It is also possible to\nuninstall a plugin, edit my.cnf, and install the plugin again. Restarting the\nplugin this way enables it to the new option values without a server restart.\n\nINSTALL PLUGIN also loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its initialization\nfunction, which handles any setup that the plugin must perform before it can\nbe used.\n\nTo use INSTALL PLUGIN, you must have the INSERT privilege for the mysql.plugin\ntable.\n\nAt server startup, the server loads and initializes any plugin that is listed\nin the mysql.plugin table. This means that a plugin is installed with INSTALL\nPLUGIN only once, not every time the server starts. Plugin loading at startup\ndoes not occur if the server is started with the --skip-grant-tables option.\n\nWhen the server shuts down, it executes the de-initialization function for\neach plugin that is loaded so that the plugin has a chance to perform any\nfinal cleanup.\n\nIf you need to load plugins for a single server startup when the\n--skip-grant-tables option is given (which tells the server not to read system\ntables), use the --plugin-load mysqld option.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nIF NOT EXISTS\n-------------\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a note instead of\nan error if the specified plugin already exists. See SHOW WARNINGS.\n\nExamples\n--------\n\nINSTALL PLUGIN sphinx SONAME \'ha_sphinx.so\';\n\nThe extension can also be omitted:\n\nINSTALL PLUGIN innodb SONAME \'ha_xtradb\';\n\nFrom MariaDB 10.4.0:\n\nINSTALL PLUGIN IF NOT EXISTS example SONAME \'ha_example\';\nQuery OK, 0 rows affected (0.104 sec)\n\nINSTALL PLUGIN IF NOT EXISTS example SONAME \'ha_example\';\nQuery OK, 0 rows affected, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------+\n| Note | 1968 | Plugin \'example\' already installed |\n+-------+------+------------------------------------+\n\nURL: https://mariadb.com/kb/en/install-plugin/','','https://mariadb.com/kb/en/install-plugin/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (75,5,'UNINSTALL PLUGIN','Syntax\n------\n\nUNINSTALL PLUGIN [IF EXISTS] plugin_name\n\nDescription\n-----------\n\nThis statement removes a single installed plugin. To uninstall the whole\nlibrary which contains the plugin, use UNINSTALL SONAME. You cannot uninstall\na plugin if any table that uses it is open.\n\nplugin_name must be the name of some plugin that is listed in the mysql.plugin\ntable. The server executes the plugin\'s deinitialization function and removes\nthe row for the plugin from the mysql.plugin table, so that subsequent server\nrestarts will not load and initialize the plugin. UNINSTALL PLUGIN does not\nremove the plugin\'s shared library file.\n\nTo use UNINSTALL PLUGIN, you must have the DELETE privilege for the\nmysql.plugin table.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will return a note instead of an\nerror if the plugin does not exist. See SHOW WARNINGS.\n\nExamples\n--------\n\nUNINSTALL PLUGIN example;\n\nFrom MariaDB 10.4.0:\n\nUNINSTALL PLUGIN IF EXISTS example;\nQuery OK, 0 rows affected (0.099 sec)\n\nUNINSTALL PLUGIN IF EXISTS example;\nQuery OK, 0 rows affected, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------------+\n| Note | 1305 | PLUGIN example does not exist |\n+-------+------+-------------------------------+\n\nURL: https://mariadb.com/kb/en/uninstall-plugin/','','https://mariadb.com/kb/en/uninstall-plugin/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (76,5,'INSTALL SONAME','Syntax\n------\n\nINSTALL SONAME \'plugin_library\'\n\nDescription\n-----------\n\nThis statement is a variant of INSTALL PLUGIN. It installs all plugins from a\ngiven plugin_library. See INSTALL PLUGIN for details.\n\nplugin_library is the name of the shared library that contains the plugin\ncode. The file name extension (for example, libmyplugin.so or libmyplugin.dll)\ncan be omitted (which makes the statement look the same on all architectures).\n\nThe shared library must be located in the plugin directory (that is, the\ndirectory named by the plugin_dir system variable). The library must be in the\nplugin directory itself, not in a subdirectory. By default, plugin_dir is\nplugin directory under the directory named by the pkglibdir configuration\nvariable, but it can be changed by setting the value of plugin_dir at server\nstartup. For example, set its value in a my.cnf file:\n\n[mysqld]\nplugin_dir=/path/to/plugin/directory\nIf the value of plugin_dir is a relative path name, it is taken to be relative\nto the MySQL base directory (the value of the basedir system variable).\n\nINSTALL SONAME adds one or more lines to the mysql.plugin table that describes\nthe plugin. This table contains the plugin name and library file name.\n\nINSTALL SONAME causes the server to read option (my.cnf) files just as during\nserver startup. This enables the plugin to pick up any relevant options from\nthose files. It is possible to add plugin options to an option file even\nbefore loading a plugin (if the loose prefix is used). It is also possible to\nuninstall a plugin, edit my.cnf, and install the plugin again. Restarting the\nplugin this way enables it to the new option values without a server restart.\n\nINSTALL SONAME also loads and initializes the plugin code to make the plugin\navailable for use. A plugin is initialized by executing its initialization\nfunction, which handles any setup that the plugin must perform before it can\nbe used.\n\nTo use INSTALL SONAME, you must have the INSERT privilege for the mysql.plugin\ntable.\n\nAt server startup, the server loads and initializes any plugin that is listed\nin the mysql.plugin table. This means that a plugin is installed with INSTALL\nSONAME only once, not every time the server starts. Plugin loading at startup\ndoes not occur if the server is started with the --skip-grant-tables option.\n\nWhen the server shuts down, it executes the de-initialization function for\neach plugin that is loaded so that the plugin has a chance to perform any\nfinal cleanup.\n\nIf you need to load plugins for a single server startup when the\n--skip-grant-tables option is given (which tells the server not to read system\ntables), use the --plugin-load mysqld option.\n\nIf you need to install only one plugin from a library, use the INSTALL PLUGIN\nstatement.\n\nExamples\n--------\n\nTo load the XtraDB storage engine and all of its information_schema tables\nwith one statement, use\n\nINSTALL SONAME \'ha_xtradb\';\n\nThis statement can be used instead of INSTALL PLUGIN even when the library\ncontains only one plugin:\n\nINSTALL SONAME \'ha_sequence\';\n\nURL: https://mariadb.com/kb/en/install-soname/','','https://mariadb.com/kb/en/install-soname/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (77,5,'UNINSTALL SONAME','Syntax\n------\n\nUNINSTALL SONAME [IF EXISTS] \'plugin_library\'\n\nDescription\n-----------\n\nThis statement is a variant of UNINSTALL PLUGIN statement, that removes all\nplugins belonging to a specified plugin_library. See UNINSTALL PLUGIN for\ndetails.\n\nplugin_library is the name of the shared library that contains the plugin\ncode. The file name extension (for example, libmyplugin.so or libmyplugin.dll)\ncan be omitted (which makes the statement look the same on all architectures).\n\nTo use UNINSTALL SONAME, you must have the DELETE privilege for the\nmysql.plugin table.\n\nMariaDB starting with 10.4.0\n----------------------------\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will return a note instead of an\nerror if the plugin library does not exist. See SHOW WARNINGS.\n\nExamples\n--------\n\nTo uninstall the XtraDB plugin and all of its information_schema tables with\none statement, use\n\nUNINSTALL SONAME \'ha_xtradb\';\n\nFrom MariaDB 10.4.0:\n\nUNINSTALL SONAME IF EXISTS \'ha_example\';\nQuery OK, 0 rows affected (0.099 sec)\n\nUNINSTALL SONAME IF EXISTS \'ha_example\';\nQuery OK, 0 rows affected, 1 warning (0.000 sec)\n\nSHOW WARNINGS;\n+-------+------+-------------------------------------+\n| Level | Code | Message |\n+-------+------+-------------------------------------+\n| Note | 1305 | SONAME ha_example.so does not exist |\n+-------+------+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/uninstall-soname/','','https://mariadb.com/kb/en/uninstall-soname/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (78,5,'Plugin Overview','Plugins are server components that enhance MariaDB in some way. These can be\nanything from new storage engines, plugins for enhancing full-text parsing, or\neven small enhancements, such as a plugin to get a timestamp as an integer.\n\nQuerying Plugin Information\n---------------------------\n\nThere are a number of ways to see which plugins are currently active.\n\nA server almost always has a large number of active plugins, because the\nserver contains a large number of built-in plugins, which are active by\ndefault and cannot be uninstalled.\n\nQuerying Plugin Information with SHOW PLUGINS\n---------------------------------------------\n\nThe SHOW PLUGINS statement can be used to query information about all active\nplugins.\n\nFor example:\n\nSHOW PLUGINS\\G;\n********************** 1. row **********************\n Name: binlog\n Status: ACTIVE\n Type: STORAGE ENGINE\nLibrary: NULL\nLicense: GPL\n********************** 2. row **********************\n Name: mysql_native_password\n Status: ACTIVE\n Type: AUTHENTICATION\nLibrary: NULL\nLicense: GPL\n********************** 3. row **********************\n Name: mysql_old_password\n Status: ACTIVE\n Type: AUTHENTICATION\nLibrary: NULL\nLicense: GPL\n...\n\nIf a plugin\'s Library column has a NULL value, then the plugin is built-in,\nand it cannot be uninstalled.\n\nQuerying Plugin Information with information_schema.PLUGINS\n-----------------------------------------------------------\n\nThe information_schema.PLUGINS table can be queried to get more detailed\ninformation about plugins.\n\nFor example:\n\nSELECT * FROM information_schema.PLUGINS\\G\n...\n*************************** 6. row ***************************\n PLUGIN_NAME: CSV\n PLUGIN_VERSION: 1.0\n PLUGIN_STATUS: ACTIVE\n PLUGIN_TYPE: STORAGE ENGINE\n PLUGIN_TYPE_VERSION: 100003.0\n PLUGIN_LIBRARY: NULL\nPLUGIN_LIBRARY_VERSION: NULL\n PLUGIN_AUTHOR: Brian Aker, MySQL AB\n PLUGIN_DESCRIPTION: CSV storage engine\n PLUGIN_LICENSE: GPL\n LOAD_OPTION: FORCE\n PLUGIN_MATURITY: Stable\n PLUGIN_AUTH_VERSION: 1.0\n*************************** 7. row ***************************\n PLUGIN_NAME: MEMORY\n PLUGIN_VERSION: 1.0\n PLUGIN_STATUS: ACTIVE\n PLUGIN_TYPE: STORAGE ENGINE\n PLUGIN_TYPE_VERSION: 100003.0\n PLUGIN_LIBRARY: NULL\nPLUGIN_LIBRARY_VERSION: NULL\n PLUGIN_AUTHOR: MySQL AB\n PLUGIN_DESCRIPTION: Hash based, stored in memory, useful for temporary\ntables\n PLUGIN_LICENSE: GPL\n LOAD_OPTION: FORCE\n PLUGIN_MATURITY: Stable\n PLUGIN_AUTH_VERSION: 1.0\n...\n\nIf a plugin\'s PLUGIN_LIBRARY column has the NULL value, then the plugin is\nbuilt-in, and it cannot be uninstalled.\n\nQuerying Plugin Information with mysql.plugin\n---------------------------------------------\n\nThe mysql.plugin table can be queried to get information about installed\nplugins.\n\nThis table only contains information about plugins that have been installed\nvia the following methods:\n\n* The INSTALL SONAME statement.\n* The INSTALL PLUGIN statement.\n* The mysql_plugin utility.\n\nThis table does not contain information about:\n\n* Built-in plugins.\n* Plugins loaded with the --plugin-load-add option.\n* Plugins loaded with the --plugin-load option.\n\nThis table only contains enough information to reload the plugin when the\nserver is restarted, which means it only contains the plugin name and the\nplugin library.\n\nFor example:\n\nSELECT * FROM mysql.plugin;\n\n+------+------------+\n| name | dl |\n+------+------------+\n| PBXT | libpbxt.so |\n+------+------------+\n\nInstalling a Plugin\n-------------------\n\nThere are three primary ways to install a plugin:\n\n* A plugin can be installed dynamically with an SQL statement.\n* A plugin can be installed with a mysqld option, but it requires a server\nrestart.\n* A plugin can be installed with the mysql_plugin utility, while the server is\ncompletely offline.\n\nWhen you are installing a plugin, you also have to ensure that:\n\n* The server\'s plugin directory is properly configured, and the plugin\'s\nlibrary is in the plugin directory.\n* The server\'s minimum plugin maturity is properly configured, and the plugin\nis mature enough to be installed.\n\nInstalling a Plugin Dynamically\n-------------------------------\n\nA plugin can be installed dynamically by executing either the INSTALL SONAME\nor the INSTALL PLUGIN statement.\n\nIf a plugin is installed with one of these statements, then a record will be\nadded to the mysql.plugins table for the plugin. This means that the plugin\nwill automatically be loaded every time the server restarts, unless\nspecifically uninstalled or deactivated.\n\nInstalling a Plugin with INSTALL SONAME\n---------------------------------------\n\nYou can install a plugin dynamically by executing the INSTALL SONAME\nstatement. INSTALL SONAME installs all plugins from the given plugin library.\nThis could be required for some plugin libraries.\n\nFor example, to install all plugins in the server_audit plugin library (which\nis currently only the server_audit audit plugin), you could execute the\nfollowing:\n\nINSTALL SONAME \'server_audit\';\n\nInstalling a Plugin with INSTALL PLUGIN\n---------------------------------------\n\nYou can install a plugin dynamically by executing the INSTALL PLUGIN\nstatement. INSTALL PLUGIN installs a single plugin from the given plugin\nlibrary.\n\nFor example, to install the server_audit audit plugin from the server_audit\nplugin library, you could execute the following:\n\nINSTALL PLUGIN server_audit SONAME \'server_audit\';\n\nInstalling a Plugin with Plugin Load Options\n--------------------------------------------\n\nA plugin can be installed with a mysqld option by providing either the\n--plugin-load-add or the --plugin-load option.\n\nIf a plugin is installed with one of these options, then a record will not be\nadded to the mysql.plugins table for the plugin. This means that if the server\nis restarted without the same option set, then the plugin will not\nautomatically be loaded.\n\nInstalling a Plugin with --plugin-load-add\n------------------------------------------\n\nYou can install a plugin with the --plugin-load-add option by specifying the\noption as a command-line argument to mysqld or by specifying the option in a\nrelevant server option group in an option file.\n\nThe --plugin-load-add option uses the following format:\n\n* Plugins can be specified in the format name=library, where name is the\nplugin name and library is the plugin library. This format installs a single\nplugin from the given plugin library.\n* Plugins can also be specified in the format library, where library is the\nplugin library. This format installs all plugins from the given plugin library.\n* Multiple plugins can be specified by separating them with semicolons.\n\nFor example, to install all plugins in the server_audit plugin library (which\nis currently only the server_audit audit plugin) and also the ed25519\nauthentication plugin from the auth_ed25519 plugin library, you could set the\noption to the following values on the command-line:\n\n$ mysqld --user=mysql --plugin-load-add=\'server_audit\'\n--plugin-load-add=\'ed25519=auth_ed25519\'\n\nYou could also set the option to the same values in an option file:\n\n[mariadb]\n...\nplugin_load_add = server_audit\nplugin_load_add = ed25519=auth_ed25519\n\nSpecial care must be taken when specifying both the --plugin-load option and\nthe --plugin-load-add option together. The --plugin-load option resets the\nplugin load list, and this can cause unexpected problems if you are not aware.\nThe --plugin-load-add option does not reset the plugin load list, so it is\nmuch safer to use. See Specifying Multiple Plugin Load Options for more\ninformation.\n\nInstalling a Plugin with --plugin-load\n--------------------------------------\n\nYou can install a plugin with the --plugin-load option by specifying the\noption as a command-line argument to mysqld or by specifying the option in a\nrelevant server option group in an option file.\n\nThe --plugin-load option uses the following format:\n\n* Plugins can be specified in the format name=library, where name is the\nplugin name and library is the plugin library. This format installs a single\nplugin from the given plugin library.\n* Plugins can also be specified in the format library, where library is the\nplugin library. This format installs all plugins from the given plugin library.\n* Multiple plugins can be specified by separating them with semicolons.\n\nFor example, to install all plugins in the server_audit plugin library (which\nis currently only the server_audit audit plugin) and also the ed25519\nauthentication plugin from the auth_ed25519 plugin library, you could set the\noption to the following values on the command-line:\n\n$ mysqld --user=mysql --plugin-load=\'server_audit;ed25519=auth_ed25519\'\n\nYou could also set the option to the same values in an option file:\n\n[mariadb]\n...\nplugin_load = server_audit;ed25519=auth_ed25519\n\nSpecial care must be taken when specifying the --plugin-load option multiple\ntimes, or when specifying both the --plugin-load option and the\n--plugin-load-add option together. The --plugin-load option resets the plugin\nload list, and this can cause unexpected problems if you are not aware. The\n--plugin-load-add option does not reset the plugin load list, so it is much\nsafer to use. See Specifying Multiple Plugin Load Options for more information.\n\nSpecifying Multiple Plugin Load Options\n---------------------------------------\n\nSpecial care must be taken when specifying the --plugin-load option multiple\ntimes, or when specifying both the --plugin-load option and the\n--plugin-load-add option. The --plugin-load option resets the plugin load\nlist, and this can cause unexpected problems if you are not aware. The\n--plugin-load-add option does not reset the plugin load list, so it is much\nsafer to use.\n\nThis can have the following consequences:\n\n* If the --plugin-load option is specified multiple times, then only the last\ninstance will have any effect. For example, in the following case, the first\ninstance of the option is reset:\n\n[mariadb]\n...\nplugin_load = server_audit\nplugin_load = ed25519=auth_ed25519\n\n* If the --plugin-load option is specified after the --plugin-load-add option,\nthen it will also reset the changes made by that option. For example, in the\nfollowing case, the --plugin-load-add option does not do anything, because the\nsubsequent --plugin-load option resets the plugin load list:\n\n[mariadb]\n...\nplugin_load_add = server_audit\nplugin_load = ed25519=auth_ed25519\n\n* In contrast, if the --plugin-load option is specified before the\n--plugin-load-add option, then it will work fine, because the\n--plugin-load-add option does not reset the plugin load list. For example, in\nthe following case, both plugins are properly loaded:\n\n[mariadb]\n...\nplugin_load = server_audit\nplugin_load_add = ed25519=auth_ed25519\n\nInstalling a Plugin with mysql_plugin\n-------------------------------------\n\nA plugin can be installed with the mysql_plugin utility if the server is\ncompletely offline.\n\nThe syntax is:\n\nmysql_plugin [options] ENABLE|DISABLE\n\nFor example, to install the server_audit audit plugin, you could execute the\nfollowing:\n\nmysql_plugin server_audit ENABLE\n\nIf a plugin is installed with this utility, then a record will be added to the\nmysql.plugins table for the plugin. This means that the plugin will\nautomatically be loaded every time the server restarts, unless specifically\nuninstalled or deactivated.\n\nConfiguring the Plugin Directory\n--------------------------------\n\nWhen a plugin is being installed, the server looks for the plugin\'s library in\nthe server\'s plugin directory. This directory is configured by the plugin_dir\nsystem variable. This can be specified as a command-line argument to mysqld or\nit can be specified in a relevant server option group in an option file. For\nexample:\n\n[mariadb]\n...\nplugin_dir = /usr/lib64/mysql/plugin\n\nConfiguring the Minimum Plugin Maturity\n---------------------------------------\n\nWhen a plugin is being installed, the server compares the plugin\'s maturity\nlevel against the server\'s minimum allowed plugin maturity. This can help\nprevent users from using unstable plugins on production servers. This minimum\nplugin maturity is configured by the plugin_maturity system variable. This can\nbe specified as a command-line argument to mysqld or it can be specified in a\nrelevant server option group in an option file. For example:\n\n[mariadb]\n...\nplugin_maturity = stable\n\nConfiguring Plugin Activation at Server Startup\n-----------------------------------------------\n\nA plugin will be loaded by default when the server starts if:\n\n* The plugin was installed with the INSTALL SONAME statement.\n* The plugin was installed with the INSTALL PLUGIN statement.\n* The plugin was installed with the mysql_plugin utility.\n* The server is configured to load the plugin with the --plugin-load-add\noption.\n* The server is configured to load the plugin with the --plugin-load option.\n\nThis behavior can be changed with special options that take the form\n--plugin-name. For example, for the server_audit audit plugin, the special\noption is called --server-audit.\n\nThe possible values for these special options are:\n\n+---------------------------------------+------------------------------------+\n| Option Value | Description |\n+---------------------------------------+------------------------------------+\n| OFF | Disables the plugin without |\n| | removing it from the |\n| | mysql.plugins table. |\n+---------------------------------------+------------------------------------+\n| ON | Enables the plugin. If the plugin |\n| | cannot be initialized, then the |\n| | server will still continue |\n| | starting up, but the plugin will |\n| | be disabled. |\n+---------------------------------------+------------------------------------+\n| FORCE | Enables the plugin. If the plugin |','','https://mariadb.com/kb/en/plugin-overview/'); update help_topic set description = CONCAT(description, '\n| | cannot be initialized, then the |\n| | server will fail to start with an |\n| | error. |\n+---------------------------------------+------------------------------------+\n| FORCE_PLUS_PERMANENT | Enables the plugin. If the plugin |\n| | cannot be initialized, then the |\n| | server will fail to start with an |\n| | error. In addition, the plugin |\n| | cannot be uninstalled with |\n| | UNINSTALL SONAME or UNINSTALL |\n| | PLUGIN while the server is |\n| | running. |\n+---------------------------------------+------------------------------------+\n\nA plugin\'s status can be found by looking at the PLUGIN_STATUS column of the\ninformation_schema.PLUGINS table.\n\nUninstalling Plugins\n--------------------\n\nPlugins that are found in the mysql.plugin table, that is those that were\ninstalled with INSTALL SONAME, INSTALL PLUGIN or mysql_plugin can be\nuninstalled in one of two ways:\n\n* The UNINSTALL SONAME or the UNINSTALL PLUGIN statement while the server is\nrunning\n* With mysql_plugin while the server is offline.\n\nPlugins that were enabled as a --plugin-load option do not need to be\nuninstalled. If --plugin-load is omitted the next time the server starts, or\nthe plugin is not listed as one of the --plugin-load entries, the plugin will\nnot be loaded.\n\nUNINSTALL PLUGIN uninstalls a single installed plugin, while UNINSTALL SONAME\nuninstalls all plugins belonging to a given library.\n\nURL: https://mariadb.com/kb/en/plugin-overview/') WHERE help_topic_id = 78; insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (79,6,'MBR Definition','Description\n-----------\n\nThe MBR (Minimum Bounding Rectangle), or Envelope is the bounding geometry,\nformed by the minimum and maximum (X,Y) coordinates:\n\nExamples\n--------\n\n((MINX MINY, MAXX MINY, MAXX MAXY, MINX MAXY, MINX MINY))\n\nURL: https://mariadb.com/kb/en/mbr-definition/','','https://mariadb.com/kb/en/mbr-definition/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (80,6,'MBRContains','Syntax\n------\n\nMBRContains(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangle of g1\ncontains the Minimum Bounding Rectangle of g2. This tests the opposite\nrelationship as MBRWithin().\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\n\nSET @g2 = GeomFromText(\'Point(1 1)\');\n\nSELECT MBRContains(@g1,@g2), MBRContains(@g2,@g1);\n+----------------------+----------------------+\n| MBRContains(@g1,@g2) | MBRContains(@g2,@g1) |\n+----------------------+----------------------+\n| 1 | 0 |\n+----------------------+----------------------+\n\nURL: https://mariadb.com/kb/en/mbrcontains/','','https://mariadb.com/kb/en/mbrcontains/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (81,6,'MBRDisjoint','Syntax\n------\n\nMBRDisjoint(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangles of the two\ngeometries g1 and g2 are disjoint. Two geometries are disjoint if they do not\nintersect, that is touch or overlap.\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((4 4,4 7,7 7,7 4,4 4))\');\nSELECTmbrdisjoint(@g1,@g2);\n+----------------------+\n| mbrdisjoint(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbrdisjoint(@g1,@g2);\n+----------------------+\n| mbrdisjoint(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/mbrdisjoint/','','https://mariadb.com/kb/en/mbrdisjoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (82,6,'MBREqual','Syntax\n------\n\nMBREqual(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangles of the two\ngeometries g1 and g2 are the same.\n\nExamples\n--------\n\nSET @g1=GEOMFROMTEXT(\'LINESTRING(0 0, 1 2)\');\nSET @g2=GEOMFROMTEXT(\'POLYGON((0 0, 0 2, 1 2, 1 0, 0 0))\');\nSELECT MbrEqual(@g1,@g2);\n+-------------------+\n| MbrEqual(@g1,@g2) |\n+-------------------+\n| 1 |\n+-------------------+\n\nSET @g1=GEOMFROMTEXT(\'LINESTRING(0 0, 1 3)\');\nSET @g2=GEOMFROMTEXT(\'POLYGON((0 0, 0 2, 1 4, 1 0, 0 0))\');\nSELECT MbrEqual(@g1,@g2);\n+-------------------+\n| MbrEqual(@g1,@g2) |\n+-------------------+\n| 0 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/mbrequal/','','https://mariadb.com/kb/en/mbrequal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (83,6,'MBRIntersects','Syntax\n------\n\nMBRIntersects(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangles of the two\ngeometries g1 and g2 intersect.\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbrintersects(@g1,@g2);\n+------------------------+\n| mbrintersects(@g1,@g2) |\n+------------------------+\n| 1 |\n+------------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((4 4,4 7,7 7,7 4,4 4))\');\nSELECT mbrintersects(@g1,@g2);\n+------------------------+\n| mbrintersects(@g1,@g2) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/mbrintersects/','','https://mariadb.com/kb/en/mbrintersects/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (84,6,'MBROverlaps','Syntax\n------\n\nMBROverlaps(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangles of the two\ngeometries g1 and g2 overlap. The term spatially overlaps is used if two\ngeometries intersect and their intersection results in a geometry of the same\ndimension but not equal to either of the given geometries.\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((4 4,4 7,7 7,7 4,4 4))\');\nSELECT mbroverlaps(@g1,@g2);\n+----------------------+\n| mbroverlaps(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbroverlaps(@g1,@g2);\n+----------------------+\n| mbroverlaps(@g1,@g2) |\n+----------------------+\n| 0 |\n+----------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 4,4 4,4 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbroverlaps(@g1,@g2);\n+----------------------+\n| mbroverlaps(@g1,@g2) |\n+----------------------+\n| 1 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/mbroverlaps/','','https://mariadb.com/kb/en/mbroverlaps/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (85,6,'MBRTouches','Syntax\n------\n\nMBRTouches(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangles of the two\ngeometries g1 and g2 touch. Two geometries spatially touch if the interiors of\nthe geometries do not intersect, but the boundary of one of the geometries\nintersects either the boundary or the interior of the other.\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((4 4,4 7,7 7,7 4,4 4))\');\nSELECT mbrtouches(@g1,@g2);\n+---------------------+\n| mbrtouches(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbrtouches(@g1,@g2);\n+---------------------+\n| mbrtouches(@g1,@g2) |\n+---------------------+\n| 1 |\n+---------------------+\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 4,4 4,4 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((3 3,3 6,6 6,6 3,3 3))\');\nSELECT mbrtouches(@g1,@g2);\n+---------------------+\n| mbrtouches(@g1,@g2) |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/mbrtouches/','','https://mariadb.com/kb/en/mbrtouches/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (86,6,'MBRWithin','Syntax\n------\n\nMBRWithin(g1,g2)\n\nDescription\n-----------\n\nReturns 1 or 0 to indicate whether the Minimum Bounding Rectangle of g1 is\nwithin the Minimum Bounding Rectangle of g2. This tests the opposite\nrelationship as MBRContains().\n\nExamples\n--------\n\nSET @g1 = GeomFromText(\'Polygon((0 0,0 3,3 3,3 0,0 0))\');\nSET @g2 = GeomFromText(\'Polygon((0 0,0 5,5 5,5 0,0 0))\');\nSELECT MBRWithin(@g1,@g2), MBRWithin(@g2,@g1);\n+--------------------+--------------------+\n| MBRWithin(@g1,@g2) | MBRWithin(@g2,@g1) |\n+--------------------+--------------------+\n| 1 | 0 |\n+--------------------+--------------------+\n\nURL: https://mariadb.com/kb/en/mbrwithin/','','https://mariadb.com/kb/en/mbrwithin/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (87,7,'CASE OPERATOR','Syntax\n------\n\nCASE value WHEN [compare_value] THEN result [WHEN [compare_value] THEN\nresult ...] [ELSE result] END\n\nCASE WHEN [condition] THEN result [WHEN [condition] THEN result ...]\n[ELSE result] END\n\nDescription\n-----------\n\nThe first version returns the result where value=compare_value. The second\nversion returns the result for the first condition that is true. If there was\nno matching result value, the result after ELSE is returned, or NULL if there\nis no ELSE part.\n\nThere is also a CASE statement, which differs from the CASE operator described\nhere.\n\nExamples\n--------\n\nSELECT CASE 1 WHEN 1 THEN \'one\' WHEN 2 THEN \'two\' ELSE \'more\' END;\n+------------------------------------------------------------+\n| CASE 1 WHEN 1 THEN \'one\' WHEN 2 THEN \'two\' ELSE \'more\' END |\n+------------------------------------------------------------+\n| one |\n+------------------------------------------------------------+\n\nSELECT CASE WHEN 1>0 THEN \'true\' ELSE \'false\' END;\n+--------------------------------------------+\n| CASE WHEN 1>0 THEN \'true\' ELSE \'false\' END |\n+--------------------------------------------+\n| true |\n+--------------------------------------------+\n\nSELECT CASE BINARY \'B\' WHEN \'a\' THEN 1 WHEN \'b\' THEN 2 END;\n+-----------------------------------------------------+\n| CASE BINARY \'B\' WHEN \'a\' THEN 1 WHEN \'b\' THEN 2 END |\n+-----------------------------------------------------+\n| NULL |\n+-----------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/case-operator/','','https://mariadb.com/kb/en/case-operator/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (88,7,'IF Function','Syntax\n------\n\nIF(expr1,expr2,expr3)\n\nDescription\n-----------\n\nIf expr1 is TRUE (expr1 <> 0 and expr1 <> NULL) then IF() returns expr2;\notherwise it returns expr3. IF() returns a numeric or string value, depending\non the context in which it is used.\n\nNote: There is also an IF statement which differs from the IF() function\ndescribed here.\n\nExamples\n--------\n\nSELECT IF(1>2,2,3);\n+-------------+\n| IF(1>2,2,3) |\n+-------------+\n| 3 |\n+-------------+\n\nSELECT IF(1<2,\'yes\',\'no\');\n+--------------------+\n| IF(1<2,\'yes\',\'no\') |\n+--------------------+\n| yes |\n+--------------------+\n\nSELECT IF(STRCMP(\'test\',\'test1\'),\'no\',\'yes\');\n+---------------------------------------+\n| IF(STRCMP(\'test\',\'test1\'),\'no\',\'yes\') |\n+---------------------------------------+\n| no |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/if-function/','','https://mariadb.com/kb/en/if-function/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (89,7,'IFNULL','Syntax\n------\n\nIFNULL(expr1,expr2)\nNVL(expr1,expr2)\n\nDescription\n-----------\n\nIf expr1 is not NULL, IFNULL() returns expr1; otherwise it returns expr2.\nIFNULL() returns a numeric or string value, depending on the context in which\nit is used.\n\nFrom MariaDB 10.3, NVL() is an alias for IFNULL().\n\nExamples\n--------\n\nSELECT IFNULL(1,0); \n+-------------+\n| IFNULL(1,0) |\n+-------------+\n| 1 |\n+-------------+\n\nSELECT IFNULL(NULL,10);\n+-----------------+\n| IFNULL(NULL,10) |\n+-----------------+\n| 10 |\n+-----------------+\n\nSELECT IFNULL(1/0,10);\n+----------------+\n| IFNULL(1/0,10) |\n+----------------+\n| 10.0000 |\n+----------------+\n\nSELECT IFNULL(1/0,\'yes\');\n+-------------------+\n| IFNULL(1/0,\'yes\') |\n+-------------------+\n| yes |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/ifnull/','','https://mariadb.com/kb/en/ifnull/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (90,7,'NULLIF','Syntax\n------\n\nNULLIF(expr1,expr2)\n\nDescription\n-----------\n\nReturns NULL if expr1 = expr2 is true, otherwise returns expr1. This is the\nsame as CASE WHEN expr1 = expr2 THEN NULL ELSE expr1 END.\n\nExamples\n--------\n\nSELECT NULLIF(1,1);\n+-------------+\n| NULLIF(1,1) |\n+-------------+\n| NULL |\n+-------------+\n\nSELECT NULLIF(1,2);\n+-------------+\n| NULLIF(1,2) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/nullif/','','https://mariadb.com/kb/en/nullif/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (91,7,'NVL','MariaDB starting with 10.3\n--------------------------\nFrom MariaDB 10.3, NVL is a synonym for IFNULL.\n\nURL: https://mariadb.com/kb/en/nvl/','','https://mariadb.com/kb/en/nvl/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (92,7,'NVL2','MariaDB starting with 10.3\n--------------------------\nThe NLV2 function was introduced in MariaDB 10.3.0.\n\nSyntax\n------\n\nNVL2(expr1,expr2,expr3)\n\nDescription\n-----------\n\nThe NVL2 function returns a value based on whether a specified expression is\nNULL or not. If expr1 is not NULL, then NVL2 returns expr2. If expr1 is NULL,\nthen NVL2 returns expr3.\n\nExamples\n--------\n\nSELECT NVL2(NULL,1,2);\n+----------------+\n| NVL2(NULL,1,2) |\n+----------------+\n| 2 |\n+----------------+\n\nSELECT NVL2(\'x\',1,2);\n+---------------+\n| NVL2(\'x\',1,2) |\n+---------------+\n| 1 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/nvl2/','','https://mariadb.com/kb/en/nvl2/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (93,8,'SET TRANSACTION','Syntax\n------\n\nSET [GLOBAL | SESSION] TRANSACTION\n transaction_property [, transaction_property] ...\n\ntransaction_property:\n ISOLATION LEVEL level\n | READ WRITE\n | READ ONLY\n\nlevel:\n REPEATABLE READ\n | READ COMMITTED\n | READ UNCOMMITTED\n | SERIALIZABLE\n\nDescription\n-----------\n\nThis statement sets the transaction isolation level or the transaction access\nmode globally, for the current session, or for the next transaction:\n\n* With the GLOBAL keyword, the statement sets the default\n transaction level globally for all subsequent sessions. Existing sessions are\n unaffected.\n* With the SESSION keyword, the statement sets the default\n transaction level for all subsequent transactions performed within the\n current session.\n* Without any SESSION or GLOBAL keyword,\n the statement sets the isolation level for the next (not started) transaction\n performed within the current session.\n\nA change to the global default isolation level requires the SUPER privilege.\nAny session is free to change its session isolation level (even in the middle\nof a transaction), or the isolation level for its next transaction.\n\nIsolation Level\n---------------\n\nTo set the global default isolation level at server startup, use the\n--transaction-isolation=level option on the command line or in an option file.\nValues of level for this option use dashes rather than spaces, so the\nallowable values are READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, or\nSERIALIZABLE. For example, to set the default isolation level to REPEATABLE\nREAD, use these lines in the [mysqld] section of an option file:\n\n[mysqld]\ntransaction-isolation = REPEATABLE-READ\nTo determine the global and session transaction isolation levels at runtime,\ncheck the value of the tx_isolation system variable:\n\nSELECT @@GLOBAL.tx_isolation, @@tx_isolation;\n\nInnoDB supports each of the translation isolation levels described here using\ndifferent locking strategies. The default level is REPEATABLE READ. For\nadditional information about InnoDB record-level locks and how it uses them to\nexecute various types of statements, see InnoDB Lock Modes, and\nhttp://dev.mysql.com/doc/refman/en/innodb-locks-set.html.\n\nIsolation Levels\n----------------\n\nThe following sections describe how MariaDB supports the different transaction\nlevels.\n\nREAD UNCOMMITTED\n----------------\n\nSELECT statements are performed in a non-locking fashion, but a possible\nearlier version of a row might be used. Thus, using this isolation level, such\nreads are not consistent. This is also called a \"dirty read.\" Otherwise, this\nisolation level works like READ COMMITTED.\n\nREAD COMMITTED\n--------------\n\nA somewhat Oracle-like isolation level with respect to consistent\n(non-locking) reads: Each consistent read, even within the same transaction,\nsets and reads its own fresh snapshot. See\nhttp://dev.mysql.com/doc/refman/en/innodb-consistent-read.html.\n\nFor locking reads (SELECT with FOR UPDATE or LOCK IN SHARE MODE), InnoDB locks\nonly index records, not the gaps before them, and thus allows the free\ninsertion of new records next to locked records. For UPDATE and DELETE\nstatements, locking depends on whether the statement uses a unique index with\na unique search condition (such as WHERE id = 100), or a range-type search\ncondition (such as WHERE id > 100). For a unique index with a unique search\ncondition, InnoDB locks only the index record found, not the gap before it.\nFor range-type searches, InnoDB locks the index range scanned, using gap locks\nor next-key (gap plus index-record) locks to block insertions by other\nsessions into the gaps covered by the range. This is necessary because\n\"phantom rows\" must be blocked for MySQL replication and recovery to work.\n\nNote: If the READ COMMITTED isolation level is used or the\ninnodb_locks_unsafe_for_binlog system variable is enabled, there is no InnoDB\ngap locking except for foreign-key constraint checking and duplicate-key\nchecking. Also, record locks for non-matching rows are released after MariaDB\nhas evaluated the WHERE condition.If you use READ COMMITTED or enable\ninnodb_locks_unsafe_for_binlog, you must use row-based binary logging.\n\nREPEATABLE READ\n---------------\n\nThis is the default isolation level for InnoDB. For consistent reads, there is\nan important difference from the READ COMMITTED isolation level: All\nconsistent reads within the same transaction read the snapshot established by\nthe first read. This convention means that if you issue several plain\n(non-locking) SELECT statements within the same transaction, these SELECT\nstatements are consistent also with respect to each other. See\nhttp://dev.mysql.com/doc/refman/en/innodb-consistent-read.html.\n\nFor locking reads (SELECT with FOR UPDATE or LOCK IN SHARE MODE), UPDATE, and\nDELETE statements, locking depends on whether the statement uses a unique\nindex with a unique search condition, or a range-type search condition. For a\nunique index with a unique search condition, InnoDB locks only the index\nrecord found, not the gap before it. For other search conditions, InnoDB locks\nthe index range scanned, using gap locks or next-key (gap plus index-record)\nlocks to block insertions by other sessions into the gaps covered by the range.\n\nThis is the minimum isolation level for non-distributed XA transactions.\n\nSERIALIZABLE\n------------\n\nThis level is like REPEATABLE READ, but InnoDB implicitly converts all plain\nSELECT statements to SELECT ... LOCK IN SHARE MODE if autocommit is disabled.\nIf autocommit is enabled, the SELECT is its own transaction. It therefore is\nknown to be read only and can be serialized if performed as a consistent\n(non-locking) read and need not block for other transactions. (This means that\nto force a plain SELECT to block if other transactions have modified the\nselected rows, you should disable autocommit.)\n\nDistributed XA transactions should always use this isolation level.\n\nAccess Mode\n-----------\n\nThe access mode specifies whether the transaction is allowed to write data or\nnot. By default, transactions are in READ WRITE mode (see the tx_read_only\nsystem variable). READ ONLY mode allows the storage engine to apply\noptimizations that cannot be used for transactions which write data. The only\nexception to this rule is that read only transactions can perform DDL\nstatements on temporary tables.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the same\nstatement.\n\nREAD WRITE and READ ONLY can also be specified in the START TRANSACTION\nstatement, in which case the specified mode is only valid for one transaction.\n\nExamples\n--------\n\nSET GLOBAL TRANSACTION ISOLATION LEVEL SERIALIZABLE;\n\nAttempting to set the isolation level within an existing transaction without\nspecifying GLOBAL or SESSION.\n\nSTART TRANSACTION;\n\nSET TRANSACTION ISOLATION LEVEL SERIALIZABLE;\nERROR 1568 (25001): Transaction characteristics can\'t be changed while a\ntransaction is in progress\n\nURL: https://mariadb.com/kb/en/set-transaction/','','https://mariadb.com/kb/en/set-transaction/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (94,8,'START TRANSACTION','Syntax\n------\n\nSTART TRANSACTION [transaction_property [, transaction_property] ...] | BEGIN\n[WORK]\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\nSET autocommit = {0 | 1}\n\ntransaction_property:\n WITH CONSISTENT SNAPSHOT\n | READ WRITE\n | READ ONLY\n\nDescription\n-----------\n\nThe START TRANSACTION or BEGIN statement begins a new transaction. COMMIT\ncommits the current transaction, making its changes permanent. ROLLBACK rolls\nback the current transaction, canceling its changes. The SET autocommit\nstatement disables or enables the default autocommit mode for the current\nsession.\n\nSTART TRANSACTION and SET autocommit = 1 implicitly commit the current\ntransaction, if any.\n\nThe optional WORK keyword is supported for COMMIT and ROLLBACK, as are the\nCHAIN and RELEASE clauses. CHAIN and RELEASE can be used for additional\ncontrol over transaction completion. The value of the completion_type system\nvariable determines the default completion behavior.\n\nThe AND CHAIN clause causes a new transaction to begin as soon as the current\none ends, and the new transaction has the same isolation level as the\njust-terminated transaction. The RELEASE clause causes the server to\ndisconnect the current client session after terminating the current\ntransaction. Including the NO keyword suppresses CHAIN or RELEASE completion,\nwhich can be useful if the completion_type system variable is set to cause\nchaining or release completion by default.\n\nAccess Mode\n-----------\n\nThe access mode specifies whether the transaction is allowed to write data or\nnot. By default, transactions are in READ WRITE mode (see the tx_read_only\nsystem variable). READ ONLY mode allows the storage engine to apply\noptimizations that cannot be used for transactions which write data. The only\nexception to this rule is that read only transactions can perform DDL\nstatements on temporary tables.\n\nIt is not permitted to specify both READ WRITE and READ ONLY in the same\nstatement.\n\nREAD WRITE and READ ONLY can also be specified in the SET TRANSACTION\nstatement, in which case the specified mode is valid for all sessions, or for\nall subsequent transaction used by the current session.\n\nautocommit\n----------\n\nBy default, MariaDB runs with autocommit mode enabled. This means that as soon\nas you execute a statement that updates (modifies) a table, MariaDB stores the\nupdate on disk to make it permanent. To disable autocommit mode, use the\nfollowing statement:\n\nSET autocommit=0;\n\nAfter disabling autocommit mode by setting the autocommit variable to zero,\nchanges to transaction-safe tables (such as those for InnoDB or NDBCLUSTER)\nare not made permanent immediately. You must use COMMIT to store your changes\nto disk or ROLLBACK to ignore the changes.\n\nTo disable autocommit mode for a single series of statements, use the START\nTRANSACTION statement.\n\nDDL Statements\n--------------\n\nDDL statements (CREATE, ALTER, DROP) and administrative statements (FLUSH,\nRESET, OPTIMIZE, ANALYZE, CHECK, REPAIR, CACHE INDEX), transaction management\nstatements (BEGIN, START TRANSACTION) and LOAD DATA INFILE, cause an implicit\nCOMMIT and start a new transaction. An exception to this rule are the DDL that\noperate on temporary tables: you can CREATE, ALTER and DROP them without\ncausing any COMMIT, but those actions cannot be rolled back. This means that\nif you call ROLLBACK, the temporary tables you created in the transaction will\nremain, while the rest of the transaction will be rolled back.\n\nTransactions cannot be used in Stored Functions or Triggers. In Stored\nProcedures and Events BEGIN is not allowed, so you should use START\nTRANSACTION instead.\n\nA transaction acquires a metadata lock on every table it accesses to prevent\nother connections from altering their structure. The lock is released at the\nend of the transaction. This happens even with non-transactional storage\nengines (like MEMORY or CONNECT), so it makes sense to use transactions with\nnon-transactional tables.\n\nin_transaction\n--------------\n\nThe in_transaction system variable is a session-only, read-only variable that\nreturns 1 inside a transaction, and 0 if not in a transaction.\n\nWITH CONSISTENT SNAPSHOT\n------------------------\n\nThe WITH CONSISTENT SNAPSHOT option starts a consistent read for storage\nengines such as InnoDB that can do so, the same as if a START TRANSACTION\nfollowed by a SELECT from any InnoDB table was issued.\n\nSee Enhancements for START TRANSACTION WITH CONSISTENT SNAPSHOT.\n\nExamples\n--------\n\nSTART TRANSACTION;\nSELECT @A:=SUM(salary) FROM table1 WHERE type=1;\nUPDATE table2 SET summary=@A WHERE type=1;\nCOMMIT;\n\nURL: https://mariadb.com/kb/en/start-transaction/','','https://mariadb.com/kb/en/start-transaction/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (95,8,'COMMIT','The COMMIT statement ends a transaction, saving any changes to the data so\nthat they become visible to subsequent transactions. Also, unlocks metadata\nchanged by current transaction. If autocommit is set to 1, an implicit commit\nis performed after each statement. Otherwise, all transactions which don\'t end\nwith an explicit COMMIT are implicitly rollbacked and the changes are lost.\nThe ROLLBACK statement can be used to do this explicitly.\n\nThe required syntax for the COMMIT statement is as follows:\n\nCOMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]\n\nCOMMIT is the more important transaction terminator, as well as the more\ninteresting one. The basic form of the COMMIT statement is simply the keyword\nCOMMIT (the keyword WORK is simply noise and can be omitted without changing\nthe effect).\n\nThe optional AND CHAIN clause is a convenience for initiating a new\ntransaction as soon as the old transaction terminates. If AND CHAIN is\nspecified, then there is effectively nothing between the old and new\ntransactions, although they remain separate. The characteristics of the new\ntransaction will be the same as the characteristics of the old one — that is,\nthe new transaction will have the same access mode, isolation level and\ndiagnostics area size (we\'ll discuss all of these shortly) as the transaction\njust terminated.\n\nRELEASE tells the server to disconnect the client immediately after the\ncurrent transaction.\n\nThere are NO RELEASE and AND NO CHAIN options. By default, commits do not\nRELEASE or CHAIN, but it\'s possible to change this default behavior with the\ncompletion_type server system variable. In this case, the AND NO CHAIN and NO\nRELEASE options override the server default.\n\nURL: https://mariadb.com/kb/en/commit/','','https://mariadb.com/kb/en/commit/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (96,8,'ROLLBACK','The ROLLBACK statement rolls back (ends) a transaction, destroying any changes\nto SQL-data so that they never become visible to subsequent transactions. The\nrequired syntax for the ROLLBACK statement is as follows.\n\nROLLBACK [ WORK ] [ AND [ NO ] CHAIN ] \n[ TO [ SAVEPOINT ] { | } ]\n\nThe ROLLBACK statement will either end a transaction, destroying all data\nchanges that happened during any of the transaction, or it will just destroy\nany data changes that happened since you established a savepoint. The basic\nform of the ROLLBACK statement is just the keyword ROLLBACK (the keyword WORK\nis simply noise and can be omitted without changing the effect).\n\nThe optional AND CHAIN clause is a convenience for initiating a new\ntransaction as soon as the old transaction terminates. If AND CHAIN is\nspecified, then there is effectively nothing between the old and new\ntransactions, although they remain separate. The characteristics of the new\ntransaction will be the same as the characteristics of the old one — that is,\nthe new transaction will have the same access mode, isolation level and\ndiagnostics area size (we\'ll discuss all of these shortly) as the transaction\njust terminated. The AND NO CHAIN option just tells your DBMS to end the\ntransaction — that is, these four SQL statements are equivalent:\n\nROLLBACK; \nROLLBACK WORK; \nROLLBACK AND NO CHAIN; \nROLLBACK WORK AND NO CHAIN;\n\nAll of them end a transaction without saving any transaction characteristics.\nThe only other options, the equivalent statements:\n\nROLLBACK AND CHAIN;\nROLLBACK WORK AND CHAIN;\n\nboth tell your DBMS to end a transaction, but to save that transaction\'s\ncharacteristics for the next transaction.\n\nROLLBACK is much simpler than COMMIT: it may involve no more than a few\ndeletions (of Cursors, locks, prepared SQL statements and log-file entries).\nIt\'s usually assumed that ROLLBACK can\'t fail, although such a thing is\nconceivable (for example, an encompassing transaction might reject an attempt\nto ROLLBACK because it\'s lining up for a COMMIT).\n\nROLLBACK cancels all effects of a transaction. It does not cancel effects on\nobjects outside the DBMS\'s control (for example the values in host program\nvariables or the settings made by some SQL/CLI function calls). But in\ngeneral, it is a convenient statement for those situations when you say \"oops,\nthis isn\'t working\" or when you simply don\'t care whether your temporary work\nbecomes permanent or not.\n\nHere is a moot question. If all you\'ve been doing is SELECTs, so that there\nhave been no data changes, should you end the transaction with ROLLBACK or\nCOMMIT? It shouldn\'t really matter because both ROLLBACK and COMMIT do the\nsame transaction-terminating job. However, the popular conception is that\nROLLBACK implies failure, so after a successful series of SELECT statements\nthe convention is to end the transaction with COMMIT rather than ROLLBACK.\n\nMariaDB (and most other DBMSs) supports rollback of SQL-data change\nstatements, but not of SQL-Schema statements. This means that if you use any\nof CREATE, ALTER, DROP, GRANT, REVOKE, you are implicitly committing at\nexecution time.\n\nINSERT INTO Table_2 VALUES(5); \nDROP TABLE Table_3 CASCADE; \nROLLBACK;\n\nThe result will be that both the INSERT and the DROP will go through as\nseparate transactions so the ROLLBACK will have no effect.\n\nURL: https://mariadb.com/kb/en/rollback/','','https://mariadb.com/kb/en/rollback/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (97,8,'LOCK TABLES','Syntax\n------\n\nLOCK TABLE[S]\n tbl_name [[AS] alias] lock_type\n [, tbl_name [[AS] alias] lock_type] ...\n [WAIT n|NOWAIT]\n\nlock_type:\n READ [LOCAL]\n | [LOW_PRIORITY] WRITE\n | WRITE CONCURRENT\n\nUNLOCK TABLES\n\nDescription\n-----------\n\nThe lock_type can be one of:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| READ | Read lock, no writes allowed |\n+---------------------------+------------------------------------------------+\n| READ LOCAL | Read lock, but allow concurrent inserts |\n+---------------------------+------------------------------------------------+\n| WRITE | Exclusive write lock. No other connections |\n| | can read or write to this table |\n+---------------------------+------------------------------------------------+\n| LOW_PRIORITY WRITE | Exclusive write lock, but allow new read |\n| | locks on the table until we get the write |\n| | lock. |\n+---------------------------+------------------------------------------------+\n| WRITE CONCURRENT | Exclusive write lock, but allow READ LOCAL |\n| | locks to the table. |\n+---------------------------+------------------------------------------------+\n\nMariaDB enables client sessions to acquire table locks explicitly for the\npurpose of cooperating with other sessions for access to tables, or to prevent\nother sessions from modifying tables during periods when a session requires\nexclusive access to them. A session can acquire or release locks only for\nitself. One session cannot acquire locks for another session or release locks\nheld by another session.\n\nLocks may be used to emulate transactions or to get more speed when updating\ntables.\n\nLOCK TABLES explicitly acquires table locks for the current client session.\nTable locks can be acquired for base tables or views. To use LOCK TABLES, you\nmust have the LOCK TABLES privilege, and the SELECT privilege for each object\nto be locked. See GRANT\n\nFor view locking, LOCK TABLES adds all base tables used in the view to the set\nof tables to be locked and locks them automatically. If you lock a table\nexplicitly with LOCK TABLES, any tables used in triggers are also locked\nimplicitly, as described in Triggers and Implicit Locks.\n\nUNLOCK TABLES explicitly releases any table locks held by the current session.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nLimitations\n-----------\n\n* LOCK TABLES doesn\'t work when using Galera cluster. You may experience\ncrashes or locks when used with Galera.\n* LOCK TABLES works on XtraDB/InnoDB tables only if the innodb_table_locks\nsystem variable is set to 1 (the default) and autocommit is set to 0 (1 is\ndefault). Please note that no error message will be returned on LOCK TABLES\nwith innodb_table_locks = 0.\n* LOCK TABLES implicitly commits the active transaction, if any. Also,\nstarting a transaction always releases all table locks acquired with LOCK\nTABLES. This means that there is no way to have table locks and an active\ntransaction at the same time. The only exceptions are the transactions in\nautocommit mode. To preserve the data integrity between transactional and\nnon-transactional tables, the GET_LOCK() function can be used.\n* When using LOCK TABLES on a TEMPORARY table, it will always be locked with a\nWRITE lock.\n* While a connection holds an explicit read lock on a table, it cannot modify\nit. If you try, the following error will be produced:\n\nERROR 1099 (HY000): Table \'tab_name\' was locked with a READ lock and can\'t be\nupdated\n\n* While a connection holds an explicit lock on a table, it cannot access a\nnon-locked table. If you try, the following error will be produced:\n\nERROR 1100 (HY000): Table \'tab_name\' was not locked with LOCK TABLES\n\n* While a connection holds an explicit lock on a table, it cannot issue the\nfollowing: INSERT DELAYED, CREATE TABLE, CREATE TABLE ... LIKE, and DDL\nstatements involving stored programs and views (except for triggers). If you\ntry, the following error will be produced:\n\nERROR 1192 (HY000): Can\'t execute the given command because you have active\nlocked tables or an active transaction\n\n* LOCK TABLES can not be used in stored routines - if you try, the following\nerror will be produced on creation. This restriction was removed in MariaDB\n10.6.2:\n\nERROR 1314 (0A000): LOCK is not allowed in stored procedures\n\nURL: https://mariadb.com/kb/en/lock-tables/','','https://mariadb.com/kb/en/lock-tables/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (98,8,'SAVEPOINT','Syntax\n------\n\nSAVEPOINT identifier\nROLLBACK [WORK] TO [SAVEPOINT] identifier\nRELEASE SAVEPOINT identifier\n\nDescription\n-----------\n\nInnoDB supports the SQL statements SAVEPOINT, ROLLBACK TO SAVEPOINT, RELEASE\nSAVEPOINT and the optional WORK keyword for ROLLBACK.\n\nEach savepoint must have a legal MariaDB identifier. A savepoint is a named\nsub-transaction.\n\nNormally ROLLBACK undoes the changes performed by the whole transaction. When\nused with the TO clause, it undoes the changes performed after the specified\nsavepoint, and erases all subsequent savepoints. However, all locks that have\nbeen acquired after the save point will survive. RELEASE SAVEPOINT does not\nrollback or commit any changes, but removes the specified savepoint.\n\nWhen the execution of a trigger or a stored function begins, it is not\npossible to use statements which reference a savepoint which was defined from\nout of that stored program.\n\nWhen a COMMIT (including implicit commits) or a ROLLBACK statement (with no TO\nclause) is performed, they act on the whole transaction, and all savepoints\nare removed.\n\nErrors\n------\n\nIf COMMIT or ROLLBACK is issued and no transaction was started, no error is\nreported.\n\nIf SAVEPOINT is issued and no transaction was started, no error is reported\nbut no savepoint is created. When ROLLBACK TO SAVEPOINT or RELEASE SAVEPOINT\nis called for a savepoint that does not exist, an error like this is issued:\n\nERROR 1305 (42000): SAVEPOINT svp_name does not exist\n\nURL: https://mariadb.com/kb/en/savepoint/','','https://mariadb.com/kb/en/savepoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (99,8,'Metadata Locking','MariaDB supports metadata locking. This means that when a transaction\n(including XA transactions) uses a table, it locks its metadata until the end\nof transaction. Non-transactional tables are also locked, as well as views and\nobjects which are related to locked tables/views (stored functions, triggers,\netc). When a connection tries to use a DDL statement (like an ALTER TABLE)\nwhich modifies a table that is locked, that connection is queued, and has to\nwait until it\'s unlocked. Using savepoints and performing a partial rollback\ndoes not release metadata locks.\n\nLOCK TABLES ... WRITE are also queued. Some wrong statements which produce an\nerror may not need to wait for the lock to be freed.\n\nThe metadata lock\'s timeout is determined by the value of the\nlock_wait_timeout server system variable (in seconds). However, note that its\ndefault value is 31536000 (1 year, MariaDB <= 10.2.3), or 86400 (1 day,\nMariaDB >= 10.2.4). If this timeout is exceeded, the following error is\nreturned:\n\nERROR 1205 (HY000): Lock wait timeout exceeded; try restarting transaction\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table stores information about existing metadata locks.\n\nMariaDB starting with 10.5.2\n----------------------------\nFrom MariaDB 10.5, the Performance Schema metadata_locks table contains\nmetadata lock information.\n\nExample\n-------\n\nLet\'s use the following MEMORY (non-transactional) table:\n\nCREATE TABLE t (a INT) ENGINE = MEMORY;\n\nConnection 1 starts a transaction, and INSERTs a row into t:\n\nSTART TRANSACTION;\n\nINSERT INTO t SET a=1;\n\nt\'s metadata is now locked by connection 1. Connection 2 tries to alter t, but\nhas to wait:\n\nALTER TABLE t ADD COLUMN b INT;\n\nConnection 2\'s prompt is blocked now.\n\nNow connection 1 ends the transaction:\n\nCOMMIT;\n\n...and connection 2 finally gets the output of its command:\n\nQuery OK, 1 row affected (35.23 sec)\nRecords: 1 Duplicates: 0 Warnings: 0\n\nURL: https://mariadb.com/kb/en/metadata-locking/','','https://mariadb.com/kb/en/metadata-locking/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (100,8,'Transaction Timeouts','MariaDB has always had the wait_timeout and interactive_timeout settings,\nwhich close connections after a certain period of inactivity.\n\nHowever, these are by default set to a long wait period. In situations where\ntransactions may be started, but not committed or rolled back, more granular\ncontrol and a shorter timeout may be desirable so as to avoid locks being held\nfor too long.\n\nMariaDB 10.3 introduced three new variables to handle this situation.\n\n* idle_transaction_timeout (all transactions)\n* idle_write_transaction_timeout (write transactions - called\nidle_readwrite_transaction_timeout until MariaDB 10.3.2)\n* idle_readonly_transaction_timeout (read transactions)\n\nThese accept a time in seconds to time out, by closing the connection,\ntransactions that are idle for longer than this period. By default all are set\nto zero, or no timeout.\n\nidle_transaction_timeout affects all transactions,\nidle_write_transaction_timeout affects write transactions only and\nidle_readonly_transaction_timeout affects read transactions only. The latter\ntwo variables work independently. However, if either is set along with\nidle_transaction_timeout, the settings for idle_write_transaction_timeout or\nidle_readonly_transaction_timeout will take precedence.\n\nExamples\n--------\n\nSET SESSION idle_transaction_timeout=2;\nBEGIN;\nSELECT * FROM t;\nEmpty set (0.000 sec)\n## wait 3 seconds\nSELECT * FROM t;\nERROR 2006 (HY000): MySQL server has gone away\n\nSET SESSION idle_write_transaction_timeout=2;\nBEGIN;\nSELECT * FROM t;\nEmpty set (0.000 sec)\n## wait 3 seconds\nSELECT * FROM t;\nEmpty set (0.000 sec)\nINSERT INTO t VALUES(1);\n## wait 3 seconds\nSELECT * FROM t;\nERROR 2006 (HY000): MySQL server has gone away\n\nSET SESSION idle_transaction_timeout=2, SESSION\nidle_readonly_transaction_timeout=10;\nBEGIN;\nSELECT * FROM t;\nEmpty set (0.000 sec)\n ## wait 3 seconds\nSELECT * FROM t;\nEmpty set (0.000 sec)\n## wait 11 seconds\nSELECT * FROM t;\nERROR 2006 (HY000): MySQL server has gone away\n\nURL: https://mariadb.com/kb/en/transaction-timeouts/','','https://mariadb.com/kb/en/transaction-timeouts/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (101,8,'UNLOCK TABLES','Syntax\n------\n\nUNLOCK TABLES\n\nDescription\n-----------\n\nUNLOCK TABLES explicitly releases any table locks held by the current session.\nSee LOCK TABLES for more information.\n\nIn addition to releasing table locks acquired by the LOCK TABLES statement,\nthe UNLOCK TABLES statement also releases the global read lock acquired by the\nFLUSH TABLES WITH READ LOCK statement. The FLUSH TABLES WITH READ LOCK\nstatement is very useful for performing backups. See FLUSH for more\ninformation about FLUSH TABLES WITH READ LOCK.\n\nURL: https://mariadb.com/kb/en/transactions-unlock-tables/','','https://mariadb.com/kb/en/transactions-unlock-tables/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (102,8,'WAIT and NOWAIT','MariaDB starting with 10.3.0\n----------------------------\nMariaDB 10.3.0 introduced extended syntax so that it is possible to set\ninnodb_lock_wait_timeout and lock_wait_timeout for the following statements:\n\nSyntax\n------\n\nALTER TABLE tbl_name [WAIT n|NOWAIT] ...\nCREATE ... INDEX ON tbl_name (index_col_name, ...) [WAIT n|NOWAIT] ...\nDROP INDEX ... [WAIT n|NOWAIT]\nDROP TABLE tbl_name [WAIT n|NOWAIT] ...\nLOCK TABLE ... [WAIT n|NOWAIT]\nOPTIMIZE TABLE tbl_name [WAIT n|NOWAIT]\nRENAME TABLE tbl_name [WAIT n|NOWAIT] ...\nSELECT ... FOR UPDATE [WAIT n|NOWAIT]\nSELECT ... LOCK IN SHARE MODE [WAIT n|NOWAIT]\nTRUNCATE TABLE tbl_name [WAIT n|NOWAIT]\n\nDescription\n-----------\n\nThe lock wait timeout can be explicitly set in the statement by using either\nWAIT n (to set the wait in seconds) or NOWAIT, in which case the statement\nwill immediately fail if the lock cannot be obtained. WAIT 0 is equivalent to\nNOWAIT.\n\nURL: https://mariadb.com/kb/en/wait-and-nowait/','','https://mariadb.com/kb/en/wait-and-nowait/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (103,8,'XA Transactions','Overview\n--------\n\nThe MariaDB XA implementation is based on the X/Open CAE document Distributed\nTransaction Processing: The XA Specification. This document is published by\nThe Open Group and available at\nhttp://www.opengroup.org/public/pubs/catalog/c193.htm.\n\nXA transactions are designed to allow distributed transactions, where a\ntransaction manager (the application) controls a transaction which involves\nmultiple resources. Such resources are usually DBMSs, but could be resources\nof any type. The whole set of required transactional operations is called a\nglobal transaction. Each subset of operations which involve a single resource\nis called a local transaction. XA used a 2-phases commit (2PC). With the first\ncommit, the transaction manager tells each resource to prepare an effective\ncommit, and waits for a confirm message. The changes are not still made\neffective at this point. If any of the resources encountered an error, the\ntransaction manager will rollback the global transaction. If all resources\ncommunicate that the first commit is successful, the transaction manager can\nrequire a second commit, which makes the changes effective.\n\nIn MariaDB, XA transactions can only be used with storage engines that support\nthem. At least InnoDB, TokuDB, SPIDER and MyRocks support them. For InnoDB,\nuntil MariaDB 10.2, XA transactions can be disabled by setting the\ninnodb_support_xa server system variable to 0. From MariaDB 10.3, XA\ntransactions are always supported.\n\nLike regular transactions, XA transactions create metadata locks on accessed\ntables.\n\nXA transactions require REPEATABLE READ as a minimum isolation level. However,\ndistributed transactions should always use SERIALIZABLE.\n\nTrying to start more than one XA transaction at the same time produces a 1400\nerror (SQLSTATE \'XAE09\'). The same error is produced when attempting to start\nan XA transaction while a regular transaction is in effect. Trying to start a\nregular transaction while an XA transaction is in effect produces a 1399 error\n(SQLSTATE \'XAE07\').\n\nThe statements that cause an implicit COMMIT for regular transactions produce\na 1400 error (SQLSTATE \'XAE09\') if a XA transaction is in effect.\n\nInternal XA vs External XA\n--------------------------\n\nXA transactions are an overloaded term in MariaDB. If a storage engine is\nXA-capable, it can mean one or both of these:\n\n* It supports MariaDB\'s internal two-phase commit API. This is transparent to\nthe user. Sometimes this is called \"internal XA\", since MariaDB\'s internal\ntransaction coordinator log can handle coordinating these transactions.\n\n* It supports XA transactions, with the XA START, XA PREPARE, XA COMMIT, etc.\nstatements. Sometimes this is called \"external XA\", since it requires the use\nof an external transaction coordinator to use this feature properly.\n\nTransaction Coordinator Log\n---------------------------\n\nIf you have two or more XA-capable storage engines enabled, then a transaction\ncoordinator log must be available.\n\nThere are currently two implementations of the transaction coordinator log:\n\n* Binary log-based transaction coordinator log\n* Memory-mapped file-based transaction coordinator log\n\nIf the binary log is enabled on a server, then the server will use the binary\nlog-based transaction coordinator log. Otherwise, it will use the\nmemory-mapped file-based transaction coordinator log.\n\nSee Transaction Coordinator Log for more information.\n\nSyntax\n------\n\nXA {START|BEGIN} xid [JOIN|RESUME]\n\nXA END xid [SUSPEND [FOR MIGRATE]]\n\nXA PREPARE xid\n\nXA COMMIT xid [ONE PHASE]\n\nXA ROLLBACK xid\n\nXA RECOVER [FORMAT=[\'RAW\'|\'SQL\']]\n\nxid: gtrid [, bqual [, formatID ]]\n\nThe interface to XA transactions is a set of SQL statements starting with XA.\nEach statement changes a transaction\'s state, determining which actions it can\nperform. A transaction which does not exist is in the NON-EXISTING state.\n\nXA START (or BEGIN) starts a transaction and defines its xid (a transaction\nidentifier). The JOIN or RESUME keywords have no effect. The new transaction\nwill be in ACTIVE state.\n\nThe xid can have 3 components, though only the first one is mandatory. gtrid\nis a quoted string representing a global transaction identifier. bqual is a\nquoted string representing a local transaction identifier. formatID is an\nunsigned integer indicating the format used for the first two components; if\nnot specified, defaults to 1. MariaDB does not interpret in any way these\ncomponents, and only uses them to identify a transaction. xids of transactions\nin effect must be unique.\n\nXA END declares that the specified ACTIVE transaction is finished and it\nchanges its state to IDLE. SUSPEND [FOR MIGRATE] has no effect.\n\nXA PREPARE prepares an IDLE transaction for commit, changing its state to\nPREPARED. This is the first commit.\n\nXA COMMIT definitely commits and terminates a transaction which has already\nbeen PREPARED. If the ONE PHASE clause is specified, this statements performs\na 1-phase commit on an IDLE transaction.\n\nXA ROLLBACK rolls back and terminates an IDLE or PREPARED transaction.\n\nXA RECOVER shows information about all PREPARED transactions.\n\nWhen trying to execute an operation which is not allowed for the transaction\'s\ncurrent state, an error is produced:\n\nXA COMMIT \'test\' ONE PHASE;\nERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global\ntransaction is in the ACTIVE state\n\nXA COMMIT \'test2\';\nERROR 1399 (XAE07): XAER_RMFAIL: The command cannot be executed when global\ntransaction is in the NON-EXISTING state\n\nXA RECOVER\n----------\n\nThe XA RECOVER statement shows information about all transactions which are in\nthe PREPARED state. It does not matter which connection created the\ntransaction: if it has been PREPARED, it appears. But this does not mean that\na connection can commit or rollback a transaction which was started by another\nconnection. Note that transactions using a 1-phase commit are never in the\nPREPARED state, so they cannot be shown by XA RECOVER.\n\nXA RECOVER produces four columns:\n\nXA RECOVER;\n+----------+--------------+--------------+------+\n| formatID | gtrid_length | bqual_length | data |\n+----------+--------------+--------------+------+\n| 1 | 4 | 0 | test |\n+----------+--------------+--------------+------+\n\nMariaDB starting with 10.3.3\n----------------------------\nYou can use XA RECOVER FORMAT=\'SQL\' to get the data in a human readable form\nthat can be directly copy-pasted into XA COMMIT or XA ROLLBACK. This is\nparticularly useful for binary xid generated by some transaction coordinators.\n\nformatID is the formatID part of xid.\n\ndata are the gtrid and bqual parts of xid, concatenated.\n\ngtrid_length and bqual_length are the lengths of gtrid and bqual, respectevely.\n\nExamples\n--------\n\n2-phases commit:\n\nXA START \'test\';\n\nINSERT INTO t VALUES (1,2);\n\nXA END \'test\';\n\nXA PREPARE \'test\';\n\nXA COMMIT \'test\';\n\n1-phase commit:\n\nXA START \'test\';\n\nINSERT INTO t VALUES (1,2);\n\nXA END \'test\';\n\nXA COMMIT \'test\' ONE PHASE;\n\nHuman-readable:\n\nxa start \'12\\r34\\t67\\v78\', \'abc\\ndef\', 3;\n\ninsert t1 values (40);\n\nxa end \'12\\r34\\t67\\v78\', \'abc\\ndef\', 3;\n\nxa prepare \'12\\r34\\t67\\v78\', \'abc\\ndef\', 3;\n\nxa recover format=\'RAW\';\n+----------+--------------+--------------+--------------------+\n| formatID | gtrid_length | bqual_length | data |\n+----------+--------------+--------------+--------------------+\n34 67v78abc 11 | 7 | 12\ndef |\n+----------+--------------+--------------+--------------------+\n\nxa recover format=\'SQL\';\n+----------+--------------+--------------+-------------------------------------\n---------+\n| formatID | gtrid_length | bqual_length | data \n |\n+----------+--------------+--------------+-------------------------------------\n---------+\n| 3 | 11 | 7 |\nX\'31320d3334093637763738\',X\'6162630a646566\',3 |\n+----------+--------------+--------------+-------------------------------------\n---------+\n\nxa rollback X\'31320d3334093637763738\',X\'6162630a646566\',3;\n\nKnown Issues\n------------\n\nMariaDB Galera Cluster\n----------------------\n\nMariaDB Galera Cluster does not support XA transactions.\n\nHowever, MariaDB Galera Cluster builds include a built-in plugin called wsrep.\nPrior to MariaDB 10.4.3, this plugin was internally considered an XA-capable\nstorage engine. Consequently, these MariaDB Galera Cluster builds have\nmultiple XA-capable storage engines by default, even if the only \"real\"\nstorage engine that supports external XA transactions enabled on these builds\nby default is InnoDB. Therefore, when using one these builds MariaDB would be\nforced to use a transaction coordinator log by default, which could have\nperformance implications.\n\nSee Transaction Coordinator Log Overview: MariaDB Galera Cluster for more\ninformation.\n\nURL: https://mariadb.com/kb/en/xa-transactions/','','https://mariadb.com/kb/en/xa-transactions/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (104,10,'CREATE USER','Syntax\n------\n\nCREATE [OR REPLACE] USER [IF NOT EXISTS] \n user_specification [,user_specification ...] \n [REQUIRE {NONE | tls_option [[AND] tls_option ...] }]\n [WITH resource_option [resource_option ...] ]\n [lock_option] [password_option]\n\nuser_specification:\n username [authentication_option]\n\nauthentication_option:\n IDENTIFIED BY \'password\'\n | IDENTIFIED BY PASSWORD \'password_hash\'\n | IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule ...]\n\nauthentication_rule:\n authentication_plugin\n | authentication_plugin {USING|AS} \'authentication_string\'\n | authentication_plugin {USING|AS} PASSWORD(\'password\')\n\ntls_option:\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n\nresource_option:\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n | MAX_STATEMENT_TIME time\n\npassword_option:\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n\nlock_option:\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nDescription\n-----------\n\nThe CREATE USER statement creates new MariaDB accounts. To use it, you must\nhave the global CREATE USER privilege or the INSERT privilege for the mysql\ndatabase. For each account, CREATE USER creates a new row in mysql.user (until\nMariaDB 10.3 this is a table, from MariaDB 10.4 it\'s a view) or\nmysql.global_priv_table (from MariaDB 10.4) that has no privileges.\n\nIf any of the specified accounts, or any permissions for the specified\naccounts, already exist, then the server returns ERROR 1396 (HY000). If an\nerror occurs, CREATE USER will still create the accounts that do not result in\nan error. Only one error is produced for all users which have not been created:\n\nERROR 1396 (HY000): \n Operation CREATE USER failed for \'u1\'@\'%\',\'u2\'@\'%\'\n\nCREATE USER, DROP USER, CREATE ROLE, and DROP ROLE all produce the same error\ncode when they fail.\n\nSee Account Names below for details on how account names are specified.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it is basically a shortcut for:\n\nDROP USER IF EXISTS name;\nCREATE USER name ...;\n\nFor example:\n\nCREATE USER foo2@test IDENTIFIED BY \'password\';\nERROR 1396 (HY000): Operation CREATE USER failed for \'foo2\'@\'test\'\n\nCREATE OR REPLACE USER foo2@test IDENTIFIED BY \'password\';\nQuery OK, 0 rows affected (0.00 sec)\n\nIF NOT EXISTS\n-------------\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified user already exists.\n\nFor example:\n\nCREATE USER foo2@test IDENTIFIED BY \'password\';\nERROR 1396 (HY000): Operation CREATE USER failed for \'foo2\'@\'test\'\n\nCREATE USER IF NOT EXISTS foo2@test IDENTIFIED BY \'password\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+----------------------------------------------------+\n| Level | Code | Message |\n+-------+------+----------------------------------------------------+\n| Note | 1973 | Can\'t create user \'foo2\'@\'test\'; it already exists |\n+-------+------+----------------------------------------------------+\n\nAuthentication Options\n----------------------\n\nIDENTIFIED BY \'password\'\n------------------------\n\nThe optional IDENTIFIED BY clause can be used to provide an account with a\npassword. The password should be specified in plain text. It will be hashed by\nthe PASSWORD function prior to being stored in the\nmysql.user/mysql.global_priv_table table.\n\nFor example, if our password is mariadb, then we can create the user with:\n\nCREATE USER foo2@test IDENTIFIED BY \'mariadb\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED BY PASSWORD \'password_hash\'\n--------------------------------------\n\nThe optional IDENTIFIED BY PASSWORD clause can be used to provide an account\nwith a password that has already been hashed. The password should be specified\nas a hash that was provided by the PASSWORD function. It will be stored in the\nmysql.user/mysql.global_priv_table table as-is.\n\nFor example, if our password is mariadb, then we can find the hash with:\n\nSELECT PASSWORD(\'mariadb\');\n+-------------------------------------------+\n| PASSWORD(\'mariadb\') |\n+-------------------------------------------+\n| *54958E764CE10E50764C2EECBB71D01F08549980 |\n+-------------------------------------------+\n1 row in set (0.00 sec)\n\nAnd then we can create a user with the hash:\n\nCREATE USER foo2@test IDENTIFIED BY PASSWORD\n\'*54958E764CE10E50764C2EECBB71D01F08549980\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED {VIA|WITH} authentication_plugin\n-------------------------------------------\n\nThe optional IDENTIFIED VIA authentication_plugin allows you to specify that\nthe account should be authenticated by a specific authentication plugin. The\nplugin name must be an active authentication plugin as per SHOW PLUGINS. If it\ndoesn\'t show up in that output, then you will need to install it with INSTALL\nPLUGIN or INSTALL SONAME.\n\nFor example, this could be used with the PAM authentication plugin:\n\nCREATE USER foo2@test IDENTIFIED VIA pam;\n\nSome authentication plugins allow additional arguments to be specified after a\nUSING or AS keyword. For example, the PAM authentication plugin accepts a\nservice name:\n\nCREATE USER foo2@test IDENTIFIED VIA pam USING \'mariadb\';\n\nThe exact meaning of the additional argument would depend on the specific\nauthentication plugin.\n\nMariaDB starting with 10.4.0\n----------------------------\nThe USING or AS keyword can also be used to provide a plain-text password to a\nplugin if it\'s provided as an argument to the PASSWORD() function. This is\nonly valid for authentication plugins that have implemented a hook for the\nPASSWORD() function. For example, the ed25519 authentication plugin supports\nthis:\n\nCREATE USER safe@\'%\' IDENTIFIED VIA ed25519 USING PASSWORD(\'secret\');\n\nMariaDB starting with 10.4.3\n----------------------------\nOne can specify many authentication plugins, they all work as alternatives\nways of authenticating a user:\n\nCREATE USER safe@\'%\' IDENTIFIED VIA ed25519 USING PASSWORD(\'secret\') OR\nunix_socket;\n\nBy default, when you create a user without specifying an authentication\nplugin, MariaDB uses the mysql_native_password plugin.\n\nTLS Options\n-----------\n\nBy default, MariaDB transmits data between the server and clients without\nencrypting it. This is generally acceptable when the server and client run on\nthe same host or in networks where security is guaranteed through other means.\nHowever, in cases where the server and client exist on separate networks or\nthey are in a high-risk network, the lack of encryption does introduce\nsecurity concerns as a malicious actor could potentially eavesdrop on the\ntraffic as it is sent over the network between them.\n\nTo mitigate this concern, MariaDB allows you to encrypt data in transit\nbetween the server and clients using the Transport Layer Security (TLS)\nprotocol. TLS was formerly known as Secure Socket Layer (SSL), but strictly\nspeaking the SSL protocol is a predecessor to TLS and, that version of the\nprotocol is now considered insecure. The documentation still uses the term SSL\noften and for compatibility reasons TLS-related server system and status\nvariables still use the prefix ssl_, but internally, MariaDB only supports its\nsecure successors.\n\nSee Secure Connections Overview for more information about how to determine\nwhether your MariaDB server has TLS support.\n\nYou can set certain TLS-related restrictions for specific user accounts. For\ninstance, you might use this with user accounts that require access to\nsensitive data while sending it across networks that you do not control. These\nrestrictions can be enabled for a user account with the CREATE USER, ALTER\nUSER, or GRANT statements. The following options are available:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| REQUIRE NONE | TLS is not required for this account, but can |\n| | still be used. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SSL | The account must use TLS, but no valid X509 |\n| | certificate is required. This option cannot |\n| | be combined with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE X509 | The account must use TLS and must have a |\n| | valid X509 certificate. This option implies |\n| | REQUIRE SSL. This option cannot be combined |\n| | with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE ISSUER \'issuer\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the Certificate |\n| | Authority must be the one specified via the |\n| | string issuer. This option implies REQUIRE |\n| | X509. This option can be combined with the |\n| | SUBJECT, and CIPHER options in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SUBJECT \'subject\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the |\n| | certificate\'s Subject must be the one |\n| | specified via the string subject. This option |\n| | implies REQUIRE X509. This option can be |\n| | combined with the ISSUER, and CIPHER options |\n| | in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE CIPHER \'cipher\' | The account must use TLS, but no valid X509 |\n| | certificate is required. Also, the encryption |\n| | used for the connection must use a specific |\n| | cipher method specified in the string cipher. |\n| | This option implies REQUIRE SSL. This option |\n| | can be combined with the ISSUER, and SUBJECT |\n| | options in any order. |\n+---------------------------+------------------------------------------------+\n\nThe REQUIRE keyword must be used only once for all specified options, and the\nAND keyword can be used to separate individual options, but it is not required.\n\nFor example, you can create a user account that requires these TLS options\nwith the following:\n\nCREATE USER \'alice\'@\'%\'\n REQUIRE SUBJECT \'/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland\'\n AND ISSUER \'/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter\nParker/emailAddress=p.parker@marvel.com\'\n AND CIPHER \'SHA-DES-CBC3-EDH-RSA\';\n\nIf any of these options are set for a specific user account, then any client\nwho tries to connect with that user account will have to be configured to\nconnect with TLS.\n\nSee Securing Connections for Client and Server for information on how to\nenable TLS on the client and server.\n\nResource Limit Options\n----------------------\n\nIt is possible to set per-account limits for certain server resources. The\nfollowing table shows the values that can be set per account:\n\n+--------------------------------------+--------------------------------------+\n| Limit Type | Decription |\n+--------------------------------------+--------------------------------------+\n| MAX_QUERIES_PER_HOUR | Number of statements that the |\n| | account can issue per hour |\n| | (including updates) |\n+--------------------------------------+--------------------------------------+\n| MAX_UPDATES_PER_HOUR | Number of updates (not queries) |\n| | that the account can issue per hour |\n+--------------------------------------+--------------------------------------+\n| MAX_CONNECTIONS_PER_HOUR | Number of connections that the |\n| | account can start per hour |\n+--------------------------------------+--------------------------------------+\n| MAX_USER_CONNECTIONS | Number of simultaneous connections |\n| | that can be accepted from the same |\n| | account; if it is 0, |\n| | max_connections will be used |\n| | instead; if max_connections is 0, |\n| | there is no limit for this |\n| | account\'s simultaneous connections. |\n+--------------------------------------+--------------------------------------+\n| MAX_STATEMENT_TIME | Timeout, in seconds, for statements |','','https://mariadb.com/kb/en/create-user/'); update help_topic set description = CONCAT(description, '\n| | executed by the user. See also |\n| | Aborting Statements that Exceed a |\n| | Certain Time to Execute. |\n+--------------------------------------+--------------------------------------+\n\nIf any of these limits are set to 0, then there is no limit for that resource\nfor that user.\n\nHere is an example showing how to create a user with resource limits:\n\nCREATE USER \'someone\'@\'localhost\' WITH\n MAX_USER_CONNECTIONS 10\n MAX_QUERIES_PER_HOUR 200;\n\nThe resources are tracked per account, which means \'user\'@\'server\'; not per\nuser name or per connection.\n\nThe count can be reset for all users using FLUSH USER_RESOURCES, FLUSH\nPRIVILEGES or mysqladmin reload.\n\nPer account resource limits are stored in the user table, in the mysql\ndatabase. Columns used for resources limits are named max_questions,\nmax_updates, max_connections (for MAX_CONNECTIONS_PER_HOUR), and\nmax_user_connections (for MAX_USER_CONNECTIONS).\n\nAccount Names\n-------------\n\nAccount names have both a user name component and a host name component, and\nare specified as \'user_name\'@\'host_name\'.\n\nThe user name and host name may be unquoted, quoted as strings using double\nquotes (\") or single quotes (\'), or quoted as identifiers using backticks (`).\nYou must use quotes when using special characters (such as a hyphen) or\nwildcard characters. If you quote, you must quote the user name and host name\nseparately (for example \'user_name\'@\'host_name\').\n\nHost Name Component\n-------------------\n\nIf the host name is not provided, it is assumed to be \'%\'.\n\nHost names may contain the wildcard characters % and _. They are matched as if\nby the LIKE clause. If you need to use a wildcard character literally (for\nexample, to match a domain name with an underscore), prefix the character with\na backslash. See LIKE for more information on escaping wildcard characters.\n\nHost name matches are case-insensitive. Host names can match either domain\nnames or IP addresses. Use \'localhost\' as the host name to allow only local\nclient connections.\n\nYou can use a netmask to match a range of IP addresses using \'base_ip/netmask\'\nas the host name. A user with an IP address ip_addr will be allowed to connect\nif the following condition is true:\n\nip_addr & netmask = base_ip\n\nFor example, given a user:\n\nCREATE USER \'maria\'@\'247.150.130.0/255.255.255.0\';\n\nthe IP addresses satisfying this condition range from 247.150.130.0 to\n247.150.130.255.\n\nUsing 255.255.255.255 is equivalent to not using a netmask at all. Netmasks\ncannot be used for IPv6 addresses.\n\nNote that the credentials added when creating a user with the \'%\' wildcard\nhost will not grant access in all cases. For example, some systems come with\nan anonymous localhost user, and when connecting from localhost this will take\nprecedence.\n\nBefore MariaDB 10.6, the host name component could be up to 60 characters in\nlength. Starting from MariaDB 10.6, it can be up to 255 characters.\n\nUser Name Component\n-------------------\n\nUser names must match exactly, including case. A user name that is empty is\nknown as an anonymous account and is allowed to match a login attempt with any\nuser name component. These are described more in the next section.\n\nFor valid identifiers to use as user names, see Identifier Names.\n\nIt is possible for more than one account to match when a user connects.\nMariaDB selects the first matching account after sorting according to the\nfollowing criteria:\n\n* Accounts with an exact host name are sorted before accounts using a wildcard\nin the\nhost name. Host names using a netmask are considered to be exact for sorting.\n* Accounts with a wildcard in the host name are sorted according to the\nposition of\nthe first wildcard character. Those with a wildcard character later in the\nhost name\nsort before those with a wildcard character earlier in the host name.\n* Accounts with a non-empty user name sort before accounts with an empty user\nname.\n* Accounts with an empty user name are sorted last. As mentioned previously,\nthese are known as anonymous accounts. These are described more in the next\nsection.\n\nThe following table shows a list of example account as sorted by these\ncriteria:\n\n+---------+-------------+\n| User | Host |\n+---------+-------------+\n| joffrey | 192.168.0.3 |\n| | 192.168.0.% |\n| joffrey | 192.168.% |\n| | 192.168.% |\n+---------+-------------+\n\nOnce connected, you only have the privileges granted to the account that\nmatched, not all accounts that could have matched. For example, consider the\nfollowing commands:\n\nCREATE USER \'joffrey\'@\'192.168.0.3\';\nCREATE USER \'joffrey\'@\'%\';\nGRANT SELECT ON test.t1 to \'joffrey\'@\'192.168.0.3\';\nGRANT SELECT ON test.t2 to \'joffrey\'@\'%\';\n\nIf you connect as joffrey from 192.168.0.3, you will have the SELECT privilege\non the table test.t1, but not on the table test.t2. If you connect as joffrey\nfrom any other IP address, you will have the SELECT privilege on the table\ntest.t2, but not on the table test.t1.\n\nUsernames can be up to 80 characters long before 10.6 and starting from 10.6\nit can be 128 characters long.\n\nAnonymous Accounts\n------------------\n\nAnonymous accounts are accounts where the user name portion of the account\nname is empty. These accounts act as special catch-all accounts. If a user\nattempts to log into the system from a host, and an anonymous account exists\nwith a host name portion that matches the user\'s host, then the user will log\nin as the anonymous account if there is no more specific account match for the\nuser name that the user entered.\n\nFor example, here are some anonymous accounts:\n\nCREATE USER \'\'@\'localhost\';\nCREATE USER \'\'@\'192.168.0.3\';\n\nFixing a Legacy Default Anonymous Account\n-----------------------------------------\n\nOn some systems, the mysql.db table has some entries for the \'\'@\'%\' anonymous\naccount by default. Unfortunately, there is no matching entry in the\nmysql.user/mysql.global_priv_table table, which means that this anonymous\naccount doesn\'t exactly exist, but it does have privileges--usually on the\ndefault test database created by mysql_install_db. These account-less\nprivileges are a legacy that is leftover from a time when MySQL\'s privilege\nsystem was less advanced.\n\nThis situation means that you will run into errors if you try to create a\n\'\'@\'%\' account. For example:\n\nCREATE USER \'\'@\'%\';\nERROR 1396 (HY000): Operation CREATE USER failed for \'\'@\'%\'\n\nThe fix is to DELETE the row in the mysql.db table and then execute FLUSH\nPRIVILEGES:\n\nDELETE FROM mysql.db WHERE User=\'\' AND Host=\'%\';\nFLUSH PRIVILEGES;\n\nAnd then the account can be created:\n\nCREATE USER \'\'@\'%\';\nQuery OK, 0 rows affected (0.01 sec)\n\nSee MDEV-13486 for more information.\n\nPassword Expiry\n---------------\n\nMariaDB starting with 10.4.3\n----------------------------\nBesides automatic password expiry, as determined by default_password_lifetime,\npassword expiry times can be set on an individual user basis, overriding the\nglobal setting, for example:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\n\nSee User Password Expiry for more details.\n\nAccount Locking\n---------------\n\nMariaDB starting with 10.4.2\n----------------------------\nAccount locking permits privileged administrators to lock/unlock user\naccounts. No new client connections will be permitted if an account is locked\n(existing connections are not affected). For example:\n\nCREATE USER \'marijn\'@\'localhost\' ACCOUNT LOCK;\n\nSee Account Locking for more details.\n\nFrom MariaDB 10.4.7 and MariaDB 10.5.8, the lock_option and password_option\nclauses can occur in either order.\n\nURL: https://mariadb.com/kb/en/create-user/') WHERE help_topic_id = 104; insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (105,10,'ALTER USER','Syntax\n------\n\nALTER USER [IF EXISTS] \n user_specification [,user_specification] ...\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH resource_option [resource_option] ...]\n [lock_option] [password_option]\n\nuser_specification:\n username [authentication_option]\n\nauthentication_option:\n IDENTIFIED BY \'password\'\n | IDENTIFIED BY PASSWORD \'password_hash\'\n | IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule] ...\n\nauthentication_rule:\n authentication_plugin\n | authentication_plugin {USING|AS} \'authentication_string\'\n | authentication_plugin {USING|AS} PASSWORD(\'password\')\n\ntls_option\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n\nresource_option\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n | MAX_STATEMENT_TIME time\n\npassword_option:\n PASSWORD EXPIRE\n | PASSWORD EXPIRE DEFAULT\n | PASSWORD EXPIRE NEVER\n | PASSWORD EXPIRE INTERVAL N DAY\n\nlock_option:\n ACCOUNT LOCK\n | ACCOUNT UNLOCK\n}\n\nDescription\n-----------\n\nThe ALTER USER statement modifies existing MariaDB accounts. To use it, you\nmust have the global CREATE USER privilege or the UPDATE privilege for the\nmysql database. The global SUPER privilege is also required if the read_only\nsystem variable is enabled.\n\nIf any of the specified user accounts do not yet exist, an error results. If\nan error occurs, ALTER USER will still modify the accounts that do not result\nin an error. Only one error is produced for all users which have not been\nmodified.\n\nIF EXISTS\n---------\n\nWhen the IF EXISTS clause is used, MariaDB will return a warning instead of an\nerror for each specified user that does not exist.\n\nAccount Names\n-------------\n\nFor ALTER USER statements, account names are specified as the username\nargument in the same way as they are for CREATE USER statements. See account\nnames from the CREATE USER page for details on how account names are specified.\n\nCURRENT_USER or CURRENT_USER() can also be used to alter the account logged\ninto the current session. For example, to change the current user\'s password\nto mariadb:\n\nALTER USER CURRENT_USER() IDENTIFIED BY \'mariadb\';\n\nAuthentication Options\n----------------------\n\nMariaDB starting with 10.4\n--------------------------\nFrom MariaDB 10.4, it is possible to use more than one authentication plugin\nfor each user account. For example, this can be useful to slowly migrate users\nto the more secure ed25519 authentication plugin over time, while allowing the\nold mysql_native_password authentication plugin as an alternative for the\ntransitional period. See Authentication from MariaDB 10.4 for more.\n\nWhen running ALTER USER, not specifying an authentication option in the\nIDENTIFIED VIA clause will remove that authentication method. (However this\nwas not the case before MariaDB 10.4.13, see MDEV-21928)\n\nFor example, a user is created with the ability to authenticate via both a\npassword and unix_socket:\n\nCREATE USER \'bob\'@\'localhost\' \n IDENTIFIED VIA mysql_native_password USING PASSWORD(\'pwd\')\n OR unix_socket;\n\nSHOW CREATE USER \'bob\'@\'localhost\'\\G\n*************************** 1. row ***************************\nCREATE USER for bob@localhost: CREATE USER `bob`@`localhost` \n IDENTIFIED VIA mysql_native_password\n USING \'*975B2CD4FF9AE554FE8AD33168FBFC326D2021DD\'\n OR unix_socket\n\nIf the user\'s password is updated, but unix_socket authentication is not\nspecified in the IDENTIFIED VIA clause, unix_socket authentication will no\nlonger be permitted.\n\nALTER USER \'bob\'@\'localhost\' IDENTIFIED VIA mysql_native_password \n USING PASSWORD(\'pwd2\');\n\nSHOW CREATE USER \'bob\'@\'localhost\'\\G\n*************************** 1. row ***************************\nCREATE USER for bob@localhost: CREATE USER `bob`@`localhost` \n IDENTIFIED BY PASSWORD \'*38366FDA01695B6A5A9DD4E428D9FB8F7EB75512\'\n\nIDENTIFIED BY \'password\'\n------------------------\n\nThe optional IDENTIFIED BY clause can be used to provide an account with a\npassword. The password should be specified in plain text. It will be hashed by\nthe PASSWORD function prior to being stored to the mysql.user table.\n\nFor example, if our password is mariadb, then we can set the account\'s\npassword with:\n\nALTER USER foo2@test IDENTIFIED BY \'mariadb\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED BY PASSWORD \'password_hash\'\n--------------------------------------\n\nThe optional IDENTIFIED BY PASSWORD clause can be used to provide an account\nwith a password that has already been hashed. The password should be specified\nas a hash that was provided by the PASSWORD#function. It will be stored to the\nmysql.user table as-is.\n\nFor example, if our password is mariadb, then we can find the hash with:\n\nSELECT PASSWORD(\'mariadb\');\n+-------------------------------------------+\n| PASSWORD(\'mariadb\') |\n+-------------------------------------------+\n| *54958E764CE10E50764C2EECBB71D01F08549980 |\n+-------------------------------------------+\n\nAnd then we can set an account\'s password with the hash:\n\nALTER USER foo2@test \n IDENTIFIED BY PASSWORD \'*54958E764CE10E50764C2EECBB71D01F08549980\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED {VIA|WITH} authentication_plugin\n-------------------------------------------\n\nThe optional IDENTIFIED VIA authentication_plugin allows you to specify that\nthe account should be authenticated by a specific authentication plugin. The\nplugin name must be an active authentication plugin as per SHOW PLUGINS. If it\ndoesn\'t show up in that output, then you will need to install it with INSTALL\nPLUGIN or INSTALL SONAME.\n\nFor example, this could be used with the PAM authentication plugin:\n\nALTER USER foo2@test IDENTIFIED VIA pam;\n\nSome authentication plugins allow additional arguments to be specified after a\nUSING or AS keyword. For example, the PAM authentication plugin accepts a\nservice name:\n\nALTER USER foo2@test IDENTIFIED VIA pam USING \'mariadb\';\n\nThe exact meaning of the additional argument would depend on the specific\nauthentication plugin.\n\nIn MariaDB 10.4 and later, the USING or AS keyword can also be used to provide\na plain-text password to a plugin if it\'s provided as an argument to the\nPASSWORD() function. This is only valid for authentication plugins that have\nimplemented a hook for the PASSWORD() function. For example, the ed25519\nauthentication plugin supports this:\n\nALTER USER safe@\'%\' IDENTIFIED VIA ed25519 USING PASSWORD(\'secret\');\n\nTLS Options\n-----------\n\nBy default, MariaDB transmits data between the server and clients without\nencrypting it. This is generally acceptable when the server and client run on\nthe same host or in networks where security is guaranteed through other means.\nHowever, in cases where the server and client exist on separate networks or\nthey are in a high-risk network, the lack of encryption does introduce\nsecurity concerns as a malicious actor could potentially eavesdrop on the\ntraffic as it is sent over the network between them.\n\nTo mitigate this concern, MariaDB allows you to encrypt data in transit\nbetween the server and clients using the Transport Layer Security (TLS)\nprotocol. TLS was formerly known as Secure Socket Layer (SSL), but strictly\nspeaking the SSL protocol is a predecessor to TLS and, that version of the\nprotocol is now considered insecure. The documentation still uses the term SSL\noften and for compatibility reasons TLS-related server system and status\nvariables still use the prefix ssl_, but internally, MariaDB only supports its\nsecure successors.\n\nSee Secure Connections Overview for more information about how to determine\nwhether your MariaDB server has TLS support.\n\nYou can set certain TLS-related restrictions for specific user accounts. For\ninstance, you might use this with user accounts that require access to\nsensitive data while sending it across networks that you do not control. These\nrestrictions can be enabled for a user account with the CREATE USER, ALTER\nUSER, or GRANT statements. The following options are available:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| REQUIRE NONE | TLS is not required for this account, but can |\n| | still be used. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SSL | The account must use TLS, but no valid X509 |\n| | certificate is required. This option cannot |\n| | be combined with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE X509 | The account must use TLS and must have a |\n| | valid X509 certificate. This option implies |\n| | REQUIRE SSL. This option cannot be combined |\n| | with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE ISSUER \'issuer\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the Certificate |\n| | Authority must be the one specified via the |\n| | string issuer. This option implies REQUIRE |\n| | X509. This option can be combined with the |\n| | SUBJECT, and CIPHER options in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SUBJECT \'subject\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the |\n| | certificate\'s Subject must be the one |\n| | specified via the string subject. This option |\n| | implies REQUIRE X509. This option can be |\n| | combined with the ISSUER, and CIPHER options |\n| | in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE CIPHER \'cipher\' | The account must use TLS, but no valid X509 |\n| | certificate is required. Also, the encryption |\n| | used for the connection must use a specific |\n| | cipher method specified in the string cipher. |\n| | This option implies REQUIRE SSL. This option |\n| | can be combined with the ISSUER, and SUBJECT |\n| | options in any order. |\n+---------------------------+------------------------------------------------+\n\nThe REQUIRE keyword must be used only once for all specified options, and the\nAND keyword can be used to separate individual options, but it is not required.\n\nFor example, you can alter a user account to require these TLS options with\nthe following:\n\nALTER USER \'alice\'@\'%\'\n REQUIRE SUBJECT \'/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland\' AND\n ISSUER \'/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter\nParker/emailAddress=p.parker@marvel.com\'\n AND CIPHER \'SHA-DES-CBC3-EDH-RSA\';\n\nIf any of these options are set for a specific user account, then any client\nwho tries to connect with that user account will have to be configured to\nconnect with TLS.\n\nSee Securing Connections for Client and Server for information on how to\nenable TLS on the client and server.\n\nResource Limit Options\n----------------------\n\nIt is possible to set per-account limits for certain server resources. The\nfollowing table shows the values that can be set per account:\n\n+------------------------------------+---------------------------------------+\n| Limit Type | Description |\n+------------------------------------+---------------------------------------+\n| MAX_QUERIES_PER_HOUR | Number of statements that the |\n| | account can issue per hour |\n| | (including updates) |\n+------------------------------------+---------------------------------------+\n| MAX_UPDATES_PER_HOUR | Number of updates (not queries) that |\n| | the account can issue per hour |\n+------------------------------------+---------------------------------------+\n| MAX_CONNECTIONS_PER_HOUR | Number of connections that the |\n| | account can start per hour |\n+------------------------------------+---------------------------------------+\n| MAX_USER_CONNECTIONS | Number of simultaneous connections |\n| | that can be accepted from the same |\n| | account; if it is 0, max_connections |\n| | will be used instead; if |\n| | max_connections is 0, there is no |\n| | limit for this account\'s |\n| | simultaneous connections. |','','https://mariadb.com/kb/en/alter-user/'); update help_topic set description = CONCAT(description, '\n+------------------------------------+---------------------------------------+\n| MAX_STATEMENT_TIME | Timeout, in seconds, for statements |\n| | executed by the user. See also |\n| | Aborting Statements that Exceed a |\n| | Certain Time to Execute. |\n+------------------------------------+---------------------------------------+\n\nIf any of these limits are set to 0, then there is no limit for that resource\nfor that user.\n\nHere is an example showing how to set an account\'s resource limits:\n\nALTER USER \'someone\'@\'localhost\' WITH\n MAX_USER_CONNECTIONS 10\n MAX_QUERIES_PER_HOUR 200;\n\nThe resources are tracked per account, which means \'user\'@\'server\'; not per\nuser name or per connection.\n\nThe count can be reset for all users using FLUSH USER_RESOURCES, FLUSH\nPRIVILEGES or mysqladmin reload.\n\nPer account resource limits are stored in the user table, in the mysql\ndatabase. Columns used for resources limits are named max_questions,\nmax_updates, max_connections (for MAX_CONNECTIONS_PER_HOUR), and\nmax_user_connections (for MAX_USER_CONNECTIONS).\n\nPassword Expiry\n---------------\n\nMariaDB starting with 10.4.3\n----------------------------\nBesides automatic password expiry, as determined by default_password_lifetime,\npassword expiry times can be set on an individual user basis, overriding the\nglobal setting, for example:\n\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE NEVER;\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE DEFAULT;\n\nSee User Password Expiry for more details.\n\nAccount Locking\n---------------\n\nMariaDB starting with 10.4.2\n----------------------------\nAccount locking permits privileged administrators to lock/unlock user\naccounts. No new client connections will be permitted if an account is locked\n(existing connections are not affected). For example:\n\nALTER USER \'marijn\'@\'localhost\' ACCOUNT LOCK;\n\nSee Account Locking for more details.\n\nFrom MariaDB 10.4.7 and MariaDB 10.5.8, the lock_option and password_option\nclauses can occur in either order.\n\nURL: https://mariadb.com/kb/en/alter-user/') WHERE help_topic_id = 105; insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (106,10,'DROP USER','Syntax\n------\n\nDROP USER [IF EXISTS] user_name [, user_name] ...\n\nDescription\n-----------\n\nThe DROP USER statement removes one or more MariaDB accounts. It removes\nprivilege rows for the account from all grant tables. To use this statement,\nyou must have the global CREATE USER privilege or the DELETE privilege for the\nmysql database. Each account is named using the same format as for the CREATE\nUSER statement; for example, \'jeffrey\'@\'localhost\'. If you specify only the\nuser name part of the account name, a host name part of \'%\' is used. For\nadditional information about specifying account names, see CREATE USER.\n\nNote that, if you specify an account that is currently connected, it will not\nbe deleted until the connection is closed. The connection will not be\nautomatically closed.\n\nIf any of the specified user accounts do not exist, ERROR 1396 (HY000)\nresults. If an error occurs, DROP USER will still drop the accounts that do\nnot result in an error. Only one error is produced for all users which have\nnot been dropped:\n\nERROR 1396 (HY000): Operation DROP USER failed for \'u1\'@\'%\',\'u2\'@\'%\'\n\nFailed CREATE or DROP operations, for both users and roles, produce the same\nerror code.\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will return a note instead of an\nerror if the user does not exist.\n\nExamples\n--------\n\nDROP USER bob;\n\nDROP USER foo2@localhost,foo2@\'127.%\';\n\nIF EXISTS:\n\nDROP USER bob;\nERROR 1396 (HY000): Operation DROP USER failed for \'bob\'@\'%\'\n\nDROP USER IF EXISTS bob;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------------------------+\n| Note | 1974 | Can\'t drop user \'bob\'@\'%\'; it doesn\'t exist |\n+-------+------+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-user/','','https://mariadb.com/kb/en/drop-user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (107,10,'GRANT','Syntax\n------\n\nGRANT\n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n TO user_specification [ user_options ...]\n\nuser_specification:\n username [authentication_option]\n | PUBLIC\nauthentication_option:\n IDENTIFIED BY \'password\'\n | IDENTIFIED BY PASSWORD \'password_hash\'\n | IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule ...]\n\nauthentication_rule:\n authentication_plugin\n | authentication_plugin {USING|AS} \'authentication_string\'\n | authentication_plugin {USING|AS} PASSWORD(\'password\')\n\nGRANT PROXY ON username\n TO user_specification [, user_specification ...]\n [WITH GRANT OPTION]\n\nGRANT rolename TO grantee [, grantee ...]\n [WITH ADMIN OPTION]\n\ngrantee:\n rolename\n username [authentication_option]\n\nuser_options:\n [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]\n [WITH with_option [with_option] ...]\n\nobject_type:\n TABLE\n | FUNCTION\n | PROCEDURE\n | PACKAGE\n\npriv_level:\n *\n | *.*\n | db_name.*\n | db_name.tbl_name\n | tbl_name\n | db_name.routine_name\n\nwith_option:\n GRANT OPTION\n | resource_option\n\nresource_option:\n MAX_QUERIES_PER_HOUR count\n | MAX_UPDATES_PER_HOUR count\n | MAX_CONNECTIONS_PER_HOUR count\n | MAX_USER_CONNECTIONS count\n | MAX_STATEMENT_TIME time\n\ntls_option:\n SSL\n | X509\n | CIPHER \'cipher\'\n | ISSUER \'issuer\'\n | SUBJECT \'subject\'\n\nDescription\n-----------\n\nThe GRANT statement allows you to grant privileges or roles to accounts. To\nuse GRANT, you must have the GRANT OPTION privilege, and you must have the\nprivileges that you are granting.\n\nUse the REVOKE statement to revoke privileges granted with the GRANT statement.\n\nUse the SHOW GRANTS statement to determine what privileges an account has.\n\nAccount Names\n-------------\n\nFor GRANT statements, account names are specified as the username argument in\nthe same way as they are for CREATE USER statements. See account names from\nthe CREATE USER page for details on how account names are specified.\n\nImplicit Account Creation\n-------------------------\n\nThe GRANT statement also allows you to implicitly create accounts in some\ncases.\n\nIf the account does not yet exist, then GRANT can implicitly create it. To\nimplicitly create an account with GRANT, a user is required to have the same\nprivileges that would be required to explicitly create the account with the\nCREATE USER statement.\n\nIf the NO_AUTO_CREATE_USER SQL_MODE is set, then accounts can only be created\nif authentication information is specified, or with a CREATE USER statement.\nIf no authentication information is provided, GRANT will produce an error when\nthe specified account does not exist, for example:\n\nshow variables like \'%sql_mode%\' ;\n+---------------+--------------------------------------------+\n| Variable_name | Value |\n+---------------+--------------------------------------------+\n| sql_mode | NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |\n+---------------+--------------------------------------------+\n\nGRANT USAGE ON *.* TO \'user123\'@\'%\' IDENTIFIED BY \'\';\nERROR 1133 (28000): Can\'t find any matching row in the user table\n\nGRANT USAGE ON *.* TO \'user123\'@\'%\' \n IDENTIFIED VIA PAM using \'mariadb\' require ssl ;\nQuery OK, 0 rows affected (0.00 sec)\n\nselect host, user from mysql.user where user=\'user123\' ;\n\n+------+----------+\n| host | user |\n+------+----------+\n| % | user123 |\n+------+----------+\n\nPrivilege Levels\n----------------\n\nPrivileges can be set globally, for an entire database, for a table or\nroutine, or for individual columns in a table. Certain privileges can only be\nset at certain levels.\n\n* Global privileges priv_type are granted using *.* for\npriv_level. Global privileges include privileges to administer the database\nand manage user accounts, as well as privileges for all tables, functions, and\nprocedures. Global privileges are stored in the mysql.user table prior to\nMariaDB 10.4, and in mysql.global_priv table afterwards.\n* Database privileges priv_type are granted using db_name.*\nfor priv_level, or using just * to use default database. Database\nprivileges include privileges to create tables and functions, as well as\nprivileges for all tables, functions, and procedures in the database. Database\nprivileges are stored in the mysql.db table.\n* Table privileges priv_type are granted using db_name.tbl_name\nfor priv_level, or using just tbl_name to specify a table in the default\ndatabase. The TABLE keyword is optional. Table privileges include the\nability to select and change data in the table. Certain table privileges can\nbe granted for individual columns.\n* Column privileges priv_type are granted by specifying a table for\npriv_level and providing a column list after the privilege type. They allow\nyou to control exactly which columns in a table users can select and change.\n* Function privileges priv_type are granted using FUNCTION db_name.routine_name\nfor priv_level, or using just FUNCTION routine_name to specify a function\nin the default database.\n* Procedure privileges priv_type are granted using PROCEDURE\ndb_name.routine_name\nfor priv_level, or using just PROCEDURE routine_name to specify a procedure\nin the default database.\n\nThe USAGE Privilege\n-------------------\n\nThe USAGE privilege grants no real privileges. The SHOW GRANTS statement will\nshow a global USAGE privilege for a newly-created user. You can use USAGE with\nthe GRANT statement to change options like GRANT OPTION and\nMAX_USER_CONNECTIONS without changing any account privileges.\n\nThe ALL PRIVILEGES Privilege\n----------------------------\n\nThe ALL PRIVILEGES privilege grants all available privileges. Granting all\nprivileges only affects the given privilege level. For example, granting all\nprivileges on a table does not grant any privileges on the database or\nglobally.\n\nUsing ALL PRIVILEGES does not grant the special GRANT OPTION privilege.\n\nYou can use ALL instead of ALL PRIVILEGES.\n\nThe GRANT OPTION Privilege\n--------------------------\n\nUse the WITH GRANT OPTION clause to give users the ability to grant privileges\nto other users at the given privilege level. Users with the GRANT OPTION\nprivilege can only grant privileges they have. They cannot grant privileges at\na higher privilege level than they have the GRANT OPTION privilege.\n\nThe GRANT OPTION privilege cannot be set for individual columns. If you use\nWITH GRANT OPTION when specifying column privileges, the GRANT OPTION\nprivilege will be granted for the entire table.\n\nUsing the WITH GRANT OPTION clause is equivalent to listing GRANT OPTION as a\nprivilege.\n\nGlobal Privileges\n-----------------\n\nThe following table lists the privileges that can be granted globally. You can\nalso grant all database, table, and function privileges globally. When granted\nglobally, these privileges apply to all databases, tables, or functions,\nincluding those created later.\n\nTo set a global privilege, use *.* for priv_level.\n\nBINLOG ADMIN\n------------\n\nEnables administration of the binary log, including the PURGE BINARY LOGS\nstatement and setting the system variables:\n\n* binlog_annotate_row_events\n* binlog_cache_size\n* binlog_commit_wait_count\n* binlog_commit_wait_usec\n* binlog_direct_non_transactional_updates\n* binlog_expire_logs_seconds\n* binlog_file_cache_size\n* binlog_format\n* binlog_row_image\n* binlog_row_metadata\n* binlog_stmt_cache_size\n* expire_logs_days\n* log_bin_compress\n* log_bin_compress_min_len\n* log_bin_trust_function_creators\n* max_binlog_cache_size\n* max_binlog_size\n* max_binlog_stmt_cache_size\n* sql_log_bin and\n* sync_binlog.\n\nAdded in MariaDB 10.5.2.\n\nBINLOG MONITOR\n--------------\n\nNew name for REPLICATION CLIENT from MariaDB 10.5.2, (REPLICATION CLIENT still\nsupported as an alias for compatibility purposes). Permits running SHOW\ncommands related to the binary log, in particular the SHOW BINLOG STATUS and\nSHOW BINARY LOGS statements. Unlike REPLICATION CLIENT prior to MariaDB 10.5,\nSHOW REPLICA STATUS isn\'t included in this privilege, and REPLICA MONITOR is\nrequired.\n\nBINLOG REPLAY\n-------------\n\nEnables replaying the binary log with the BINLOG statement (generated by\nmariadb-binlog), executing SET timestamp when secure_timestamp is set to\nreplication, and setting the session values of system variables usually\nincluded in BINLOG output, in particular:\n\n* gtid_domain_id\n* gtid_seq_no\n* pseudo_thread_id\n* server_id.\n\nAdded in MariaDB 10.5.2\n\nCONNECTION ADMIN\n----------------\n\nEnables administering connection resource limit options. This includes\nignoring the limits specified by:\n\n* max_connections\n* max_user_connections and\n* max_password_errors.\n\nThe statements specified in init_connect are not executed, killing connections\nand queries owned by other users is permitted. The following\nconnection-related system variables can be changed:\n\n* connect_timeout\n* disconnect_on_expired_password\n* extra_max_connections\n* init_connect\n* max_connections\n* max_connect_errors\n* max_password_errors\n* proxy_protocol_networks\n* secure_auth\n* slow_launch_time\n* thread_pool_exact_stats\n* thread_pool_dedicated_listener\n* thread_pool_idle_timeout\n* thread_pool_max_threads\n* thread_pool_min_threads\n* thread_pool_oversubscribe\n* thread_pool_prio_kickup_timer\n* thread_pool_priority\n* thread_pool_size, and\n* thread_pool_stall_limit.\n\nAdded in MariaDB 10.5.2.\n\nCREATE USER\n-----------\n\nCreate a user using the CREATE USER statement, or implicitly create a user\nwith the GRANT statement.\n\nFEDERATED ADMIN\n---------------\n\nExecute CREATE SERVER, ALTER SERVER, and DROP SERVER statements. Added in\nMariaDB 10.5.2.\n\nFILE\n----\n\nRead and write files on the server, using statements like LOAD DATA INFILE or\nfunctions like LOAD_FILE(). Also needed to create CONNECT outward tables.\nMariaDB server must have the permissions to access those files.\n\nGRANT OPTION\n------------\n\nGrant global privileges. You can only grant privileges that you have.\n\nPROCESS\n-------\n\nShow information about the active processes, for example via SHOW PROCESSLIST\nor mysqladmin processlist. If you have the PROCESS privilege, you can see all\nthreads. Otherwise, you can see only your own threads (that is, threads\nassociated with the MariaDB account that you are using).\n\nREAD_ONLY ADMIN\n---------------\n\nUser can set the read_only system variable and allows the user to perform\nwrite operations, even when the read_only option is active. Added in MariaDB\n10.5.2.\n\nFrom MariaDB 10.11.0, the READ_ONLY ADMIN privilege has been removed from\nSUPER. The benefit of this is that one can remove the READ_ONLY ADMIN\nprivilege from all users and ensure that no one can make any changes on any\nnon-temporary tables. This is useful on replicas when one wants to ensure that\nthe replica is kept identical to the primary.\n\nRELOAD\n------\n\nExecute FLUSH statements or equivalent mariadb-admin/mysqladmin commands.\n\nREPLICATION CLIENT\n------------------\n\nExecute SHOW MASTER STATUS and SHOW BINARY LOGS informative statements.\nRenamed to BINLOG MONITOR in MariaDB 10.5.2 (but still supported as an alias\nfor compatibility reasons). SHOW SLAVE STATUS was part of REPLICATION CLIENT\nprior to MariaDB 10.5.\n\nREPLICATION MASTER ADMIN\n------------------------\n\nPermits administration of primary servers, including the SHOW REPLICA HOSTS\nstatement, and setting the gtid_binlog_state, gtid_domain_id,\nmaster_verify_checksum and server_id system variables. Added in MariaDB 10.5.2.\n\nREPLICA MONITOR\n---------------\n\nPermit SHOW REPLICA STATUS and SHOW RELAYLOG EVENTS. From MariaDB 10.5.9.\n\nWhen a user would upgrade from an older major release to a MariaDB 10.5 minor\nrelease prior to MariaDB 10.5.9, certain user accounts would lose\ncapabilities. For example, a user account that had the REPLICATION CLIENT\nprivilege in older major releases could run SHOW REPLICA STATUS, but after\nupgrading to a MariaDB 10.5 minor release prior to MariaDB 10.5.9, they could\nno longer run SHOW REPLICA STATUS, because that statement was changed to\nrequire the REPLICATION REPLICA ADMIN privilege.\n\nThis issue is fixed in MariaDB 10.5.9 with this new privilege, which now\ngrants the user the ability to execute SHOW [ALL] (SLAVE | REPLICA) STATUS.\n\nWhen a database is upgraded from an older major release to MariaDB Server\n10.5.9 or later, any user accounts with the REPLICATION CLIENT or REPLICATION\nSLAVE privileges will automatically be granted the new REPLICA MONITOR\nprivilege. The privilege fix occurs when the server is started up, not when\nmariadb-upgrade is performed.\n\nHowever, when a database is upgraded from an early 10.5 minor release to\n10.5.9 and later, the user will have to fix any user account privileges\nmanually.\n\nREPLICATION REPLICA\n-------------------\n\nSynonym for REPLICATION SLAVE. From MariaDB 10.5.1.\n\nREPLICATION SLAVE\n-----------------\n\nAccounts used by replica servers on the primary need this privilege. This is\nneeded to get the updates made on the master. From MariaDB 10.5.1, REPLICATION\nREPLICA is an alias for REPLICATION SLAVE.\n\nREPLICATION SLAVE ADMIN\n-----------------------\n\nPermits administering replica servers, including START REPLICA/SLAVE, STOP\nREPLICA/SLAVE, CHANGE MASTER, SHOW REPLICA/SLAVE STATUS, SHOW RELAYLOG EVENTS\nstatements, replaying the binary log with the BINLOG statement (generated by\nmariadb-binlog), and setting the system variables:\n\n* gtid_cleanup_batch_size\n* gtid_ignore_duplicates\n* gtid_pos_auto_engines\n* gtid_slave_pos\n* gtid_strict_mode\n* init_slave\n* read_binlog_speed_limit\n* relay_log_purge\n* relay_log_recovery\n* replicate_do_db\n* replicate_do_table\n* replicate_events_marked_for_skip\n* replicate_ignore_db\n* replicate_ignore_table\n* replicate_wild_do_table\n* replicate_wild_ignore_table\n* slave_compressed_protocol\n* slave_ddl_exec_mode\n* slave_domain_parallel_threads\n* slave_exec_mode\n* slave_max_allowed_packet\n* slave_net_timeout\n* slave_parallel_max_queued\n* slave_parallel_mode\n* slave_parallel_threads\n* slave_parallel_workers\n* slave_run_triggers_for_rbr\n* slave_sql_verify_checksum\n* slave_transaction_retry_interval\n* slave_type_conversions\n* sync_master_info\n* sync_relay_log, and\n* sync_relay_log_info.\n\nAdded in MariaDB 10.5.2.\n\nSET USER\n--------\n','','https://mariadb.com/kb/en/grant/'); update help_topic set description = CONCAT(description, '\nEnables setting the DEFINER when creating triggers, views, stored functions\nand stored procedures. Added in MariaDB 10.5.2.\n\nSHOW DATABASES\n--------------\n\nList all databases using the SHOW DATABASES statement. Without the SHOW\nDATABASES privilege, you can still issue the SHOW DATABASES statement, but it\nwill only list databases containing tables on which you have privileges.\n\nSHUTDOWN\n--------\n\nShut down the server using SHUTDOWN or the mysqladmin shutdown command.\n\nSUPER\n-----\n\nExecute superuser statements: CHANGE MASTER TO, KILL (users who do not have\nthis privilege can only KILL their own threads), PURGE LOGS, SET global system\nvariables, or the mysqladmin debug command. Also, this permission allows the\nuser to write data even if the read_only startup option is set, enable or\ndisable logging, enable or disable replication on replica, specify a DEFINER\nfor statements that support that clause, connect once reaching the\nMAX_CONNECTIONS. If a statement has been specified for the init-connect mysqld\noption, that command will not be executed when a user with SUPER privileges\nconnects to the server.\n\nThe SUPER privilege has been split into multiple smaller privileges from\nMariaDB 10.5.2 to allow for more fine-grained privileges, although it remains\nan alias for these smaller privileges.\n\nFrom MariaDB 10.11.0, the READ_ONLY ADMIN privilege has been removed from\nSUPER. The benefit of this is that one can remove the READ_ONLY ADMIN\nprivilege from all users and ensure that no one can make any changes on any\nnon-temporary tables. This is useful on replicas when one wants to ensure that\nthe replica is kept identical to the primary.\n\nDatabase Privileges\n-------------------\n\nThe following table lists the privileges that can be granted at the database\nlevel. You can also grant all table and function privileges at the database\nlevel. Table and function privileges on a database apply to all tables or\nfunctions in that database, including those created later.\n\nTo set a privilege for a database, specify the database using db_name.* for\npriv_level, or just use * to specify the default database.\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |\n+----------------------------------+-----------------------------------------+\n| CREATE | Create a database using the CREATE |\n| | DATABASE statement, when the privilege |\n| | is granted for a database. You can |\n| | grant the CREATE privilege on |\n| | databases that do not yet exist. This |\n| | also grants the CREATE privilege on |\n| | all tables in the database. |\n+----------------------------------+-----------------------------------------+\n| CREATE ROUTINE | Create Stored Programs using the |\n| | CREATE PROCEDURE and CREATE FUNCTION |\n| | statements. |\n+----------------------------------+-----------------------------------------+\n| CREATE TEMPORARY TABLES | Create temporary tables with the |\n| | CREATE TEMPORARY TABLE statement. This |\n| | privilege enable writing and dropping |\n| | those temporary tables |\n+----------------------------------+-----------------------------------------+\n| DROP | Drop a database using the DROP |\n| | DATABASE statement, when the privilege |\n| | is granted for a database. This also |\n| | grants the DROP privilege on all |\n| | tables in the database. |\n+----------------------------------+-----------------------------------------+\n| EVENT | Create, drop and alter EVENTs. |\n+----------------------------------+-----------------------------------------+\n| GRANT OPTION | Grant database privileges. You can |\n| | only grant privileges that you have. |\n+----------------------------------+-----------------------------------------+\n| LOCK TABLES | Acquire explicit locks using the LOCK |\n| | TABLES statement; you also need to |\n| | have the SELECT privilege on a table, |\n| | in order to lock it. |\n+----------------------------------+-----------------------------------------+\n\nTable Privileges\n----------------\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |\n+----------------------------------+-----------------------------------------+\n| ALTER | Change the structure of an existing |\n| | table using the ALTER TABLE statement. |\n+----------------------------------+-----------------------------------------+\n| CREATE | Create a table using the CREATE TABLE |\n| | statement. You can grant the CREATE |\n| | privilege on tables that do not yet |\n| | exist. |\n+----------------------------------+-----------------------------------------+\n| CREATE VIEW | Create a view using the CREATE_VIEW |\n| | statement. |\n+----------------------------------+-----------------------------------------+\n| DELETE | Remove rows from a table using the |\n| | DELETE statement. |\n+----------------------------------+-----------------------------------------+\n| DELETE HISTORY | Remove historical rows from a table |\n| | using the DELETE HISTORY statement. |\n| | Displays as DELETE VERSIONING ROWS |\n| | when running SHOW GRANTS until MariaDB |\n| | 10.3.15 and until MariaDB 10.4.5 |\n| | (MDEV-17655), or when running SHOW |\n| | PRIVILEGES until MariaDB 10.5.2, |\n| | MariaDB 10.4.13 and MariaDB 10.3.23 |\n| | (MDEV-20382). From MariaDB 10.3.4. |\n| | From MariaDB 10.3.5, if a user has the |\n| | SUPER privilege but not this |\n| | privilege, running mysql_upgrade will |\n| | grant this privilege as well. |\n+----------------------------------+-----------------------------------------+\n| DROP | Drop a table using the DROP TABLE |\n| | statement or a view using the DROP |\n| | VIEW statement. Also required to |\n| | execute the TRUNCATE TABLE statement. |\n+----------------------------------+-----------------------------------------+\n| GRANT OPTION | Grant table privileges. You can only |\n| | grant privileges that you have. |\n+----------------------------------+-----------------------------------------+\n| INDEX | Create an index on a table using the |\n| | CREATE INDEX statement. Without the |\n| | INDEX privilege, you can still create |\n| | indexes when creating a table using |\n| | the CREATE TABLE statement if the you |\n| | have the CREATE privilege, and you can |\n| | create indexes using the ALTER TABLE |\n| | statement if you have the ALTER |\n| | privilege. |\n+----------------------------------+-----------------------------------------+\n| INSERT | Add rows to a table using the INSERT |\n| | statement. The INSERT privilege can |\n| | also be set on individual columns; see |\n| | Column Privileges below for details. |\n+----------------------------------+-----------------------------------------+\n| REFERENCES | Unused. |\n+----------------------------------+-----------------------------------------+\n| SELECT | Read data from a table using the |\n| | SELECT statement. The SELECT privilege |\n| | can also be set on individual columns; |\n| | see Column Privileges below for |\n| | details. |\n+----------------------------------+-----------------------------------------+\n| SHOW VIEW | Show the CREATE VIEW statement to |\n| | create a view using the SHOW CREATE |\n| | VIEW statement. |\n+----------------------------------+-----------------------------------------+\n| TRIGGER | Execute triggers associated to tables |\n| | you update, execute the CREATE TRIGGER |\n| | and DROP TRIGGER statements. You will |\n| | still be able to see triggers. |\n+----------------------------------+-----------------------------------------+\n| UPDATE | Update existing rows in a table using |\n| | the UPDATE statement. UPDATE |\n| | statements usually include a WHERE |\n| | clause to update only certain rows. |\n| | You must have SELECT privileges on the |\n| | table or the appropriate columns for |\n| | the WHERE clause. The UPDATE privilege |\n| | can also be set on individual columns; |\n| | see Column Privileges below for |\n| | details. |\n+----------------------------------+-----------------------------------------+\n\nColumn Privileges\n-----------------\n\nSome table privileges can be set for individual columns of a table. To use\ncolumn privileges, specify the table explicitly and provide a list of column\nnames after the privilege type. For example, the following statement would\nallow the user to read the names and positions of employees, but not other\ninformation from the same table, such as salaries.\n\nGRANT SELECT (name, position) on Employee to \'jeffrey\'@\'localhost\';\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |\n+----------------------------------+-----------------------------------------+\n| INSERT (column_list) | Add rows specifying values in columns |\n| | using the INSERT statement. If you |\n| | only have column-level INSERT |\n| | privileges, you must specify the |\n| | columns you are setting in the INSERT |\n| | statement. All other columns will be |\n| | set to their default values, or NULL. |\n+----------------------------------+-----------------------------------------+\n| REFERENCES (column_list) | Unused. |\n+----------------------------------+-----------------------------------------+\n| SELECT (column_list) | Read values in columns using the |\n| | SELECT statement. You cannot access or |\n| | query any columns for which you do not |\n| | have SELECT privileges, including in |\n| | WHERE, ON, GROUP BY, and ORDER BY |\n| | clauses. |\n+----------------------------------+-----------------------------------------+\n| UPDATE (column_list) | Update values in columns of existing |\n| | rows using the UPDATE statement. |\n| | UPDATE statements usually include a |\n| | WHERE clause to update only certain |\n| | rows. You must have SELECT privileges |\n| | on the table or the appropriate |\n| | columns for the WHERE clause. |\n+----------------------------------+-----------------------------------------+\n\nFunction Privileges\n-------------------\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |') WHERE help_topic_id = 107; update help_topic set description = CONCAT(description, '\n+----------------------------------+-----------------------------------------+\n| ALTER ROUTINE | Change the characteristics of a stored |\n| | function using the ALTER FUNCTION |\n| | statement. |\n+----------------------------------+-----------------------------------------+\n| EXECUTE | Use a stored function. You need SELECT |\n| | privileges for any tables or columns |\n| | accessed by the function. |\n+----------------------------------+-----------------------------------------+\n| GRANT OPTION | Grant function privileges. You can |\n| | only grant privileges that you have. |\n+----------------------------------+-----------------------------------------+\n\nProcedure Privileges\n--------------------\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |\n+----------------------------------+-----------------------------------------+\n| ALTER ROUTINE | Change the characteristics of a stored |\n| | procedure using the ALTER PROCEDURE |\n| | statement. |\n+----------------------------------+-----------------------------------------+\n| EXECUTE | Execute a stored procedure using the |\n| | CALL statement. The privilege to call |\n| | a procedure may allow you to perform |\n| | actions you wouldn\'t otherwise be able |\n| | to do, such as insert rows into a |\n| | table. |\n+----------------------------------+-----------------------------------------+\n| GRANT OPTION | Grant procedure privileges. You can |\n| | only grant privileges that you have. |\n+----------------------------------+-----------------------------------------+\n\nGRANT EXECUTE ON PROCEDURE mysql.create_db TO maintainer;\n\nProxy Privileges\n----------------\n\n+----------------------------------+-----------------------------------------+\n| Privilege | Description |\n+----------------------------------+-----------------------------------------+\n| PROXY | Permits one user to be a proxy for |\n| | another. |\n+----------------------------------+-----------------------------------------+\n\nThe PROXY privilege allows one user to proxy as another user, which means\ntheir privileges change to that of the proxy user, and the CURRENT_USER()\nfunction returns the user name of the proxy user.\n\nThe PROXY privilege only works with authentication plugins that support it.\nThe default mysql_native_password authentication plugin does not support proxy\nusers.\n\nThe pam authentication plugin is the only plugin included with MariaDB that\ncurrently supports proxy users. The PROXY privilege is commonly used with the\npam authentication plugin to enable user and group mapping with PAM.\n\nFor example, to grant the PROXY privilege to an anonymous account that\nauthenticates with the pam authentication plugin, you could execute the\nfollowing:\n\nCREATE USER \'dba\'@\'%\' IDENTIFIED BY \'strongpassword\';\nGRANT ALL PRIVILEGES ON *.* TO \'dba\'@\'%\' ;\n\nCREATE USER \'\'@\'%\' IDENTIFIED VIA pam USING \'mariadb\';\nGRANT PROXY ON \'dba\'@\'%\' TO \'\'@\'%\';\n\nA user account can only grant the PROXY privilege for a specific user account\nif the granter also has the PROXY privilege for that specific user account,\nand if that privilege is defined WITH GRANT OPTION. For example, the following\nexample fails because the granter does not have the PROXY privilege for that\nspecific user account at all:\n\nSELECT USER(), CURRENT_USER();\n+-----------------+-----------------+\n| USER() | CURRENT_USER() |\n+-----------------+-----------------+\n| alice@localhost | alice@localhost |\n+-----------------+-----------------+\n\nSHOW GRANTS;\n+------------------------------------------------------------------------------\n----------------------------------------+\n| Grants for alice@localhost \n |\n+------------------------------------------------------------------------------\n----------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'alice\'@\'localhost\' IDENTIFIED BY PASSWORD\n\'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19\' |\n+------------------------------------------------------------------------------\n----------------------------------------+\n\nGRANT PROXY ON \'dba\'@\'localhost\' TO \'bob\'@\'localhost\';\nERROR 1698 (28000): Access denied for user \'alice\'@\'localhost\'\n\nAnd the following example fails because the granter does have the PROXY\nprivilege for that specific user account, but it is not defined WITH GRANT\nOPTION:\n\nSELECT USER(), CURRENT_USER();\n+-----------------+-----------------+\n| USER() | CURRENT_USER() |\n+-----------------+-----------------+\n| alice@localhost | alice@localhost |\n+-----------------+-----------------+\n\nSHOW GRANTS;\n+------------------------------------------------------------------------------\n----------------------------------------+\n| Grants for alice@localhost \n |\n+------------------------------------------------------------------------------\n----------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'alice\'@\'localhost\' IDENTIFIED BY PASSWORD\n\'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19\' |\n| GRANT PROXY ON \'dba\'@\'localhost\' TO \'alice\'@\'localhost\' \n |\n+------------------------------------------------------------------------------\n----------------------------------------+\n\nGRANT PROXY ON \'dba\'@\'localhost\' TO \'bob\'@\'localhost\';\nERROR 1698 (28000): Access denied for user \'alice\'@\'localhost\'\n\nBut the following example succeeds because the granter does have the PROXY\nprivilege for that specific user account, and it is defined WITH GRANT OPTION:\n\nSELECT USER(), CURRENT_USER();\n+-----------------+-----------------+\n| USER() | CURRENT_USER() |\n+-----------------+-----------------+\n| alice@localhost | alice@localhost |\n+-----------------+-----------------+\n\nSHOW GRANTS;\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n| Grants for alice@localhost \n |\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'alice\'@\'localhost\' IDENTIFIED BY PASSWORD\n\'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19\' WITH GRANT OPTION |\n| GRANT PROXY ON \'dba\'@\'localhost\' TO \'alice\'@\'localhost\' WITH GRANT OPTION \n |\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n\nGRANT PROXY ON \'dba\'@\'localhost\' TO \'bob\'@\'localhost\';\n\nA user account can grant the PROXY privilege for any other user account if the\ngranter has the PROXY privilege for the \'\'@\'%\' anonymous user account, like\nthis:\n\nGRANT PROXY ON \'\'@\'%\' TO \'dba\'@\'localhost\' WITH GRANT OPTION;\n\nFor example, the following example succeeds because the user can grant the\nPROXY privilege for any other user account:\n\nSELECT USER(), CURRENT_USER();\n+-----------------+-----------------+\n| USER() | CURRENT_USER() |\n+-----------------+-----------------+\n| alice@localhost | alice@localhost |\n+-----------------+-----------------+\n\nSHOW GRANTS;\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n| Grants for alice@localhost \n |\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n| GRANT ALL PRIVILEGES ON *.* TO \'alice\'@\'localhost\' IDENTIFIED BY PASSWORD\n\'*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19\' WITH GRANT OPTION |\n| GRANT PROXY ON \'\'@\'%\' TO \'alice\'@\'localhost\' WITH GRANT OPTION \n |\n+------------------------------------------------------------------------------\n----------------------------------------------------------+\n\nGRANT PROXY ON \'app1_dba\'@\'localhost\' TO \'bob\'@\'localhost\';\nQuery OK, 0 rows affected (0.004 sec)\n\nGRANT PROXY ON \'app2_dba\'@\'localhost\' TO \'carol\'@\'localhost\';\nQuery OK, 0 rows affected (0.004 sec)\n\nThe default root user accounts created by mysql_install_db have this\nprivilege. For example:\n\nGRANT ALL PRIVILEGES ON *.* TO \'root\'@\'localhost\' WITH GRANT OPTION;\nGRANT PROXY ON \'\'@\'%\' TO \'root\'@\'localhost\' WITH GRANT OPTION;\n\nThis allows the default root user accounts to grant the PROXY privilege for\nany other user account, and it also allows the default root user accounts to\ngrant others the privilege to do the same.\n\nAuthentication Options\n----------------------\n\nThe authentication options for the GRANT statement are the same as those for\nthe CREATE USER statement.\n\nIDENTIFIED BY \'password\'\n------------------------\n\nThe optional IDENTIFIED BY clause can be used to provide an account with a\npassword. The password should be specified in plain text. It will be hashed by\nthe PASSWORD function prior to being stored.\n\nFor example, if our password is mariadb, then we can create the user with:\n\nGRANT USAGE ON *.* TO foo2@test IDENTIFIED BY \'mariadb\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nIf the user account already exists and if you provide the IDENTIFIED BY\nclause, then the user\'s password will be changed. You must have the privileges\nneeded for the SET PASSWORD statement to change a user\'s password with GRANT.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED BY PASSWORD \'password_hash\'\n--------------------------------------\n\nThe optional IDENTIFIED BY PASSWORD clause can be used to provide an account\nwith a password that has already been hashed. The password should be specified\nas a hash that was provided by the PASSWORD function. It will be stored as-is.\n\nFor example, if our password is mariadb, then we can find the hash with:\n\nSELECT PASSWORD(\'mariadb\');\n+-------------------------------------------+\n| PASSWORD(\'mariadb\') |\n+-------------------------------------------+\n| *54958E764CE10E50764C2EECBB71D01F08549980 |\n+-------------------------------------------+\n1 row in set (0.00 sec)\n\nAnd then we can create a user with the hash:\n\nGRANT USAGE ON *.* TO foo2@test IDENTIFIED BY \n PASSWORD \'*54958E764CE10E50764C2EECBB71D01F08549980\';\n\nIf you do not specify a password with the IDENTIFIED BY clause, the user will\nbe able to connect without a password. A blank password is not a wildcard to\nmatch any password. The user must connect without providing a password if no\npassword is set.\n\nIf the user account already exists and if you provide the IDENTIFIED BY\nclause, then the user\'s password will be changed. You must have the privileges\nneeded for the SET PASSWORD statement to change a user\'s password with GRANT.\n\nThe only authentication plugins that this clause supports are\nmysql_native_password and mysql_old_password.\n\nIDENTIFIED {VIA|WITH} authentication_plugin\n-------------------------------------------\n\nThe optional IDENTIFIED VIA authentication_plugin allows you to specify that\nthe account should be authenticated by a specific authentication plugin. The\nplugin name must be an active authentication plugin as per SHOW PLUGINS. If it\ndoesn\'t show up in that output, then you will need to install it with INSTALL\nPLUGIN or INSTALL SONAME.\n\nFor example, this could be used with the PAM authentication plugin:\n\nGRANT USAGE ON *.* TO foo2@test IDENTIFIED VIA pam;\n\nSome authentication plugins allow additional arguments to be specified after a\nUSING or AS keyword. For example, the PAM authentication plugin accepts a\nservice name:\n\nGRANT USAGE ON *.* TO foo2@test IDENTIFIED VIA pam USING \'mariadb\';\n\nThe exact meaning of the additional argument would depend on the specific\nauthentication plugin.\n\nMariaDB starting with 10.4.0\n----------------------------\nThe USING or AS keyword can also be used to provide a plain-text password to a\nplugin if it\'s provided as an argument to the PASSWORD() function. This is\nonly valid for authentication plugins that have implemented a hook for the\nPASSWORD() function. For example, the ed25519 authentication plugin supports\nthis:\n\nCREATE USER safe@\'%\' IDENTIFIED VIA ed25519 \n USING PASSWORD(\'secret\');\n\nMariaDB starting with 10.4.3\n----------------------------\nOne can specify many authentication plugins, they all work as alternatives\nways of authenticating a user:\n\nCREATE USER safe@\'%\' IDENTIFIED VIA ed25519 \n USING PASSWORD(\'secret\') OR unix_socket;\n\nBy default, when you create a user without specifying an authentication\nplugin, MariaDB uses the mysql_native_password plugin.\n\nResource Limit Options\n----------------------\n\nIt is possible to set per-account limits for certain server resources. The\nfollowing table shows the values that can be set per account:\n\n+--------------------------------------+--------------------------------------+') WHERE help_topic_id = 107; update help_topic set description = CONCAT(description, '\n| Limit Type | Decription |\n+--------------------------------------+--------------------------------------+\n| MAX_QUERIES_PER_HOUR | Number of statements that the |\n| | account can issue per hour |\n| | (including updates) |\n+--------------------------------------+--------------------------------------+\n| MAX_UPDATES_PER_HOUR | Number of updates (not queries) |\n| | that the account can issue per hour |\n+--------------------------------------+--------------------------------------+\n| MAX_CONNECTIONS_PER_HOUR | Number of connections that the |\n| | account can start per hour |\n+--------------------------------------+--------------------------------------+\n| MAX_USER_CONNECTIONS | Number of simultaneous connections |\n| | that can be accepted from the same |\n| | account; if it is 0, |\n| | max_connections will be used |\n| | instead; if max_connections is 0, |\n| | there is no limit for this |\n| | account\'s simultaneous connections. |\n+--------------------------------------+--------------------------------------+\n| MAX_STATEMENT_TIME | Timeout, in seconds, for statements |\n| | executed by the user. See also |\n| | Aborting Statements that Exceed a |\n| | Certain Time to Execute. |\n+--------------------------------------+--------------------------------------+\n\nIf any of these limits are set to 0, then there is no limit for that resource\nfor that user.\n\nTo set resource limits for an account, if you do not want to change that\naccount\'s privileges, you can issue a GRANT statement with the USAGE\nprivilege, which has no meaning. The statement can name some or all limit\ntypes, in any order.\n\nHere is an example showing how to set resource limits:\n\nGRANT USAGE ON *.* TO \'someone\'@\'localhost\' WITH\n MAX_USER_CONNECTIONS 0\n MAX_QUERIES_PER_HOUR 200;\n\nThe resources are tracked per account, which means \'user\'@\'server\'; not per\nuser name or per connection.\n\nThe count can be reset for all users using FLUSH USER_RESOURCES, FLUSH\nPRIVILEGES or mysqladmin reload.\n\nUsers with the CONNECTION ADMIN privilege (in MariaDB 10.5.2 and later) or the\nSUPER privilege are not restricted by max_user_connections, max_connections,\nor max_password_errors.\n\nPer account resource limits are stored in the user table, in the mysql\ndatabase. Columns used for resources limits are named max_questions,\nmax_updates, max_connections (for MAX_CONNECTIONS_PER_HOUR), and\nmax_user_connections (for MAX_USER_CONNECTIONS).\n\nTLS Options\n-----------\n\nBy default, MariaDB transmits data between the server and clients without\nencrypting it. This is generally acceptable when the server and client run on\nthe same host or in networks where security is guaranteed through other means.\nHowever, in cases where the server and client exist on separate networks or\nthey are in a high-risk network, the lack of encryption does introduce\nsecurity concerns as a malicious actor could potentially eavesdrop on the\ntraffic as it is sent over the network between them.\n\nTo mitigate this concern, MariaDB allows you to encrypt data in transit\nbetween the server and clients using the Transport Layer Security (TLS)\nprotocol. TLS was formerly known as Secure Socket Layer (SSL), but strictly\nspeaking the SSL protocol is a predecessor to TLS and, that version of the\nprotocol is now considered insecure. The documentation still uses the term SSL\noften and for compatibility reasons TLS-related server system and status\nvariables still use the prefix ssl_, but internally, MariaDB only supports its\nsecure successors.\n\nSee Secure Connections Overview for more information about how to determine\nwhether your MariaDB server has TLS support.\n\nYou can set certain TLS-related restrictions for specific user accounts. For\ninstance, you might use this with user accounts that require access to\nsensitive data while sending it across networks that you do not control. These\nrestrictions can be enabled for a user account with the CREATE USER, ALTER\nUSER, or GRANT statements. The following options are available:\n\n+---------------------------+------------------------------------------------+\n| Option | Description |\n+---------------------------+------------------------------------------------+\n| REQUIRE NONE | TLS is not required for this account, but can |\n| | still be used. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SSL | The account must use TLS, but no valid X509 |\n| | certificate is required. This option cannot |\n| | be combined with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE X509 | The account must use TLS and must have a |\n| | valid X509 certificate. This option implies |\n| | REQUIRE SSL. This option cannot be combined |\n| | with other TLS options. |\n+---------------------------+------------------------------------------------+\n| REQUIRE ISSUER \'issuer\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the Certificate |\n| | Authority must be the one specified via the |\n| | string issuer. This option implies REQUIRE |\n| | X509. This option can be combined with the |\n| | SUBJECT, and CIPHER options in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE SUBJECT \'subject\' | The account must use TLS and must have a |\n| | valid X509 certificate. Also, the |\n| | certificate\'s Subject must be the one |\n| | specified via the string subject. This option |\n| | implies REQUIRE X509. This option can be |\n| | combined with the ISSUER, and CIPHER options |\n| | in any order. |\n+---------------------------+------------------------------------------------+\n| REQUIRE CIPHER \'cipher\' | The account must use TLS, but no valid X509 |\n| | certificate is required. Also, the encryption |\n| | used for the connection must use a specific |\n| | cipher method specified in the string cipher. |\n| | This option implies REQUIRE SSL. This option |\n| | can be combined with the ISSUER, and SUBJECT |\n| | options in any order. |\n+---------------------------+------------------------------------------------+\n\nThe REQUIRE keyword must be used only once for all specified options, and the\nAND keyword can be used to separate individual options, but it is not required.\n\nFor example, you can create a user account that requires these TLS options\nwith the following:\n\nGRANT USAGE ON *.* TO \'alice\'@\'%\'\n REQUIRE SUBJECT \'/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland\'\n AND ISSUER \'/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter\nParker/emailAddress=p.parker@marvel.com\'\n AND CIPHER \'SHA-DES-CBC3-EDH-RSA\';\n\nIf any of these options are set for a specific user account, then any client\nwho tries to connect with that user account will have to be configured to\nconnect with TLS.\n\nSee Securing Connections for Client and Server for information on how to\nenable TLS on the client and server.\n\nRoles\n-----\n\nSyntax\n------\n\nGRANT role TO grantee [, grantee ... ]\n[ WITH ADMIN OPTION ]\n\ngrantee:\n rolename\n username [authentication_option]\n\nThe GRANT statement is also used to grant the use of a role to one or more\nusers or other roles. In order to be able to grant a role, the grantor doing\nso must have permission to do so (see WITH ADMIN in the CREATE ROLE article).\n\nSpecifying the WITH ADMIN OPTION permits the grantee to in turn grant the role\nto another.\n\nFor example, the following commands show how to grant the same role to a\ncouple different users.\n\nGRANT journalist TO hulda;\n\nGRANT journalist TO berengar WITH ADMIN OPTION;\n\nIf a user has been granted a role, they do not automatically obtain all\npermissions associated with that role. These permissions are only in use when\nthe user activates the role with the SET ROLE statement.\n\nTO PUBLIC\n---------\n\nMariaDB starting with 10.11\n---------------------------\n\nSyntax\n------\n\nGRANT ON . TO PUBLIC;\nREVOKE ON . FROM PUBLIC;\n\nGRANT ... TO PUBLIC grants privileges to all users with access to the server.\nThe privileges also apply to users created after the privileges are granted.\nThis can be useful when one only wants to state once that all users need to\nhave a certain set of privileges.\n\nWhen running SHOW GRANTS, a user will also see all privileges inherited from\nPUBLIC. SHOW GRANTS FOR PUBLIC will only show TO PUBLIC grants.\n\nGrant Examples\n--------------\n\nGranting Root-like Privileges\n-----------------------------\n\nYou can create a user that has privileges similar to the default root accounts\nby executing the following:\n\nCREATE USER \'alexander\'@\'localhost\';\nGRANT ALL PRIVILEGES ON *.* to \'alexander\'@\'localhost\' WITH GRANT OPTION;\n\nURL: https://mariadb.com/kb/en/grant/') WHERE help_topic_id = 107; insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (108,10,'RENAME USER','Syntax\n------\n\nRENAME USER old_user TO new_user\n [, old_user TO new_user] ...\n\nDescription\n-----------\n\nThe RENAME USER statement renames existing MariaDB accounts. To use it, you\nmust have the global CREATE USER privilege or the UPDATE privilege for the\nmysql database. Each account is named using the same format as for the CREATE\nUSER statement; for example, \'jeffrey\'@\'localhost\'. If you specify only the\nuser name part of the account name, a host name part of \'%\' is used.\n\nIf any of the old user accounts do not exist or any of the new user accounts\nalready exist, ERROR 1396 (HY000) results. If an error occurs, RENAME USER\nwill still rename the accounts that do not result in an error.\n\nExamples\n--------\n\nCREATE USER \'donald\', \'mickey\';\nRENAME USER \'donald\' TO \'duck\'@\'localhost\', \'mickey\' TO \'mouse\'@\'localhost\';\n\nURL: https://mariadb.com/kb/en/rename-user/','','https://mariadb.com/kb/en/rename-user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (109,10,'REVOKE','Privileges\n----------\n\nSyntax\n------\n\nREVOKE \n priv_type [(column_list)]\n [, priv_type [(column_list)]] ...\n ON [object_type] priv_level\n FROM user [, user] ...\n\nREVOKE ALL PRIVILEGES, GRANT OPTION\n FROM user [, user] ...\n\nDescription\n-----------\n\nThe REVOKE statement enables system administrators to revoke privileges (or\nroles - see section below) from MariaDB accounts. Each account is named using\nthe same format as for the GRANT statement; for example,\n\'jeffrey\'@\'localhost\'. If you specify only the user name part of the account\nname, a host name part of \'%\' is used. For details on the levels at which\nprivileges exist, the allowable priv_type and priv_level values, and the\nsyntax for specifying users and passwords, see GRANT.\n\nTo use the first REVOKE syntax, you must have the GRANT OPTION privilege, and\nyou must have the privileges that you are revoking.\n\nTo revoke all privileges, use the second syntax, which drops all global,\ndatabase, table, column, and routine privileges for the named user or users:\n\nREVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...\n\nTo use this REVOKE syntax, you must have the global CREATE USER privilege or\nthe UPDATE privilege for the mysql database. See GRANT.\n\nExamples\n--------\n\nREVOKE SUPER ON *.* FROM \'alexander\'@\'localhost\';\n\nRoles\n-----\n\nSyntax\n------\n\nREVOKE role [, role ...]\n FROM grantee [, grantee2 ... ]\n\nREVOKE ADMIN OPTION FOR role FROM grantee [, grantee2]\n\nDescription\n-----------\n\nREVOKE is also used to remove a role from a user or another role that it\'s\npreviously been assigned to. If a role has previously been set as a default\nrole, REVOKE does not remove the record of the default role from the\nmysql.user table. If the role is subsequently granted again, it will again be\nthe user\'s default. Use SET DEFAULT ROLE NONE to explicitly remove this.\n\nBefore MariaDB 10.1.13, the REVOKE role statement was not permitted in\nprepared statements.\n\nExample\n-------\n\nREVOKE journalist FROM hulda\n\nURL: https://mariadb.com/kb/en/revoke/','','https://mariadb.com/kb/en/revoke/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (110,10,'SET PASSWORD','Syntax\n------\n\nSET PASSWORD [FOR user] =\n {\n PASSWORD(\'some password\')\n | OLD_PASSWORD(\'some password\')\n | \'encrypted password\'\n }\n\nDescription\n-----------\n\nThe SET PASSWORD statement assigns a password to an existing MariaDB user\naccount.\n\nIf the password is specified using the PASSWORD() or OLD_PASSWORD() function,\nthe literal text of the password should be given. If the password is specified\nwithout using either function, the password should be the already-encrypted\npassword value as returned by PASSWORD().\n\nOLD_PASSWORD() should only be used if your MariaDB/MySQL clients are very old\n(< 4.0.0).\n\nWith no FOR clause, this statement sets the password for the current user. Any\nclient that has connected to the server using a non-anonymous account can\nchange the password for that account.\n\nWith a FOR clause, this statement sets the password for a specific account on\nthe current server host. Only clients that have the UPDATE privilege for the\nmysql database can do this. The user value should be given in\nuser_name@host_name format, where user_name and host_name are exactly as they\nare listed in the User and Host columns of the mysql.user table (or view in\nMariaDB-10.4 onwards) entry.\n\nThe argument to PASSWORD() and the password given to MariaDB clients can be of\narbitrary length.\n\nAuthentication Plugin Support\n-----------------------------\n\nMariaDB starting with 10.4\n--------------------------\nIn MariaDB 10.4 and later, SET PASSWORD (with or without PASSWORD()) works for\naccounts authenticated via any authentication plugin that supports passwords\nstored in the mysql.global_priv table.\n\nThe ed25519, mysql_native_password, and mysql_old_password authentication\nplugins store passwords in the mysql.global_priv table.\n\nIf you run SET PASSWORD on an account that authenticates with one of these\nauthentication plugins that stores passwords in the mysql.global_priv table,\nthen the PASSWORD() function is evaluated by the specific authentication\nplugin used by the account. The authentication plugin hashes the password with\na method that is compatible with that specific authentication plugin.\n\nThe unix_socket, named_pipe, gssapi, and pam authentication plugins do not\nstore passwords in the mysql.global_priv table. These authentication plugins\nrely on other methods to authenticate the user.\n\nIf you attempt to run SET PASSWORD on an account that authenticates with one\nof these authentication plugins that doesn\'t store a password in the\nmysql.global_priv table, then MariaDB Server will raise a warning like the\nfollowing:\n\nSET PASSWORD is ignored for users authenticating via unix_socket plugin\n\nSee Authentication from MariaDB 10.4 for an overview of authentication changes\nin MariaDB 10.4.\n\nMariaDB until 10.3\n------------------\nIn MariaDB 10.3 and before, SET PASSWORD (with or without PASSWORD()) only\nworks for accounts authenticated via mysql_native_password or\nmysql_old_password authentication plugins\n\nPasswordless User Accounts\n--------------------------\n\nUser accounts do not always require passwords to login.\n\nThe unix_socket , named_pipe and gssapi authentication plugins do not require\na password to authenticate the user.\n\nThe pam authentication plugin may or may not require a password to\nauthenticate the user, depending on the specific configuration.\n\nThe mysql_native_password and mysql_old_password authentication plugins\nrequire passwords for authentication, but the password can be blank. In that\ncase, no password is required.\n\nIf you provide a password while attempting to log into the server as an\naccount that doesn\'t require a password, then MariaDB server will simply\nignore the password.\n\nMariaDB starting with 10.4\n--------------------------\nIn MariaDB 10.4 and later, a user account can be defined to use multiple\nauthentication plugins in a specific order of preference. This specific\nscenario may be more noticeable in these versions, since an account could be\nassociated with some authentication plugins that require a password, and some\nthat do not.\n\nExample\n-------\n\nFor example, if you had an entry with User and Host column values of \'bob\' and\n\'%.loc.gov\', you would write the statement like this:\n\nSET PASSWORD FOR \'bob\'@\'%.loc.gov\' = PASSWORD(\'newpass\');\n\nIf you want to delete a password for a user, you would do:\n\nSET PASSWORD FOR \'bob\'@localhost = PASSWORD(\"\");\n\nURL: https://mariadb.com/kb/en/set-password/','','https://mariadb.com/kb/en/set-password/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (111,10,'CREATE ROLE','Syntax\n------\n\nCREATE [OR REPLACE] ROLE [IF NOT EXISTS] role \n [WITH ADMIN\n {CURRENT_USER | CURRENT_ROLE | user | role}]\n\nDescription\n-----------\n\nThe CREATE ROLE statement creates one or more MariaDB roles. To use it, you\nmust have the global CREATE USER privilege or the INSERT privilege for the\nmysql database. For each account, CREATE ROLE creates a new row in the\nmysql.user table that has no privileges, and with the corresponding is_role\nfield set to Y. It also creates a record in the mysql.roles_mapping table.\n\nIf any of the specified roles already exist, ERROR 1396 (HY000) results. If an\nerror occurs, CREATE ROLE will still create the roles that do not result in an\nerror. The maximum length for a role is 128 characters. Role names can be\nquoted, as explained in the Identifier names page. Only one error is produced\nfor all roles which have not been created:\n\nERROR 1396 (HY000): Operation CREATE ROLE failed for \'a\',\'b\',\'c\'\n\nFailed CREATE or DROP operations, for both users and roles, produce the same\nerror code.\n\nPUBLIC and NONE are reserved, and cannot be used as role names. NONE is used\nto unset a role and PUBLIC has a special use in other systems, such as Oracle,\nso is reserved for compatibility purposes.\n\nFor valid identifiers to use as role names, see Identifier Names.\n\nWITH ADMIN\n----------\n\nThe optional WITH ADMIN clause determines whether the current user, the\ncurrent role or another user or role has use of the newly created role. If the\nclause is omitted, WITH ADMIN CURRENT_USER is treated as the default, which\nmeans that the current user will be able to GRANT this role to users.\n\nOR REPLACE\n----------\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP ROLE IF EXISTS name;\nCREATE ROLE name ...;\n\nIF NOT EXISTS\n-------------\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified role already exists. Cannot be used together with\nthe OR REPLACE clause.\n\nExamples\n--------\n\nCREATE ROLE journalist;\n\nCREATE ROLE developer WITH ADMIN lorinda@localhost;\n\nGranting the role to another user. Only user lorinda@localhost has permission\nto grant the developer role:\n\nSELECT USER();\n+-------------------+\n| USER() |\n+-------------------+\n| henning@localhost |\n+-------------------+\n...\nGRANT developer TO ian@localhost;\nAccess denied for user \'henning\'@\'localhost\'\n\nSELECT USER();\n+-------------------+\n| USER() |\n+-------------------+\n| lorinda@localhost |\n+-------------------+\n\nGRANT m_role TO ian@localhost;\n\nThe OR REPLACE and IF NOT EXISTS clauses. The journalist role already exists:\n\nCREATE ROLE journalist;\nERROR 1396 (HY000): Operation CREATE ROLE failed for \'journalist\'\n\nCREATE OR REPLACE ROLE journalist;\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE ROLE IF NOT EXISTS journalist;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------------------------------+\n| Note | 1975 | Can\'t create role \'journalist\'; it already exists |\n+-------+------+---------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/create-role/','','https://mariadb.com/kb/en/create-role/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (112,10,'DROP ROLE','Syntax\n------\n\nDROP ROLE [IF EXISTS] role_name [,role_name ...]\n\nDescription\n-----------\n\nThe DROP ROLE statement removes one or more MariaDB roles. To use this\nstatement, you must have the global CREATE USER privilege or the DELETE\nprivilege for the mysql database.\n\nDROP ROLE does not disable roles for connections which selected them with SET\nROLE. If a role has previously been set as a default role, DROP ROLE does not\nremove the record of the default role from the mysql.user table. If the role\nis subsequently recreated and granted, it will again be the user\'s default.\nUse SET DEFAULT ROLE NONE to explicitly remove this.\n\nIf any of the specified user accounts do not exist, ERROR 1396 (HY000)\nresults. If an error occurs, DROP ROLE will still drop the roles that do not\nresult in an error. Only one error is produced for all roles which have not\nbeen dropped:\n\nERROR 1396 (HY000): Operation DROP ROLE failed for \'a\',\'b\',\'c\'\n\nFailed CREATE or DROP operations, for both users and roles, produce the same\nerror code.\n\nIF EXISTS\n---------\n\nIf the IF EXISTS clause is used, MariaDB will return a warning instead of an\nerror if the role does not exist.\n\nExamples\n--------\n\nDROP ROLE journalist;\n\nThe same thing using the optional IF EXISTS clause:\n\nDROP ROLE journalist;\nERROR 1396 (HY000): Operation DROP ROLE failed for \'journalist\'\n\nDROP ROLE IF EXISTS journalist;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nNote (Code 1975): Can\'t drop role \'journalist\'; it doesn\'t exist\n\nURL: https://mariadb.com/kb/en/drop-role/','','https://mariadb.com/kb/en/drop-role/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (113,10,'SET ROLE','Syntax\n------\n\nSET ROLE { role | NONE }\n\nDescription\n-----------\n\nThe SET ROLE statement enables a role, along with all of its associated\npermissions, for the current session. To unset a role, use NONE .\n\nIf a role that doesn\'t exist, or to which the user has not been assigned, is\nspecified, an ERROR 1959 (OP000): Invalid role specification error occurs.\n\nAn automatic SET ROLE is implicitly performed when a user connects if that\nuser has been assigned a default role. See SET DEFAULT ROLE.\n\nExample\n-------\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSET ROLE staff;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| staff |\n+--------------+\n\nSET ROLE NONE;\n\nSELECT CURRENT_ROLE();\n+----------------+\n| CURRENT_ROLE() |\n+----------------+\n| NULL |\n+----------------+\n\nURL: https://mariadb.com/kb/en/set-role/','','https://mariadb.com/kb/en/set-role/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (114,10,'SET DEFAULT ROLE','Syntax\n------\n\nSET DEFAULT ROLE { role | NONE } [ FOR user@host ]\n\nDescription\n-----------\n\nThe SET DEFAULT ROLE statement sets a default role for a specified (or\ncurrent) user. A default role is automatically enabled when a user connects\n(an implicit SET ROLE statement is executed immediately after a connection is\nestablished).\n\nTo be able to set a role as a default, the role must already have been granted\nto that user, and one needs the privileges to enable this role (if you cannot\ndo SET ROLE X, you won\'t be able to do SET DEFAULT ROLE X). To set a default\nrole for another user one needs to have write access to the mysql database.\n\nTo remove a user\'s default role, use SET DEFAULT ROLE NONE [ FOR user@host ].\nThe record of the default role is not removed if the role is dropped or\nrevoked, so if the role is subsequently re-created or granted, it will again\nbe the user\'s default role.\n\nThe default role is stored in the default_role column in the mysql.user\ntable/view, as well as in the Information Schema APPLICABLE_ROLES table, so\nthese can be viewed to see which role has been assigned to a user as the\ndefault.\n\nExamples\n--------\n\nSetting a default role for the current user:\n\nSET DEFAULT ROLE journalist;\n\nRemoving a default role from the current user:\n\nSET DEFAULT ROLE NONE;\n\nSetting a default role for another user. The role has to have been granted to\nthe user before it can be set as default:\n\nCREATE ROLE journalist;\nCREATE USER taniel;\n\nSET DEFAULT ROLE journalist FOR taniel;\nERROR 1959 (OP000): Invalid role specification `journalist`\n\nGRANT journalist TO taniel;\nSET DEFAULT ROLE journalist FOR taniel;\n\nViewing mysql.user:\n\nselect * from mysql.user where user=\'taniel\'\\G\n*************************** 1. row ***************************\n Host: %\n User: taniel\n...\n is_role: N\n default_role: journalist\n...\n\nRemoving a default role for another user\n\nSET DEFAULT ROLE NONE FOR taniel;\n\nURL: https://mariadb.com/kb/en/set-default-role/','','https://mariadb.com/kb/en/set-default-role/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (115,10,'Roles Overview','Description\n-----------\n\nA role bundles a number of privileges together. It assists larger\norganizations where, typically, a number of users would have the same\nprivileges, and, previously, the only way to change the privileges for a group\nof users was by changing each user\'s privileges individually.\n\nAlternatively, multiple external users could have been assigned the same user,\nand there would have been no way to see which actual user was responsible for\nwhich action.\n\nWith roles, managing this is easy. For example, there could be a number of\nusers assigned to a journalist role, with identical privileges. Changing the\nprivileges for all the journalists is a matter of simply changing the role\'s\nprivileges, while the individual user is still linked with any changes that\ntake place.\n\nRoles are created with the CREATE ROLE statement, and dropped with the DROP\nROLE statement. Roles are then assigned to a user with an extension to the\nGRANT statement, while privileges are assigned to a role in the regular way\nwith GRANT. Similarly, the REVOKE statement can be used to both revoke a role\nfrom a user, or revoke a privilege from a role.\n\nOnce a user has connected, he can obtain all privileges associated with a role\nby setting a role with the SET ROLE statement. The CURRENT_ROLE function\nreturns the currently set role for the session, if any.\n\nOnly roles granted directly to a user can be set, roles granted to other roles\ncannot. Instead the privileges granted to a role, which is, in turn, granted\nto another role (grantee), will be immediately available to any user who sets\nthis second grantee role.\n\nThe SET DEFAULT ROLE statement allows one to set a default role for a user. A\ndefault role is automatically enabled when a user connects (an implicit SET\nROLE statement is executed immediately after a connection is established).\n\nRoles were implemented as a GSoC 2013 project by Vicentiu Ciorbaru.\n\nSystem Tables\n-------------\n\nInformation about roles and who they\'ve been granted to can be found in the\nInformation Schema APPLICABLE_ROLES table as well as the mysql.ROLES_MAPPING\ntable.\n\nThe Information Schema ENABLED_ROLES table shows the enabled roles for the\ncurrent session.\n\nExamples\n--------\n\nCreating a role and granting a privilege:\n\nCREATE ROLE journalist;\n\nGRANT SHOW DATABASES ON *.* TO journalist;\n\nGRANT journalist to hulda;\n\nNote, that hulda has no SHOW DATABASES privilege, even though she was granted\nthe journalist role. She needs to set the role first:\n\nSHOW DATABASES;\n+--------------------+\n| Database |\n+--------------------+\n| information_schema |\n+--------------------+\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSET ROLE journalist;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| journalist |\n+--------------+\n\nSHOW DATABASES;\n+--------------------+\n| Database |\n+--------------------+\n| ... |\n| information_schema |\n| mysql |\n| performance_schema |\n| test |\n| ... |\n+--------------------+\n\nSET ROLE NONE;\n\nRoles can be granted to roles:\n\nCREATE ROLE writer;\n\nGRANT SELECT ON data.* TO writer;\n\nGRANT writer TO journalist;\n\nBut one does not need to set a role granted to a role. For example, hulda will\nautomatically get all writer privileges when she sets the journalist role:\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSHOW TABLES FROM data;\nEmpty set (0.01 sec)\n\nSET ROLE journalist;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| journalist |\n+--------------+\n\nSHOW TABLES FROM data;\n+------------------------------+\n| Tables_in_data |\n+------------------------------+\n| set1 |\n| ... |\n+------------------------------+\n\nRoles and Views (and Stored Routines)\n-------------------------------------\n\nWhen a user sets a role, he, in a sense, has two identities with two\nassociated sets of privileges. But a view (or a stored routine) can have only\none definer. So, when a view (or a stored routine) is created with the SQL\nSECURITY DEFINER, one can specify whether the definer should be CURRENT_USER\n(and the view will have none of the privileges of the user\'s role) or\nCURRENT_ROLE (in this case, the view will use role\'s privileges, but none of\nthe user\'s privileges). As a result, sometimes one can create a view that is\nimpossible to use.\n\nCREATE ROLE r1;\n\nGRANT ALL ON db1.* TO r1;\n\nGRANT r1 TO foo@localhost;\n\nGRANT ALL ON db.* TO foo@localhost;\n\nSELECT CURRENT_USER\n+---------------+\n| current_user |\n+---------------+\n| foo@localhost |\n+---------------+\n\nSET ROLE r1;\n\nCREATE TABLE db1.t1 (i int);\n\nCREATE VIEW db.v1 AS SELECT * FROM db1.t1;\n\nSHOW CREATE VIEW db.v1;\n+------+-----------------------------------------------------------------------\n------------------------------------------------------------------+------------\n---------+----------------------+\n| View | Create View \n |\ncharacter_set_client | collation_connection |\n+------+-----------------------------------------------------------------------\n------------------------------------------------------------------+------------\n---------+----------------------+\n| v1 | CREATE ALGORITHM=UNDEFINED DEFINER=`foo`@`localhost` SQL SECURITY\nDEFINER VIEW `db`.`v1` AS SELECT `db1`.`t1`.`i` AS `i` from `db1`.`t1` | utf8 \n | utf8_general_ci |\n+------+-----------------------------------------------------------------------\n------------------------------------------------------------------+------------\n---------+----------------------+\n\nCREATE DEFINER=CURRENT_ROLE VIEW db.v2 AS SELECT * FROM db1.t1;\n\nSHOW CREATE VIEW db.b2;\n+------+-----------------------------------------------------------------------\n-----------------------------------------------------+----------------------+--\n-------------------+\n| View | Create View \n | character_set_client |\ncollation_connection |\n+------+-----------------------------------------------------------------------\n-----------------------------------------------------+----------------------+--\n-------------------+\n| v2 | CREATE ALGORITHM=UNDEFINED DEFINER=`r1` SQL SECURITY DEFINER VIEW\n`db`.`v2` AS select `db1`.`t1`.`a` AS `a` from `db1`.`t1` | utf8 \n | utf8_general_ci |\n+------+-----------------------------------------------------------------------\n-----------------------------------------------------+----------------------+--\n-------------------+\n\nOther Resources\n---------------\n\n* Roles Review by Peter Gulutzan\n\nURL: https://mariadb.com/kb/en/roles_overview/','','https://mariadb.com/kb/en/roles_overview/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (116,10,'Account Locking','MariaDB starting with 10.4.2\n----------------------------\nAccount locking was introduced in MariaDB 10.4.2.\n\nDescription\n-----------\n\nAccount locking permits privileged administrators to lock/unlock user\naccounts. No new client connections will be permitted if an account is locked\n(existing connections are not affected).\n\nUser accounts can be locked at creation, with the CREATE USER statement, or\nmodified after creation with the ALTER USER statement. For example:\n\nCREATE USER \'lorin\'@\'localhost\' ACCOUNT LOCK;\n\nor\n\nALTER USER \'marijn\'@\'localhost\' ACCOUNT LOCK;\n\nThe server will return an ER_ACCOUNT_HAS_BEEN_LOCKED error when locked users\nattempt to connect:\n\nmysql -ulorin\n ERROR 4151 (HY000): Access denied, this account is locked\n\nThe ALTER USER statement is also used to unlock a user:\n\nALTER USER \'lorin\'@\'localhost\' ACCOUNT UNLOCK;\n\nThe SHOW CREATE USER statement will show whether the account is locked:\n\nSHOW CREATE USER \'marijn\'@\'localhost\';\n+-----------------------------------------------+\n| CREATE USER for marijn@localhost |\n+-----------------------------------------------+\n| CREATE USER \'marijn\'@\'localhost\' ACCOUNT LOCK |\n+-----------------------------------------------+\n\nas well as querying the mysql.global_priv table:\n\nSELECT CONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)) FROM\nmysql.global_priv \n WHERE user=\'marijn\';\n+------------------------------------------------------------------------------\n-------+\n| CONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)) \n |\n+------------------------------------------------------------------------------\n-------+\n| marijn@localhost => {\n \"access\": 0,\n \"plugin\": \"mysql_native_password\",\n \"authentication_string\": \"\",\n \"account_locked\": true,\n \"password_last_changed\": 1558017158\n} |\n+------------------------------------------------------------------------------\n-------+\n\nURL: https://mariadb.com/kb/en/account-locking/','','https://mariadb.com/kb/en/account-locking/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (117,10,'Authentication from MariaDB 10.4','MariaDB starting with 10.4\n--------------------------\nMariaDB 10.4 introduced a number of changes to the authentication process,\nintended to make things easier and more intuitive.\n\nOverview\n--------\n\nThere are four new main features in 10.4 relating to authentication:\n\n* It is possible to use more than one authentication plugin for each user\naccount. For example, this can be useful to slowly migrate users to the more\nsecure ed25519 authentication plugin over time, while allowing the old\nmysql_native_password authentication plugin as an alternative for the\ntransitional period.\n* The root@localhost user account created by mysql_install_db is created with\nthe ability to use two authentication plugins.\nFirst, it is configured to try to use the unix_socket authentication plugin.\nThis allows the root@localhost user to login without a password via the local\nUnix socket file defined by the socket system variable, as long as the login\nis attempted from a process owned by the operating system root user account.\nSecond, if authentication fails with the unix_socket authentication plugin,\nthen it is configured to try to use the mysql_native_password authentication\nplugin. However, an invalid password is initially set, so in order to\nauthenticate this way, a password must be set with SET PASSWORD.\nHowever, just using the unix_socket authentication plugin may be fine for many\nusers, and it is very secure. You may want to try going without password\nauthentication to see how well it works for you. Remember, the best way to\nkeep your password safe is not to have one!\n\n* All user accounts, passwords, and global privileges are now stored in the\nmysql.global_priv table. The mysql.user table still exists and has exactly the\nsame set of columns as before, but it’s now a view that references the\nmysql.global_priv table. Tools that analyze the mysql.user table should\ncontinue to work as before. From MariaDB 10.4.13, the dedicated mariadb.sys\nuser is created as the definer of this view. Previously root was the definer,\nwhich resulted in privilege problems when this username was changed.\n* MariaDB 10.4 adds supports for User Password Expiry, which is not active by\ndefault.\n\nDescription\n-----------\n\nAs a result of the above changes, the open-for-everyone all-powerful root\naccount is finally gone. And installation scripts will no longer demand that\nyou \"PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !\", because\nthe root account is securely created automatically.\n\nTwo all-powerful accounts are created by default — root and the OS user that\nowns the data directory, typically mysql. They are created as:\n\nCREATE USER root@localhost IDENTIFIED VIA unix_socket OR mysql_native_password\nUSING \'invalid\'\nCREATE USER mysql@localhost IDENTIFIED VIA unix_socket OR\nmysql_native_password USING \'invalid\'\n\nUsing unix_socket means that if you are the system root user, you can login as\nroot@locahost without a password. This technique was pioneered by Otto\nKekäläinen in Debian MariaDB packages and has been successfully used in Debian\nsince as early as MariaDB 10.0.\n\nIt is based on a simple fact that asking the system root for a password adds\nno extra security — root has full access to all the data files and all process\nmemory anyway. But not asking for a password means, there is no root password\nto forget (no need for the numerous tutorials on \"how to reset MariaDB root\npassword\"). And if you want to script some tedious database work, there is no\nneed to store the root password in plain text for the script to use (no need\nfor debian-sys-maint user).\n\nStill, some users may wish to log in as MariaDB root without using sudo. Hence\nthe old authentication method — conventional MariaDB password — is still\navailable. By default it is disabled (\"invalid\" is not a valid password hash),\nbut one can set the password with a usual SET PASSWORD statement. And still\nretain the password-less access via sudo.\n\nIf you install MariaDB locally (say from a tarball), you would not want to use\nsudo to be able to login. This is why MariaDB creates a second all-powerful\nuser with the same name as a system user that owns the data directory. In\nlocal (not system-wide) installations, this will be the user who installed\nMariaDB — they automatically get convenient password-less root-like access,\nbecause they can access all the data files anyway.\n\nEven if MariaDB is installed system-wide, you may not want to run your\ndatabase maintenance scripts as system root — now you can run them as system\nmysql user. And you will know that they will never destroy your entire system,\neven if you make a typo in a shell script.\n\nHowever, seasoned MariaDB DBAs who are used to the old ways do need to make\nsome changes. See the examples below for common tasks.\n\nCookbook\n--------\n\nAfter installing MariaDB system-wide the first thing you’ve got used to doing\nis logging in into the unprotected root account and protecting it, that is,\nsetting the root password:\n\n$ sudo dnf install MariaDB-server\n$ mysql -uroot\n...\nMariaDB> set password = password(\"XH4VmT3_jt\");\n\nThis is not only unnecessary now, it will simply not work — there is no\nunprotected root account. To login as root use\n\n$ sudo dnf install MariaDB-server\n$ sudo mysql\n\nNote that it implies you are connecting via the unix socket, not tcp. If you\nhappen to have protocol=tcp in a system-wide /etc/my.cnf file, use sudo mysql\n--protocol=socket.\n\nAfter installing MariaDB locally you’ve also used to connect to the\nunprotected root account using mysql -uroot. This will not work either, simply\nuse mysql without specifying a username.\n\nIf you\'ve forgotten your root password, no problem — you can still connect\nusing sudo and change the password. And if you\'ve also removed unix_socket\nauthentication, to restore access do as follows:\n\n* restart MariaDB with --skip-grant-tables\n* login into the unprotected server\n* run FLUSH PRIVILEGES (note, before 10.4 this would’ve been the last step,\nnot anymore). This disables --skip-grant-tables and allows you to change the\nstored authentication method\n* run SET PASSWORD FOR root@localhost to change the root password.\n\nTo view inside privilege tables, the old mysql.user table still exists. You\ncan select from it as before, although you cannot update it anymore. It\ndoesn’t show alternative authentication plugins and this was one of the\nreasons for switching to the mysql.global_priv table — complex authentication\nrules did not fit into rigid structure of a relational table. You can select\nfrom the new table, for example:\n\nselect concat(user, \'@\', host, \' => \', json_detailed(priv)) from\nmysql.global_priv;\n\nReverting to the Previous Authentication Method for root@localhost\n------------------------------------------------------------------\n\nIf you don\'t want the root@localhost user account created by mysql_install_db\nto use unix_socket authentication by default, then there are a few ways to\nrevert to the previous mysql_native_password authentication method for this\nuser account.\n\nConfiguring mysql_install_db to Revert to the Previous Authentication Method\n----------------------------------------------------------------------------\n\nOne way to revert to the previous mysql_native_password authentication method\nfor the root@localhost user account is to execute mysql_install_db with a\nspecial option. If mysql_install_db is executed while\n--auth-root-authentication-method=normal is specified, then it will create the\ndefault user accounts using the default behavior of MariaDB 10.3 and before.\n\nThis means that the root@localhost user account will use mysql_native_password\nauthentication by default. There are some other differences as well. See\nmysql_install_db: User Accounts Created by Default for more information.\n\nFor example, the option can be set on the command-line while running\nmysql_install_db:\n\nmysql_install_db --user=mysql --datadir=/var/lib/mysql\n--auth-root-authentication-method=normal\n\nThe option can also be set in an option file in an option group supported by\nmysql_install_db. For example:\n\n[mysql_install_db]\nauth_root_authentication_method=normal\n\nIf the option is set in an option file and if mysql_install_db is executed,\nthen mysql_install_db will read this option from the option file, and it will\nautomatically set this option.\n\nAltering the User Account to Revert to the Previous Authentication Method\n-------------------------------------------------------------------------\n\nIf you have already installed MariaDB, and if the root@localhost user account\nis already using unix_socket authentication, then you can revert to the old\nmysql_native_password authentication method for the user account by executing\nthe following:\n\nALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING\nPASSWORD(\"verysecret\")\n\nURL: https://mariadb.com/kb/en/authentication-from-mariadb-104/','','https://mariadb.com/kb/en/authentication-from-mariadb-104/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (118,10,'User Password Expiry','MariaDB starting with 10.4.3\n----------------------------\nUser password expiry was introduced in MariaDB 10.4.3.\n\nPassword expiry permits administrators to expire user passwords, either\nmanually or automatically.\n\nSystem Variables\n----------------\n\nThere are two system variables which affect password expiry:\ndefault_password_lifetime, which determines the amount of time between\nrequiring the user to change their password. 0, the default, means automatic\npassword expiry is not active.\n\nThe second variable, disconnect_on_expired_password determines whether a\nclient is permitted to connect if their password has expired, or whether they\nare permitted to connect in sandbox mode, able to perform a limited subset of\nqueries related to resetting the password, in particular SET PASSWORD and SET.\n\nSetting a Password Expiry Limit for a User\n------------------------------------------\n\nBesides automatic password expiry, as determined by default_password_lifetime,\npassword expiry times can be set on an individual user basis, overriding the\nglobal using the CREATE USER or ALTER USER statements, for example:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\n\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\n\nLimits can be disabled by use of the NEVER keyword, for example:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE NEVER;\n\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE NEVER;\n\nA manually set limit can be restored the system default by use of DEFAULT, for\nexample:\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE DEFAULT;\n\nALTER USER \'monty\'@\'localhost\' PASSWORD EXPIRE DEFAULT;\n\nSHOW CREATE USER\n----------------\n\nThe SHOW CREATE USER statement will display information about the password\nexpiry status of the user. Unlike MySQL, it will not display if the user is\nunlocked, or if the password expiry is set to default.\n\nCREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY;\nCREATE USER \'konstantin\'@\'localhost\' PASSWORD EXPIRE NEVER;\nCREATE USER \'amse\'@\'localhost\' PASSWORD EXPIRE DEFAULT;\n\nSHOW CREATE USER \'monty\'@\'localhost\';\n+------------------------------------------------------------------+\n| CREATE USER for monty@localhost |\n+------------------------------------------------------------------+\n| CREATE USER \'monty\'@\'localhost\' PASSWORD EXPIRE INTERVAL 120 DAY |\n+------------------------------------------------------------------+\n\nSHOW CREATE USER \'konstantin\'@\'localhost\';\n+------------------------------------------------------------+\n| CREATE USER for konstantin@localhost |\n+------------------------------------------------------------+\n| CREATE USER \'konstantin\'@\'localhost\' PASSWORD EXPIRE NEVER |\n+------------------------------------------------------------+\n\nSHOW CREATE USER \'amse\'@\'localhost\';\n+--------------------------------+\n| CREATE USER for amse@localhost |\n+--------------------------------+\n| CREATE USER \'amse\'@\'localhost\' |\n+--------------------------------+\n\nChecking When Passwords Expire\n------------------------------\n\nThe following query can be used to check when the current passwords expire for\nall users:\n\nWITH password_expiration_info AS (\n SELECT User, Host,\n IF(\n IFNULL(JSON_EXTRACT(Priv, \'$.password_lifetime\'), -1) = -1,\n @@global.default_password_lifetime,\n JSON_EXTRACT(Priv, \'$.password_lifetime\')\n ) AS password_lifetime,\n JSON_EXTRACT(Priv, \'$.password_last_changed\') AS password_last_changed\n FROM mysql.global_priv\n)\nSELECT pei.User, pei.Host,\n pei.password_lifetime,\n FROM_UNIXTIME(pei.password_last_changed) AS password_last_changed_datetime,\n FROM_UNIXTIME(\n pei.password_last_changed +\n (pei.password_lifetime * 60 * 60 * 24)\n ) AS password_expiration_datetime\n FROM password_expiration_info pei\n WHERE pei.password_lifetime != 0\n AND pei.password_last_changed IS NOT NULL\nUNION\nSELECT pei.User, pei.Host,\n pei.password_lifetime,\n FROM_UNIXTIME(pei.password_last_changed) AS password_last_changed_datetime,\n 0 AS password_expiration_datetime\n FROM password_expiration_info pei\n WHERE pei.password_lifetime = 0\n OR pei.password_last_changed IS NULL;\n\n--connect-expired-password Client Option\n----------------------------------------\n\nThe mysql client --connect-expired-password option notifies the server that\nthe client is prepared to handle expired password sandbox mode (even if the\n--batch option was specified).\n\nURL: https://mariadb.com/kb/en/user-password-expiry/','','https://mariadb.com/kb/en/user-password-expiry/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (119,11,'ST_X','Syntax\n------\n\nST_X(p)\nX(p)\n\nDescription\n-----------\n\nReturns the X-coordinate value for the point p as a double-precision number.\n\nST_X() and X() are synonyms.\n\nExamples\n--------\n\nSET @pt = \'Point(56.7 53.34)\';\n\nSELECT X(GeomFromText(@pt));\n+----------------------+\n| X(GeomFromText(@pt)) |\n+----------------------+\n| 56.7 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st_x/','','https://mariadb.com/kb/en/st_x/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (120,11,'ST_Y','Syntax\n------\n\nST_Y(p)\nY(p)\n\nDescription\n-----------\n\nReturns the Y-coordinate value for the point p as a double-precision number.\n\nST_Y() and Y() are synonyms.\n\nExamples\n--------\n\nSET @pt = \'Point(56.7 53.34)\';\n\nSELECT Y(GeomFromText(@pt));\n+----------------------+\n| Y(GeomFromText(@pt)) |\n+----------------------+\n| 53.34 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/st_y/','','https://mariadb.com/kb/en/st_y/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (121,11,'X','A synonym for ST_X.\n\nURL: https://mariadb.com/kb/en/point-properties-x/','','https://mariadb.com/kb/en/point-properties-x/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (122,11,'Y','A synonym for ST_Y.\n\nURL: https://mariadb.com/kb/en/point-properties-y/','','https://mariadb.com/kb/en/point-properties-y/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (123,12,'UNCOMPRESS','Syntax\n------\n\nUNCOMPRESS(string_to_uncompress)\n\nDescription\n-----------\n\nUncompresses a string compressed by the COMPRESS() function. If the argument\nis not a compressed value, the result is NULL. This function requires MariaDB\nto have been compiled with a compression library such as zlib. Otherwise, the\nreturn value is always NULL. The have_compress server system variable\nindicates whether a compression library is present.\n\nExamples\n--------\n\nSELECT UNCOMPRESS(COMPRESS(\'a string\'));\n+----------------------------------+\n| UNCOMPRESS(COMPRESS(\'a string\')) |\n+----------------------------------+\n| a string |\n+----------------------------------+\n\nSELECT UNCOMPRESS(\'a string\');\n+------------------------+\n| UNCOMPRESS(\'a string\') |\n+------------------------+\n| NULL |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/uncompress/','','https://mariadb.com/kb/en/uncompress/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (124,12,'DECODE','Syntax\n------\n\nDECODE(crypt_str,pass_str)\n\nIn Oracle mode from MariaDB 10.3.2:\n\nDECODE(expr, search_expr, result_expr [, search_expr2, result_expr2 ...]\n[default_expr])\n\nIn all modes from MariaDB 10.3.2:\n\nDECODE_ORACLE(expr, search_expr, result_expr [, search_expr2, result_expr2\n...] [default_expr])\n\nDescription\n-----------\n\nIn the default mode, DECODE decrypts the encrypted string crypt_str using\npass_str as the password. crypt_str should be a string returned from ENCODE().\nThe resulting string will be the original string only if pass_str is the same.\n\nIn Oracle mode from MariaDB 10.3.2, DECODE compares expr to the search\nexpressions, in order. If it finds a match, the corresponding result\nexpression is returned. If no matches are found, the default expression is\nreturned, or NULL if no default is provided.\n\nNULLs are treated as equivalent.\n\nDECODE_ORACLE is a synonym for the Oracle-mode version of the function, and is\navailable in all modes.\n\nExamples\n--------\n\nFrom MariaDB 10.3.2:\n\nSELECT DECODE_ORACLE(2+1,3*1,\'found1\',3*2,\'found2\',\'default\');\n+--------------------------------------------------------+\n| DECODE_ORACLE(2+1,3*1,\'found1\',3*2,\'found2\',\'default\') |\n+--------------------------------------------------------+\n| found1 |\n+--------------------------------------------------------+\n\nSELECT DECODE_ORACLE(2+4,3*1,\'found1\',3*2,\'found2\',\'default\');\n+--------------------------------------------------------+\n| DECODE_ORACLE(2+4,3*1,\'found1\',3*2,\'found2\',\'default\') |\n+--------------------------------------------------------+\n| found2 |\n+--------------------------------------------------------+\n\nSELECT DECODE_ORACLE(2+2,3*1,\'found1\',3*2,\'found2\',\'default\');\n+--------------------------------------------------------+\n| DECODE_ORACLE(2+2,3*1,\'found1\',3*2,\'found2\',\'default\') |\n+--------------------------------------------------------+\n| default |\n+--------------------------------------------------------+\n\nNulls are treated as equivalent:\n\nSELECT DECODE_ORACLE(NULL,NULL,\'Nulls are equivalent\',\'Nulls are not\nequivalent\');\n+----------------------------------------------------------------------------+\n| DECODE_ORACLE(NULL,NULL,\'Nulls are equivalent\',\'Nulls are not equivalent\') |\n+----------------------------------------------------------------------------+\n| Nulls are equivalent |\n+----------------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/decode/','','https://mariadb.com/kb/en/decode/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (125,12,'DECODE_ORACLE','MariaDB starting with 10.3.2\n----------------------------\nDECODE_ORACLE is a synonym for the Oracle mode version of the DECODE function,\nand is available in all modes.\n\nURL: https://mariadb.com/kb/en/decode_oracle/','','https://mariadb.com/kb/en/decode_oracle/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (126,12,'AES_DECRYPT','Syntax\n------\n\nAES_DECRYPT(crypt_str,key_str)\n\nDescription\n-----------\n\nThis function allows decryption of data using the official AES (Advanced\nEncryption Standard) algorithm. For more information, see the description of\nAES_ENCRYPT().\n\nURL: https://mariadb.com/kb/en/aes_decrypt/','','https://mariadb.com/kb/en/aes_decrypt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (127,12,'AES_ENCRYPT','Syntax\n------\n\nAES_ENCRYPT(str,key_str)\n\nDescription\n-----------\n\nAES_ENCRYPT() and AES_DECRYPT() allow encryption and decryption of data using\nthe official AES (Advanced Encryption Standard) algorithm, previously known as\n\"Rijndael.\" Encoding with a 128-bit key length is used, but you can extend it\nup to 256 bits by modifying the source. We chose 128 bits because it is much\nfaster and it is secure enough for most purposes.\n\nAES_ENCRYPT() encrypts a string str using the key key_str, and returns a\nbinary string.\n\nAES_DECRYPT() decrypts the encrypted string and returns the original string.\n\nThe input arguments may be any length. If either argument is NULL, the result\nof this function is also NULL.\n\nBecause AES is a block-level algorithm, padding is used to encode uneven\nlength strings and so the result string length may be calculated using this\nformula:\n\n16 x (trunc(string_length / 16) + 1)\n\nIf AES_DECRYPT() detects invalid data or incorrect padding, it returns NULL.\nHowever, it is possible for AES_DECRYPT() to return a non-NULL value (possibly\ngarbage) if the input data or the key is invalid.\n\nExamples\n--------\n\nINSERT INTO t VALUES (AES_ENCRYPT(\'text\',SHA2(\'password\',512)));\n\nURL: https://mariadb.com/kb/en/aes_encrypt/','','https://mariadb.com/kb/en/aes_encrypt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (128,12,'COMPRESS','Syntax\n------\n\nCOMPRESS(string_to_compress)\n\nDescription\n-----------\n\nCompresses a string and returns the result as a binary string. This function\nrequires MariaDB to have been compiled with a compression library such as\nzlib. Otherwise, the return value is always NULL. The compressed string can be\nuncompressed with UNCOMPRESS().\n\nThe have_compress server system variable indicates whether a compression\nlibrary is present.\n\nExamples\n--------\n\nSELECT LENGTH(COMPRESS(REPEAT(\'a\',1000)));\n+------------------------------------+\n| LENGTH(COMPRESS(REPEAT(\'a\',1000))) |\n+------------------------------------+\n| 21 |\n+------------------------------------+\n\nSELECT LENGTH(COMPRESS(\'\'));\n+----------------------+\n| LENGTH(COMPRESS(\'\')) |\n+----------------------+\n| 0 |\n+----------------------+\n\nSELECT LENGTH(COMPRESS(\'a\'));\n+-----------------------+\n| LENGTH(COMPRESS(\'a\')) |\n+-----------------------+\n| 13 |\n+-----------------------+\n\nSELECT LENGTH(COMPRESS(REPEAT(\'a\',16)));\n+----------------------------------+\n| LENGTH(COMPRESS(REPEAT(\'a\',16))) |\n+----------------------------------+\n| 15 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/compress/','','https://mariadb.com/kb/en/compress/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (129,12,'DES_DECRYPT','DES_DECRYPT has been deprecated from MariaDB 10.10.0, and will be removed in a\nfuture release.\n\nSyntax\n------\n\nDES_DECRYPT(crypt_str[,key_str])\n\nDescription\n-----------\n\nDecrypts a string encrypted with DES_ENCRYPT(). If an error occurs, this\nfunction returns NULL.\n\nThis function works only if MariaDB has been configured with TLS support.\n\nIf no key_str argument is given, DES_DECRYPT() examines the first byte of the\nencrypted string to determine the DES key number that was used to encrypt the\noriginal string, and then reads the key from the DES key file to decrypt the\nmessage. For this to work, the user must have the SUPER privilege. The key\nfile can be specified with the --des-key-file server option.\n\nIf you pass this function a key_str argument, that string is used as the key\nfor decrypting the message.\n\nIf the crypt_str argument does not appear to be an encrypted string, MariaDB\nreturns the given crypt_str.\n\nURL: https://mariadb.com/kb/en/des_decrypt/','','https://mariadb.com/kb/en/des_decrypt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (130,12,'DES_ENCRYPT','DES_ENCRYPT has been deprecated from MariaDB 10.10.0, and will be removed in a\nfuture release.\n\nSyntax\n------\n\nDES_ENCRYPT(str[,{key_num|key_str}])\n\nDescription\n-----------\n\nEncrypts the string with the given key using the Triple-DES algorithm.\n\nThis function works only if MariaDB has been configured with TLS support.\n\nThe encryption key to use is chosen based on the second argument to\nDES_ENCRYPT(), if one was given. With no argument, the first key from the DES\nkey file is used. With a key_num argument, the given key number (0-9) from the\nDES key file is used. With a key_str argument, the given key string is used to\nencrypt str.\n\nThe key file can be specified with the --des-key-file server option.\n\nThe return string is a binary string where the first character is CHAR(128 |\nkey_num). If an error occurs, DES_ENCRYPT() returns NULL.\n\nThe 128 is added to make it easier to recognize an encrypted key. If you use a\nstring key, key_num is 127.\n\nThe string length for the result is given by this formula:\n\nnew_len = orig_len + (8 - (orig_len % 8)) + 1\n\nEach line in the DES key file has the following format:\n\nkey_num des_key_str\n\nEach key_num value must be a number in the range from 0 to 9. Lines in the\nfile may be in any order. des_key_str is the string that is used to encrypt\nthe message. There should be at least one space between the number and the\nkey. The first key is the default key that is used if you do not specify any\nkey argument to DES_ENCRYPT().\n\nYou can tell MariaDB to read new key values from the key file with the FLUSH\nDES_KEY_FILE statement. This requires the RELOAD privilege.\n\nOne benefit of having a set of default keys is that it gives applications a\nway to check for the existence of encrypted column values, without giving the\nend user the right to decrypt those values.\n\nExamples\n--------\n\nSELECT customer_address FROM customer_table \n WHERE crypted_credit_card = DES_ENCRYPT(\'credit_card_number\');\n\nURL: https://mariadb.com/kb/en/des_encrypt/','','https://mariadb.com/kb/en/des_encrypt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (131,12,'ENCODE','Syntax\n------\n\nENCODE(str,pass_str)\n\nDescription\n-----------\n\nENCODE is not considered cryptographically secure, and should not be used for\npassword encryption.\n\nEncrypt str using pass_str as the password. To decrypt the result, use\nDECODE().\n\nThe result is a binary string of the same length as str.\n\nThe strength of the encryption is based on how good the random generator is.\n\nIt is not recommended to rely on the encryption performed by the ENCODE\nfunction. Using a salt value (changed when a password is updated) will improve\nmatters somewhat, but for storing passwords, consider a more cryptographically\nsecure function, such as SHA2().\n\nExamples\n--------\n\nENCODE(\'not so secret text\', CONCAT(\'random_salt\',\'password\'))\n\nURL: https://mariadb.com/kb/en/encode/','','https://mariadb.com/kb/en/encode/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (132,12,'ENCRYPT','Syntax\n------\n\nENCRYPT(str[,salt])\n\nDescription\n-----------\n\nEncrypts a string using the Unix crypt() system call, returning an encrypted\nbinary string. The salt argument should be a string with at least two\ncharacters or the returned result will be NULL. If no salt argument is given,\na random value of sufficient length is used.\n\nIt is not recommended to use ENCRYPT() with utf16, utf32 or ucs2 multi-byte\ncharacter sets because the crypt() system call expects a string terminated\nwith a zero byte.\n\nNote that the underlying crypt() system call may have some limitations, such\nas ignoring all but the first eight characters.\n\nIf the have_crypt system variable is set to NO (because the crypt() system\ncall is not available), the ENCRYPT function will always return NULL.\n\nExamples\n--------\n\nSELECT ENCRYPT(\'encrypt me\');\n+-----------------------+\n| ENCRYPT(\'encrypt me\') |\n+-----------------------+\n| 4I5BsEx0lqTDk |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/encrypt/','','https://mariadb.com/kb/en/encrypt/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (133,12,'MD5','Syntax\n------\n\nMD5(str)\n\nDescription\n-----------\n\nCalculates an MD5 128-bit checksum for the string.\n\nThe return value is a 32-hex digit string, and as of MariaDB 5.5, is a\nnonbinary string in the connection character set and collation, determined by\nthe values of the character_set_connection and collation_connection system\nvariables. Before 5.5, the return value was a binary string.\n\nNULL is returned if the argument was NULL.\n\nExamples\n--------\n\nSELECT MD5(\'testing\');\n+----------------------------------+\n| MD5(\'testing\') |\n+----------------------------------+\n| ae2b1fca515949e5d54fb22b8ed95575 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/md5/','','https://mariadb.com/kb/en/md5/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (134,12,'OLD_PASSWORD','Syntax\n------\n\nOLD_PASSWORD(str)\n\nDescription\n-----------\n\nOLD_PASSWORD() was added to MySQL when the implementation of PASSWORD() was\nchanged to improve security. OLD_PASSWORD() returns the value of the old\n(pre-MySQL 4.1) implementation of PASSWORD() as a string, and is intended to\npermit you to reset passwords for any pre-4.1 clients that need to connect to\na more recent MySQL server version, or any version of MariaDB, without locking\nthem out.\n\nAs of MariaDB 5.5, the return value is a nonbinary string in the connection\ncharacter set and collation, determined by the values of the\ncharacter_set_connection and collation_connection system variables. Before\n5.5, the return value was a binary string.\n\nThe return value is 16 bytes in length, or NULL if the argument was NULL.\n\nURL: https://mariadb.com/kb/en/old_password/','','https://mariadb.com/kb/en/old_password/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (135,12,'PASSWORD','Syntax\n------\n\nPASSWORD(str)\n\nDescription\n-----------\n\nThe PASSWORD() function is used for hashing passwords for use in\nauthentication by the MariaDB server. It is not intended for use in other\napplications.\n\nCalculates and returns a hashed password string from the plaintext password\nstr. Returns an empty string (>= MariaDB 10.0.4) if the argument was NULL.\n\nThe return value is a nonbinary string in the connection character set and\ncollation, determined by the values of the character_set_connection and\ncollation_connection system variables.\n\nThis is the function that is used for hashing MariaDB passwords for storage in\nthe Password column of the user table (see privileges), usually used with the\nSET PASSWORD statement. It is not intended for use in other applications.\n\nUntil MariaDB 10.3, the return value is 41-bytes in length, and the first\ncharacter is always \'*\'. From MariaDB 10.4, the function takes into account\nthe authentication plugin where applicable (A CREATE USER or SET PASSWORD\nstatement). For example, when used in conjunction with a user authenticated by\nthe ed25519 plugin, the statement will create a longer hash:\n\nCREATE USER edtest@localhost IDENTIFIED VIA ed25519 USING PASSWORD(\'secret\');\n\nCREATE USER edtest2@localhost IDENTIFIED BY \'secret\';\n\nSELECT CONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)) FROM\nmysql.global_priv\n WHERE user LIKE \'edtest%\'\\G\n*************************** 1. row ***************************\nCONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)): edtest@localhost => {\n...\n \"plugin\": \"ed25519\",\n \"authentication_string\": \"ZIgUREUg5PVgQ6LskhXmO+eZLS0nC8be6HPjYWR4YJY\",\n...\n}\n*************************** 2. row ***************************\nCONCAT(user, \'@\', host, \' => \', JSON_DETAILED(priv)): edtest2@localhost => {\n...\n \"plugin\": \"mysql_native_password\",\n \"authentication_string\": \"*14E65567ABDB5135D0CFD9A70B3032C179A49EE7\",\n...\n}\n\nThe behavior of this function is affected by the value of the old_passwords\nsystem variable. If this is set to 1 (0 is default), MariaDB reverts to using\nthe mysql_old_password authentication plugin by default for newly created\nusers and passwords.\n\nExamples\n--------\n\nSELECT PASSWORD(\'notagoodpwd\');\n+-------------------------------------------+\n| PASSWORD(\'notagoodpwd\') |\n+-------------------------------------------+\n| *3A70EE9FC6594F88CE9E959CD51C5A1C002DC937 |\n+-------------------------------------------+\n\nSET PASSWORD FOR \'bob\'@\'%.loc.gov\' = PASSWORD(\'newpass\');\n\nURL: https://mariadb.com/kb/en/password/','','https://mariadb.com/kb/en/password/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (136,12,'SHA1','Syntax\n------\n\nSHA1(str), SHA(str)\n\nDescription\n-----------\n\nCalculates an SHA-1 160-bit checksum for the string str, as described in RFC\n3174 (Secure Hash Algorithm).\n\nThe value is returned as a string of 40 hex digits, or NULL if the argument\nwas NULL. As of MariaDB 5.5, the return value is a nonbinary string in the\nconnection character set and collation, determined by the values of the\ncharacter_set_connection and collation_connection system variables. Before\n5.5, the return value was a binary string.\n\nExamples\n--------\n\nSELECT SHA1(\'some boring text\');\n+------------------------------------------+\n| SHA1(\'some boring text\') |\n+------------------------------------------+\n| af969fc2085b1bb6d31e517d5c456def5cdd7093 |\n+------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha1/','','https://mariadb.com/kb/en/sha1/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (137,12,'SHA2','Syntax\n------\n\nSHA2(str,hash_len)\n\nDescription\n-----------\n\nGiven a string str, calculates an SHA-2 checksum, which is considered more\ncryptographically secure than its SHA-1 equivalent. The SHA-2 family includes\nSHA-224, SHA-256, SHA-384, and SHA-512, and the hash_len must correspond to\none of these, i.e. 224, 256, 384 or 512. 0 is equivalent to 256.\n\nThe return value is a nonbinary string in the connection character set and\ncollation, determined by the values of the character_set_connection and\ncollation_connection system variables.\n\nNULL is returned if the hash length is not valid, or the string str is NULL.\n\nSHA2 will only work if MariaDB was has been configured with TLS support.\n\nExamples\n--------\n\nSELECT SHA2(\'Maria\',224);\n+----------------------------------------------------------+\n| SHA2(\'Maria\',224) |\n+----------------------------------------------------------+\n| 6cc67add32286412efcab9d0e1675a43a5c2ef3cec8879f81516ff83 |\n+----------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',256);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',256) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nSELECT SHA2(\'Maria\',0);\n+------------------------------------------------------------------+\n| SHA2(\'Maria\',0) |\n+------------------------------------------------------------------+\n| 9ff18ebe7449349f358e3af0b57cf7a032c1c6b2272cb2656ff85eb112232f16 |\n+------------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/sha2/','','https://mariadb.com/kb/en/sha2/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (138,13,'ENDPOINT','A synonym for ST_ENDPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-endpoint/','','https://mariadb.com/kb/en/linestring-properties-endpoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (139,13,'GLENGTH','Syntax\n------\n\nGLength(ls)\n\nDescription\n-----------\n\nReturns as a double-precision number the length of the LineString value ls in\nits associated spatial reference.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT GLength(GeomFromText(@ls));\n+----------------------------+\n| GLength(GeomFromText(@ls)) |\n+----------------------------+\n| 2.82842712474619 |\n+----------------------------+\n\nURL: https://mariadb.com/kb/en/glength/','','https://mariadb.com/kb/en/glength/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (140,13,'NumPoints','A synonym for ST_NumPoints.\n\nURL: https://mariadb.com/kb/en/linestring-properties-numpoints/','','https://mariadb.com/kb/en/linestring-properties-numpoints/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (141,13,'PointN','A synonym for ST_PointN.\n\nURL: https://mariadb.com/kb/en/linestring-properties-pointn/','','https://mariadb.com/kb/en/linestring-properties-pointn/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (142,13,'STARTPOINT','A synonym for ST_STARTPOINT.\n\nURL: https://mariadb.com/kb/en/linestring-properties-startpoint/','','https://mariadb.com/kb/en/linestring-properties-startpoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (143,13,'ST_ENDPOINT','Syntax\n------\n\nST_EndPoint(ls)\nEndPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the endpoint of the LineString value ls.\n\nST_EndPoint() and EndPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(EndPoint(GeomFromText(@ls)));\n+-------------------------------------+\n| AsText(EndPoint(GeomFromText(@ls))) |\n+-------------------------------------+\n| POINT(3 3) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_endpoint/','','https://mariadb.com/kb/en/st_endpoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (144,13,'ST_NUMPOINTS','Syntax\n------\n\nST_NumPoints(ls)\nNumPoints(ls)\n\nDescription\n-----------\n\nReturns the number of Point objects in the LineString value ls.\n\nST_NumPoints() and NumPoints() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT NumPoints(GeomFromText(@ls));\n+------------------------------+\n| NumPoints(GeomFromText(@ls)) |\n+------------------------------+\n| 3 |\n+------------------------------+\n\nURL: https://mariadb.com/kb/en/st_numpoints/','','https://mariadb.com/kb/en/st_numpoints/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (145,13,'ST_POINTN','Syntax\n------\n\nST_PointN(ls,N)\nPointN(ls,N)\n\nDescription\n-----------\n\nReturns the N-th Point in the LineString value ls. Points are numbered\nbeginning with 1.\n\nST_PointN() and PointN() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(PointN(GeomFromText(@ls),2));\n+-------------------------------------+\n| AsText(PointN(GeomFromText(@ls),2)) |\n+-------------------------------------+\n| POINT(2 2) |\n+-------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_pointn/','','https://mariadb.com/kb/en/st_pointn/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (146,13,'ST_STARTPOINT','Syntax\n------\n\nST_StartPoint(ls)\nStartPoint(ls)\n\nDescription\n-----------\n\nReturns the Point that is the start point of the LineString value ls.\n\nST_StartPoint() and StartPoint() are synonyms.\n\nExamples\n--------\n\nSET @ls = \'LineString(1 1,2 2,3 3)\';\n\nSELECT AsText(StartPoint(GeomFromText(@ls)));\n+---------------------------------------+\n| AsText(StartPoint(GeomFromText(@ls))) |\n+---------------------------------------+\n| POINT(1 1) |\n+---------------------------------------+\n\nURL: https://mariadb.com/kb/en/st_startpoint/','','https://mariadb.com/kb/en/st_startpoint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (147,14,'GET_LOCK','Syntax\n------\n\nGET_LOCK(str,timeout)\n\nDescription\n-----------\n\nTries to obtain a lock with a name given by the string str, using a timeout of\ntimeout seconds. Returns 1 if the lock was obtained successfully, 0 if the\nattempt timed out (for example, because another client has previously locked\nthe name), or NULL if an error occurred (such as running out of memory or the\nthread was killed with mysqladmin kill).\n\nA lock is released with RELEASE_LOCK(), when the connection terminates (either\nnormally or abnormally). A connection can hold multiple locks at the same\ntime, so a lock that is no longer needed needs to be explicitly released.\n\nThe IS_FREE_LOCK function returns whether a specified lock a free or not, and\nthe IS_USED_LOCK whether the function is in use or not.\n\nLocks obtained with GET_LOCK() do not interact with transactions. That is,\ncommitting a transaction does not release any such locks obtained during the\ntransaction.\n\nIt is also possible to recursively set the same lock. If a lock with the same\nname is set n times, it needs to be released n times as well.\n\nstr is case insensitive for GET_LOCK() and related functions. If str is an\nempty string or NULL, GET_LOCK() returns NULL and does nothing. From MariaDB\n10.2.2, timeout supports microseconds. Before then, it was rounded to the\nclosest integer.\n\nIf the metadata_lock_info plugin is installed, locks acquired with this\nfunction are visible in the Information Schema METADATA_LOCK_INFO table.\n\nThis function can be used to implement application locks or to simulate record\nlocks. Names are locked on a server-wide basis. If a name has been locked by\none client, GET_LOCK() blocks any request by another client for a lock with\nthe same name. This allows clients that agree on a given lock name to use the\nname to perform cooperative advisory locking. But be aware that it also allows\na client that is not among the set of cooperating clients to lock a name,\neither inadvertently or deliberately, and thus prevent any of the cooperating\nclients from locking that name. One way to reduce the likelihood of this is to\nuse lock names that are database-specific or application-specific. For\nexample, use lock names of the form db_name.str or app_name.str.\n\nStatements using the GET_LOCK function are not safe for statement-based\nreplication.\n\nThe patch to permit multiple locks was contributed by Konstantin \"Kostja\"\nOsipov (MDEV-3917).\n\nExamples\n--------\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_USED_LOCK(\'lock1\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_USED_LOCK(\'lock1\') |\n+-----------------------+-----------------------+\n| 0 | 46 |\n+-----------------------+-----------------------+\n\nSELECT IS_FREE_LOCK(\'lock2\'), IS_USED_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock2\') | IS_USED_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | NULL |\n+-----------------------+-----------------------+\n\nMultiple locks can be held:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT IS_FREE_LOCK(\'lock1\'), IS_FREE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| IS_FREE_LOCK(\'lock1\') | IS_FREE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 0 | 0 |\n+-----------------------+-----------------------+\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\');\n+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') |\n+-----------------------+-----------------------+\n| 1 | 1 |\n+-----------------------+-----------------------+\n\nIt is possible to hold the same lock recursively. This example is viewed using\nthe metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nTimeout example: Connection 1:\n\nSELECT GET_LOCK(\'lock4\',10);\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock4\',10);\n\nAfter 10 seconds...\n\n+----------------------+\n| GET_LOCK(\'lock4\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nDeadlocks are automatically detected and resolved. Connection 1:\n\nSELECT GET_LOCK(\'lock5\',10); \n+----------------------+\n| GET_LOCK(\'lock5\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock6\',10);\n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT GET_LOCK(\'lock6\',10); \n+----------------------+\n| GET_LOCK(\'lock6\',10) |\n+----------------------+\n| 0 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock5\',10);\nERROR 1213 (40001): Deadlock found when trying to get lock; try restarting\ntransaction\n\nURL: https://mariadb.com/kb/en/get_lock/','','https://mariadb.com/kb/en/get_lock/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (148,14,'INET6_ATON','Syntax\n------\n\nINET6_ATON(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a string, returns a binary string\nthat represents the numeric value of the address.\n\nNo trailing zone ID\'s or traling network masks are permitted. For IPv4\naddresses, or IPv6 addresses with IPv4 address parts, no classful addresses or\ntrailing port numbers are permitted and octal numbers are not supported.\n\nThe returned binary string will be VARBINARY(16) or VARBINARY(4) for IPv6 and\nIPv4 addresses respectively.\n\nReturns NULL if the argument is not understood.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, INET6_ATON can take INET6 as an argument.\n\nExamples\n--------\n\nSELECT HEX(INET6_ATON(\'10.0.1.1\'));\n+-----------------------------+\n| HEX(INET6_ATON(\'10.0.1.1\')) |\n+-----------------------------+\n| 0A000101 |\n+-----------------------------+\n\nSELECT HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\'));\n+----------------------------------------------+\n| HEX(INET6_ATON(\'48f3::d432:1431:ba23:846f\')) |\n+----------------------------------------------+\n| 48F3000000000000D4321431BA23846F |\n+----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_aton/','','https://mariadb.com/kb/en/inet6_aton/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (149,14,'INET6_NTOA','Syntax\n------\n\nINET6_NTOA(expr)\n\nDescription\n-----------\n\nGiven an IPv6 or IPv4 network address as a numeric binary string, returns the\naddress as a nonbinary string in the connection character set.\n\nThe return string is lowercase, and is platform independent, since it does not\nuse functions specific to the operating system. It has a maximum length of 39\ncharacters.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET6_NTOA(UNHEX(\'0A000101\'));\n+-------------------------------+\n| INET6_NTOA(UNHEX(\'0A000101\')) |\n+-------------------------------+\n| 10.0.1.1 |\n+-------------------------------+\n\nSELECT INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\'));\n+-------------------------------------------------------+\n| INET6_NTOA(UNHEX(\'48F3000000000000D4321431BA23846F\')) |\n+-------------------------------------------------------+\n| 48f3::d432:1431:ba23:846f |\n+-------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/inet6_ntoa/','','https://mariadb.com/kb/en/inet6_ntoa/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (150,14,'INET_ATON','Syntax\n------\n\nINET_ATON(expr)\n\nDescription\n-----------\n\nGiven the dotted-quad representation of an IPv4 network address as a string,\nreturns an integer that represents the numeric value of the address. Addresses\nmay be 4- or 8-byte addresses.\n\nReturns NULL if the argument is not understood.\n\nExamples\n--------\n\nSELECT INET_ATON(\'192.168.1.1\');\n+--------------------------+\n| INET_ATON(\'192.168.1.1\') |\n+--------------------------+\n| 3232235777 |\n+--------------------------+\n\nThis is calculated as follows: 192 x 2563 + 168 x 256 2 + 1 x 256 + 1\n\nURL: https://mariadb.com/kb/en/inet_aton/','','https://mariadb.com/kb/en/inet_aton/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (151,14,'INET_NTOA','Syntax\n------\n\nINET_NTOA(expr)\n\nDescription\n-----------\n\nGiven a numeric IPv4 network address in network byte order (4 or 8 byte),\nreturns the dotted-quad representation of the address as a string.\n\nExamples\n--------\n\nSELECT INET_NTOA(3232235777);\n+-----------------------+\n| INET_NTOA(3232235777) |\n+-----------------------+\n| 192.168.1.1 |\n+-----------------------+\n\n192.168.1.1 corresponds to 3232235777 since 192 x 2563 + 168 x 256 2 + 1 x 256\n+ 1 = 3232235777\n\nURL: https://mariadb.com/kb/en/inet_ntoa/','','https://mariadb.com/kb/en/inet_ntoa/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (152,14,'IS_FREE_LOCK','Syntax\n------\n\nIS_FREE_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is free to use (that is, not locked).\nReturns 1 if the lock is free (no one is using the lock), 0 if the lock is in\nuse, and NULL if an error occurs (such as an incorrect argument, like an empty\nstring or NULL). str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_FREE_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_free_lock/','','https://mariadb.com/kb/en/is_free_lock/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (153,14,'IS_IPV4','Syntax\n------\n\nIS_IPV4(expr)\n\nDescription\n-----------\n\nIf the expression is a valid IPv4 address, returns 1, otherwise returns 0.\n\nIS_IPV4() is stricter than INET_ATON(), but as strict as INET6_ATON(), in\ndetermining the validity of an IPv4 address. This implies that if IS_IPV4\nreturns 1, the same expression will always return a non-NULL result when\npassed to INET_ATON(), but that the reverse may not apply.\n\nExamples\n--------\n\nSELECT IS_IPV4(\'1110.0.1.1\');\n+-----------------------+\n| IS_IPV4(\'1110.0.1.1\') |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT IS_IPV4(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV4(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4/','','https://mariadb.com/kb/en/is_ipv4/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (154,14,'IS_IPV4_COMPAT','Syntax\n------\n\nIS_IPV4_COMPAT(expr)\n\nDescription\n-----------\n\nReturns 1 if a given numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is IPv4-compatible, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_COMPAT now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 1 |\n+------------------------------------------+\n\nSELECT IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\'));\n+-----------------------------------------------------------+\n| IS_IPV4_COMPAT(INET6_ATON(\'::48f3::d432:1431:ba23:846f\')) |\n+-----------------------------------------------------------+\n| 0 |\n+-----------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_compat/','','https://mariadb.com/kb/en/is_ipv4_compat/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (155,14,'IS_IPV4_MAPPED','Syntax\n------\n\nIS_IPV4_MAPPED(expr)\n\nDescription\n-----------\n\nReturns 1 if a given a numeric binary string IPv6 address, such as returned by\nINET6_ATON(), is a valid IPv4-mapped address, otherwise returns 0.\n\nMariaDB starting with 10.5.0\n----------------------------\nFrom MariaDB 10.5.0, when the argument is not INET6, automatic implicit CAST\nto INET6 is applied. As a consequence, IS_IPV4_MAPPED now understands\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, the function understood only binary(16) representation.\n\nExamples\n--------\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\'));\n+------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::10.0.1.1\')) |\n+------------------------------------------+\n| 0 |\n+------------------------------------------+\n\nSELECT IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\'));\n+-----------------------------------------------+\n| IS_IPV4_MAPPED(INET6_ATON(\'::ffff:10.0.1.1\')) |\n+-----------------------------------------------+\n| 1 |\n+-----------------------------------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv4_mapped/','','https://mariadb.com/kb/en/is_ipv4_mapped/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (156,14,'IS_IPV6','Syntax\n------\n\nIS_IPV6(expr)\n\nDescription\n-----------\n\nReturns 1 if the expression is a valid IPv6 address specified as a string,\notherwise returns 0. Does not consider IPv4 addresses to be valid IPv6\naddresses.\n\nExamples\n--------\n\nSELECT IS_IPV6(\'48f3::d432:1431:ba23:846f\');\n+--------------------------------------+\n| IS_IPV6(\'48f3::d432:1431:ba23:846f\') |\n+--------------------------------------+\n| 1 |\n+--------------------------------------+\n1 row in set (0.02 sec)\n\nSELECT IS_IPV6(\'10.0.1.1\');\n+---------------------+\n| IS_IPV6(\'10.0.1.1\') |\n+---------------------+\n| 0 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/is_ipv6/','','https://mariadb.com/kb/en/is_ipv6/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (157,14,'IS_USED_LOCK','Syntax\n------\n\nIS_USED_LOCK(str)\n\nDescription\n-----------\n\nChecks whether the lock named str is in use (that is, locked). If so, it\nreturns the connection identifier of the client that holds the lock.\nOtherwise, it returns NULL. str is case insensitive.\n\nIf the metadata_lock_info plugin is installed, the Information Schema\nmetadata_lock_info table contains information about locks of this kind (as\nwell as metadata locks).\n\nStatements using the IS_USED_LOCK function are not safe for statement-based\nreplication.\n\nURL: https://mariadb.com/kb/en/is_used_lock/','','https://mariadb.com/kb/en/is_used_lock/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (158,14,'MASTER_GTID_WAIT','Syntax\n------\n\nMASTER_GTID_WAIT(gtid-list[, timeout)\n\nDescription\n-----------\n\nThis function takes a string containing a comma-separated list of global\ntransaction id\'s (similar to the value of, for example, gtid_binlog_pos). It\nwaits until the value of gtid_slave_pos has the same or higher seq_no within\nall replication domains specified in the gtid-list; in other words, it waits\nuntil the slave has reached the specified GTID position.\n\nAn optional second argument gives a timeout in seconds. If the timeout expires\nbefore the specified GTID position is reached, then the function returns -1.\nPassing NULL or a negative number for the timeout means no timeout, and the\nfunction will wait indefinitely.\n\nIf the wait completes without a timeout, 0 is returned. Passing NULL for the\ngtid-list makes the function return NULL immediately, without waiting.\n\nThe gtid-list may be the empty string, in which case MASTER_GTID_WAIT()\nreturns immediately. If the gtid-list contains fewer domains than\ngtid_slave_pos, then only those domains are waited upon. If gtid-list contains\na domain that is not present in @@gtid_slave_pos, then MASTER_GTID_WAIT() will\nwait until an event containing such domain_id arrives on the slave (or until\ntimed out or killed).\n\nMASTER_GTID_WAIT() can be useful to ensure that a slave has caught up to a\nmaster. Simply take the value of gtid_binlog_pos on the master, and use it in\na MASTER_GTID_WAIT() call on the slave; when the call completes, the slave\nwill have caught up with that master position.\n\nMASTER_GTID_WAIT() can also be used in client applications together with the\nlast_gtid session variable. This is useful in a read-scaleout replication\nsetup, where the application writes to a single master but divides the reads\nout to a number of slaves to distribute the load. In such a setup, there is a\nrisk that an application could first do an update on the master, and then a\nbit later do a read on a slave, and if the slave is not fast enough, the data\nread from the slave might not include the update just made, possibly confusing\nthe application and/or the end-user. One way to avoid this is to request the\nvalue of last_gtid on the master just after the update. Then before doing the\nread on the slave, do a MASTER_GTID_WAIT() on the value obtained from the\nmaster; this will ensure that the read is not performed until the slave has\nreplicated sufficiently far for the update to have become visible.\n\nNote that MASTER_GTID_WAIT() can be used even if the slave is configured not\nto use GTID for connections (CHANGE MASTER TO master_use_gtid=no). This is\nbecause from MariaDB 10, GTIDs are always logged on the master server, and\nalways recorded on the slave servers.\n\nDifferences to MASTER_POS_WAIT()\n--------------------------------\n\n* MASTER_GTID_WAIT() is global; it waits for any master connection to reach\n the specified GTID position. MASTER_POS_WAIT() works only against a\n specific connection. This also means that while MASTER_POS_WAIT() aborts if\n its master connection is terminated with STOP SLAVE or due to an error,\n MASTER_GTID_WAIT() continues to wait while slaves are stopped.\n\n* MASTER_GTID_WAIT() can take its timeout as a floating-point value, so a\n timeout in fractional seconds is supported, eg. MASTER_GTID_WAIT(\"0-1-100\",\n 0.5). (The minimum wait is one microsecond, 0.000001 seconds).\n\n* MASTER_GTID_WAIT() allows one to specify a timeout of zero in order to do a\n non-blocking check to see if the slaves have progressed to a specific GTID\nposition\n (MASTER_POS_WAIT() takes a zero timeout as meaning an infinite wait). To do\n an infinite MASTER_GTID_WAIT(), specify a negative timeout, or omit the\n timeout argument.\n\n* MASTER_GTID_WAIT() does not return the number of events executed since the\n wait started, nor does it return NULL if a slave thread is stopped. It\n always returns either 0 for successful wait completed, or -1 for timeout\n reached (or NULL if the specified gtid-pos is NULL).\n\nSince MASTER_GTID_WAIT() looks only at the seq_no part of the GTIDs, not the\nserver_id, care is needed if a slave becomes diverged from another server so\nthat two different GTIDs with the same seq_no (in the same domain) arrive at\nthe same server. This situation is in any case best avoided; setting\ngtid_strict_mode is recommended, as this will prevent any such out-of-order\nsequence numbers from ever being replicated on a slave.\n\nURL: https://mariadb.com/kb/en/master_gtid_wait/','','https://mariadb.com/kb/en/master_gtid_wait/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (159,14,'MASTER_POS_WAIT','Syntax\n------\n\nMASTER_POS_WAIT(log_name,log_pos[,timeout,[\"connection_name\"]])\n\nDescription\n-----------\n\nThis function is useful in replication for controlling primary/replica\nsynchronization. It blocks until the replica has read and applied all updates\nup to the specified position (log_name,log_pos) in the primary log. The return\nvalue is the number of log events the replica had to wait for to advance to\nthe specified position. The function returns NULL if the replica SQL thread is\nnot started, the replica\'s primary information is not initialized, the\narguments are incorrect, or an error occurs. It returns -1 if the timeout has\nbeen exceeded. If the replica SQL thread stops while MASTER_POS_WAIT() is\nwaiting, the function returns NULL. If the replica is past the specified\nposition, the function returns immediately.\n\nIf a timeout value is specified, MASTER_POS_WAIT() stops waiting when timeout\nseconds have elapsed. timeout must be greater than 0; a zero or negative\ntimeout means no timeout.\n\nThe connection_name is used when you are using multi-source-replication. If\nyou don\'t specify it, it\'s set to the value of the default_master_connection\nsystem variable.\n\nStatements using the MASTER_POS_WAIT() function are not safe for replication.\n\nURL: https://mariadb.com/kb/en/master_pos_wait/','','https://mariadb.com/kb/en/master_pos_wait/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (160,14,'NAME_CONST','Syntax\n------\n\nNAME_CONST(name,value)\n\nDescription\n-----------\n\nReturns the given value. When used to produce a result set column,\nNAME_CONST() causes the column to have the given name. The arguments should be\nconstants.\n\nThis function is used internally when replicating stored procedures. It makes\nlittle sense to use it explicitly in SQL statements, and it was not supposed\nto be used like that.\n\nSELECT NAME_CONST(\'myname\', 14);\n+--------+\n| myname |\n+--------+\n| 14 |\n+--------+\n\nURL: https://mariadb.com/kb/en/name_const/','','https://mariadb.com/kb/en/name_const/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (161,14,'RELEASE_ALL_LOCKS','MariaDB until 10.5.2\n--------------------\nRELEASE_ALL_LOCKS was added in MariaDB 10.5.2.\n\nSyntax\n------\n\nRELEASE_ALL_LOCKS()\n\nDescription\n-----------\n\nReleases all named locks held by the current session. Returns the number of\nlocks released, or 0 if none were held.\n\nStatements using the RELEASE_ALL_LOCKS function are not safe for\nstatement-based replication.\n\nExamples\n--------\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 0 |\n+---------------------+\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT RELEASE_ALL_LOCKS();\n+---------------------+\n| RELEASE_ALL_LOCKS() | \n+---------------------+\n| 1 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/release_all_locks/','','https://mariadb.com/kb/en/release_all_locks/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (162,14,'RELEASE_LOCK','Syntax\n------\n\nRELEASE_LOCK(str)\n\nDescription\n-----------\n\nReleases the lock named by the string str that was obtained with GET_LOCK().\nReturns 1 if the lock was released, 0 if the lock was not established by this\nthread (in which case the lock is not released), and NULL if the named lock\ndid not exist. The lock does not exist if it was never obtained by a call to\nGET_LOCK() or if it has previously been released.\n\nstr is case insensitive. If str is an empty string or NULL, RELEASE_LOCK()\nreturns NULL and does nothing.\n\nStatements using the RELEASE_LOCK() function are not safe for replication.\n\nThe DO statement is convenient to use with RELEASE_LOCK().\n\nExamples\n--------\n\nConnection1:\n\nSELECT GET_LOCK(\'lock1\',10);\n+----------------------+\n| GET_LOCK(\'lock1\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 2:\n\nSELECT GET_LOCK(\'lock2\',10);\n+----------------------+\n| GET_LOCK(\'lock2\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nConnection 1:\n\nSELECT RELEASE_LOCK(\'lock1\'), RELEASE_LOCK(\'lock2\'), RELEASE_LOCK(\'lock3\');\n+-----------------------+-----------------------+-----------------------+\n| RELEASE_LOCK(\'lock1\') | RELEASE_LOCK(\'lock2\') | RELEASE_LOCK(\'lock3\') |\n+-----------------------+-----------------------+-----------------------+\n| 1 | 0 | NULL |\n+-----------------------+-----------------------+-----------------------+\n\nFrom MariaDB 10.0.2, it is possible to hold the same lock recursively. This\nexample is viewed using the metadata_lock_info plugin:\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT GET_LOCK(\'lock3\',10);\n+----------------------+\n| GET_LOCK(\'lock3\',10) |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| THREAD_ID | LOCK_MODE | LOCK_DURATION | LOCK_TYPE | TABLE_SCHEMA |\nTABLE_NAME |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n| 46 | MDL_SHARED_NO_WRITE | NULL | User lock | lock3 |\n |\n+-----------+---------------------+---------------+-----------+--------------+-\n----------+\n\nSELECT RELEASE_LOCK(\'lock3\');\n+-----------------------+\n| RELEASE_LOCK(\'lock3\') |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT * FROM INFORMATION_SCHEMA.METADATA_LOCK_INFO;\nEmpty set (0.000 sec)\n\nURL: https://mariadb.com/kb/en/release_lock/','','https://mariadb.com/kb/en/release_lock/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (163,14,'SLEEP','Syntax\n------\n\nSLEEP(duration)\n\nDescription\n-----------\n\nSleeps (pauses) for the number of seconds given by the duration argument, then\nreturns 0. If SLEEP() is interrupted, it returns 1. The duration may have a\nfractional part given in microseconds.\n\nStatements using the SLEEP() function are not safe for replication.\n\nExample\n-------\n\nSELECT SLEEP(5.5);\n+------------+\n| SLEEP(5.5) |\n+------------+\n| 0 |\n+------------+\n1 row in set (5.50 sec)\n\nURL: https://mariadb.com/kb/en/sleep/','','https://mariadb.com/kb/en/sleep/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (164,14,'SYS_GUID','MariaDB starting with 10.6.1\n----------------------------\nThe SYS_GUID function was introduced in MariaDB 10.6.1 to enhance Oracle\ncompatibility. Similar functionality can be achieved with the UUID function.\n\nSyntax\n------\n\nSYS_GUID()\n\nDescription\n-----------\n\nReturns a 16-byte globally unique identifier (GUID), similar to the UUID\nfunction, but without the - character.\n\nExample\n-------\n\nSELECT SYS_GUID();\n+----------------------------------+\n| SYS_GUID() |\n+----------------------------------+\n| 2C574E45BA2811EBB265F859713E4BE4 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/sys_guid/','','https://mariadb.com/kb/en/sys_guid/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (165,14,'UUID','Syntax\n------\n\nUUID()\n\nDescription\n-----------\n\nReturns a Universally Unique Identifier (UUID).\n\nA UUID is designed as a number that is globally unique in space and time. Two\ncalls to UUID() are expected to generate two different values, even if these\ncalls are performed on two separate computers that are not connected to each\nother.\n\nUUID() results are intended to be unique, but cannot always be relied upon to\nunpredictable and unguessable, so should not be relied upon for these purposes.\n\nA UUID is a 128-bit number represented by a utf8 string of five hexadecimal\nnumbers in aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee format:\n\n* The first three numbers are generated from a timestamp.\n* The fourth number preserves temporal uniqueness in case the timestamp value\n loses monotonicity (for example, due to daylight saving time).\n* The fifth number is an IEEE 802 node number that provides spatial uniqueness.\n A random number is substituted if the latter is not available (for example,\n because the host computer has no Ethernet card, or we do not know how to find\n the hardware address of an interface on your operating system). In this case,\n spatial uniqueness cannot be guaranteed. Nevertheless, a collision should\n have very low probability.\n\nCurrently, the MAC address of an interface is taken into account only on\nFreeBSD and Linux. On other operating systems, MariaDB uses a randomly\ngenerated 48-bit number.\n\nStatements using the UUID() function are not safe for replication.\n\nThe results are generated according to the \"DCE 1.1:Remote Procedure Call\"\n(Appendix A) CAE (Common Applications Environment) Specifications published by\nThe Open Group in October 1997 (Document Number C706).\n\nExamples\n--------\n\nSELECT UUID();\n+--------------------------------------+\n| UUID() |\n+--------------------------------------+\n| cd41294a-afb0-11df-bc9b-00241dd75637 |\n+--------------------------------------+\n\nURL: https://mariadb.com/kb/en/uuid/','','https://mariadb.com/kb/en/uuid/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (166,14,'UUID_SHORT','Syntax\n------\n\nUUID_SHORT()\n\nDescription\n-----------\n\nReturns a \"short\" universally unique identifier as a 64-bit unsigned integer\n(rather than a string-form 128-bit identifier as returned by the UUID()\nfunction).\n\nThe value of UUID_SHORT() is guaranteed to be unique if the following\nconditions hold:\n\n* The server_id of the current host is unique among your set of master and\n slave servers\n* server_id is between 0 and 255\n* You don\'t set back your system time for your server between mysqld restarts\n* You do not invoke UUID_SHORT() on average more than 16\n million times per second between mysqld restarts\n\nThe UUID_SHORT() return value is constructed this way:\n\n(server_id & 255) << 56\n+ (server_startup_time_in_seconds << 24)\n+ incremented_variable++;\n\nStatements using the UUID_SHORT() function are not safe for statement-based\nreplication.\n\nExamples\n--------\n\nSELECT UUID_SHORT();\n+-------------------+\n| UUID_SHORT() |\n+-------------------+\n| 21517162376069120 |\n+-------------------+\n\ncreate table t1 (a bigint unsigned default(uuid_short()) primary key);\ninsert into t1 values(),();\nselect * from t1;\n+-------------------+\n| a |\n+-------------------+\n| 98113699159474176 |\n| 98113699159474177 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/uuid_short/','','https://mariadb.com/kb/en/uuid_short/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (167,14,'VALUES / VALUE','Syntax\n------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nVALUE(col_name)\n\nMariaDB until 10.3.2\n--------------------\n\nVALUES(col_name)\n\nDescription\n-----------\n\nIn an INSERT ... ON DUPLICATE KEY UPDATE statement, you can use the\nVALUES(col_name) function in the UPDATE clause to refer to column values from\nthe INSERT portion of the statement. In other words, VALUES(col_name) in the\nUPDATE clause refers to the value of col_name that would be inserted, had no\nduplicate-key conflict occurred. This function is especially useful in\nmultiple-row inserts.\n\nThe VALUES() function is meaningful only in INSERT ... ON DUPLICATE KEY UPDATE\nstatements and returns NULL otherwise.\n\nIn MariaDB 10.3.3 this function was renamed to VALUE(), because it\'s\nincompatible with the standard Table Value Constructors syntax, implemented in\nMariaDB 10.3.3.\n\nThe VALUES() function can still be used even from MariaDB 10.3.3, but only in\nINSERT ... ON DUPLICATE KEY UPDATE statements; it\'s a syntax error otherwise.\n\nExamples\n--------\n\nMariaDB starting with 10.3.3\n----------------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUE(a)+VALUE(b);\n\nMariaDB until 10.3.2\n--------------------\n\nINSERT INTO t (a,b,c) VALUES (1,2,3),(4,5,6)\n ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);\n\nURL: https://mariadb.com/kb/en/values-value/','','https://mariadb.com/kb/en/values-value/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (168,15,'!','Syntax\n------\n\nNOT, !\n\nDescription\n-----------\n\nLogical NOT. Evaluates to 1 if the operand is 0, to 0 if the operand is\nnon-zero, and NOT NULL returns NULL.\n\nBy default, the ! operator has a higher precedence. If the HIGH_NOT_PRECEDENCE\nSQL_MODE flag is set, NOT and ! have the same precedence.\n\nExamples\n--------\n\nSELECT NOT 10;\n+--------+\n| NOT 10 |\n+--------+\n| 0 |\n+--------+\n\nSELECT NOT 0;\n+-------+\n| NOT 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT NOT NULL;\n+----------+\n| NOT NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT ! (1+1);\n+---------+\n| ! (1+1) |\n+---------+\n| 0 |\n+---------+\n\nSELECT ! 1+1;\n+-------+\n| ! 1+1 |\n+-------+\n| 1 |\n+-------+\n\nURL: https://mariadb.com/kb/en/not/','','https://mariadb.com/kb/en/not/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (169,15,'&&','Syntax\n------\n\nAND, &&\n\nDescription\n-----------\n\nLogical AND. Evaluates to 1 if all operands are non-zero and not NULL, to 0 if\none or more operands are 0, otherwise NULL is returned.\n\nFor this operator, short-circuit evaluation can be used.\n\nExamples\n--------\n\nSELECT 1 && 1;\n+--------+\n| 1 && 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 && 0;\n+--------+\n| 1 && 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 1 && NULL;\n+-----------+\n| 1 && NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 0 && NULL;\n+-----------+\n| 0 && NULL |\n+-----------+\n| 0 |\n+-----------+\n\nSELECT NULL && 0;\n+-----------+\n| NULL && 0 |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/and/','','https://mariadb.com/kb/en/and/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (170,15,'XOR','Syntax\n------\n\nXOR\n\nDescription\n-----------\n\nXOR stands for eXclusive OR. Returns NULL if either operand is NULL. For\nnon-NULL operands, evaluates to 1 if an odd number of operands is non-zero,\notherwise 0 is returned.\n\nExamples\n--------\n\nSELECT 1 XOR 1;\n+---------+\n| 1 XOR 1 |\n+---------+\n| 0 |\n+---------+\n\nSELECT 1 XOR 0;\n+---------+\n| 1 XOR 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT 1 XOR NULL;\n+------------+\n| 1 XOR NULL |\n+------------+\n| NULL |\n+------------+\n\nIn the following example, the right 1 XOR 1 is evaluated first, and returns 0.\nThen, 1 XOR 0 is evaluated, and 1 is returned.\n\nSELECT 1 XOR 1 XOR 1;\n+---------------+\n| 1 XOR 1 XOR 1 |\n+---------------+\n| 1 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/xor/','','https://mariadb.com/kb/en/xor/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (171,15,'||','Syntax\n------\n\nOR, ||\n\nDescription\n-----------\n\nLogical OR. When both operands are non-NULL, the result is 1 if any operand is\nnon-zero, and 0 otherwise. With a NULL operand, the result is 1 if the other\noperand is non-zero, and NULL otherwise. If both operands are NULL, the result\nis NULL.\n\nFor this operator, short-circuit evaluation can be used.\n\nNote that, if the PIPES_AS_CONCAT SQL_MODE is set, || is used as a string\nconcatenation operator. This means that a || b is the same as CONCAT(a,b). See\nCONCAT() for details.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, || ignores NULL.\n\nExamples\n--------\n\nSELECT 1 || 1;\n+--------+\n| 1 || 1 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 1 || 0;\n+--------+\n| 1 || 0 |\n+--------+\n| 1 |\n+--------+\n\nSELECT 0 || 0;\n+--------+\n| 0 || 0 |\n+--------+\n| 0 |\n+--------+\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| NULL |\n+-----------+\n\nSELECT 1 || NULL;\n+-----------+\n| 1 || NULL |\n+-----------+\n| 1 |\n+-----------+\n\nIn Oracle mode, from MariaDB 10.3:\n\nSELECT 0 || NULL;\n+-----------+\n| 0 || NULL |\n+-----------+\n| 0 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/or/','','https://mariadb.com/kb/en/or/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (172,16,'Stored Aggregate Functions','MariaDB starting with 10.3.3\n----------------------------\nThe ability to create stored aggregate functions was added in MariaDB 10.3.3.\n\nAggregate functions are functions that are computed over a sequence of rows\nand return one result for the sequence of rows.\n\nCreating a custom aggregate function is done using the CREATE FUNCTION\nstatement with two main differences:\n\n* The addition of the AGGREGATE keyword, so CREATE AGGREGATE FUNCTION\n* The FETCH GROUP NEXT ROW instruction inside the loop\n* Oracle PL/SQL compatibility using SQL/PL is provided\n\nStandard Syntax\n---------------\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURNS return_type\nBEGIN\n All types of declarations\n DECLARE CONTINUE HANDLER FOR NOT FOUND RETURN return_val;\n LOOP\n FETCH GROUP NEXT ROW; // fetches next row from table\n other instructions\n END LOOP;\nEND\n\nStored aggregate functions were a 2016 Google Summer of Code project by Varun\nGupta.\n\nUsing SQL/PL\n------------\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION function_name (parameters) RETURN return_type\n declarations\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW; -- fetches next row from table\n -- other instructions\n\nEND LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN return_val;\nEND //\n\nDELIMITER ;\n\nExamples\n--------\n\nFirst a simplified example:\n\nCREATE TABLE marks(stud_id INT, grade_count INT);\n\nINSERT INTO marks VALUES (1,6), (2,4), (3,7), (4,5), (5,8);\n\nSELECT * FROM marks;\n+---------+-------------+\n| stud_id | grade_count |\n+---------+-------------+\n| 1 | 6 |\n| 2 | 4 |\n| 3 | 7 |\n| 4 | 5 |\n| 5 | 8 |\n+---------+-------------+\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION IF NOT EXISTS aggregate_count(x INT) RETURNS INT\nBEGIN\n DECLARE count_students INT DEFAULT 0;\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n RETURN count_students;\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students = count_students+1;\n END IF;\n END LOOP;\nEND //\nDELIMITER ;\n\nA non-trivial example that cannot easily be rewritten using existing functions:\n\nDELIMITER //\nCREATE AGGREGATE FUNCTION medi_int(x INT) RETURNS DOUBLE\nBEGIN\n DECLARE CONTINUE HANDLER FOR NOT FOUND\n BEGIN\n DECLARE res DOUBLE;\n DECLARE cnt INT DEFAULT (SELECT COUNT(*) FROM tt);\n DECLARE lim INT DEFAULT (cnt-1) DIV 2;\n IF cnt % 2 = 0 THEN\n SET res = (SELECT AVG(a) FROM (SELECT a FROM tt ORDER BY a LIMIT\nlim,2) ttt);\n ELSE\n SET res = (SELECT a FROM tt ORDER BY a LIMIT lim,1);\n END IF;\n DROP TEMPORARY TABLE tt;\n RETURN res;\n END;\n CREATE TEMPORARY TABLE tt (a INT);\n LOOP\n FETCH GROUP NEXT ROW;\n INSERT INTO tt VALUES (x);\n END LOOP;\nEND //\nDELIMITER ;\n\nSQL/PL Example\n--------------\n\nThis uses the same marks table as created above.\n\nSET sql_mode=Oracle;\nDELIMITER //\n\nCREATE AGGREGATE FUNCTION aggregate_count(x INT) RETURN INT AS count_students\nINT DEFAULT 0;\nBEGIN\n LOOP\n FETCH GROUP NEXT ROW;\n IF x THEN\n SET count_students := count_students+1;\n END IF;\n END LOOP;\nEXCEPTION\n WHEN NO_DATA_FOUND THEN\n RETURN count_students;\nEND aggregate_count //\nDELIMITER ;\n\nSELECT aggregate_count(stud_id) FROM marks;\n\nURL: https://mariadb.com/kb/en/stored-aggregate-functions/','','https://mariadb.com/kb/en/stored-aggregate-functions/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (173,16,'AVG','Syntax\n------\n\nAVG([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the average value of expr. The DISTINCT option can be used to return\nthe average of the distinct values of expr. NULL values are ignored. It is an\naggregate function, and so can be used with the GROUP BY clause.\n\nAVG() returns NULL if there were no matching rows.\n\nAVG() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\n\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT AVG(sales_value) FROM sales;\n+------------------+\n| AVG(sales_value) |\n+------------------+\n| 22.5000 |\n+------------------+\n\nSELECT AVG(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| AVG(DISTINCT(sales_value)) |\n+----------------------------+\n| 23.3333 |\n+----------------------------+\n\nCommonly, AVG() is used with a GROUP BY clause:\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, AVG(score) FROM student GROUP BY name;\n+---------+------------+\n| name | AVG(score) |\n+---------+------------+\n| Chun | 74.0000 |\n| Esben | 37.0000 |\n| Kaolin | 72.0000 |\n| Tatiana | 85.0000 |\n+---------+------------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,AVG(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nAs a window function:\n\nCREATE TABLE student_test (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, test, score, AVG(score) OVER (PARTITION BY test) \n AS average_by_test FROM student_test;\n+---------+--------+-------+-----------------+\n| name | test | score | average_by_test |\n+---------+--------+-------+-----------------+\n| Chun | SQL | 75 | 65.2500 |\n| Chun | Tuning | 73 | 68.7500 |\n| Esben | SQL | 43 | 65.2500 |\n| Esben | Tuning | 31 | 68.7500 |\n| Kaolin | SQL | 56 | 65.2500 |\n| Kaolin | Tuning | 88 | 68.7500 |\n| Tatiana | SQL | 87 | 65.2500 |\n| Tatiana | Tuning | 83 | 68.7500 |\n+---------+--------+-------+-----------------+\n\nURL: https://mariadb.com/kb/en/avg/','','https://mariadb.com/kb/en/avg/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (174,16,'BIT_AND','Syntax\n------\n\nBIT_AND(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise AND of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_AND will return a value with all bits set to 1. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_AND can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_AND(NULL);\n+----------------------+\n| BIT_AND(NULL) |\n+----------------------+\n| 18446744073709551615 |\n+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_and/','','https://mariadb.com/kb/en/bit_and/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (175,16,'BIT_OR','Syntax\n------\n\nBIT_OR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise OR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_OR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_OR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_OR(NULL);\n+--------------+\n| BIT_OR(NULL) |\n+--------------+\n| 0 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/bit_or/','','https://mariadb.com/kb/en/bit_or/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (176,16,'BIT_XOR','Syntax\n------\n\nBIT_XOR(expr) [over_clause]\n\nDescription\n-----------\n\nReturns the bitwise XOR of all bits in expr. The calculation is performed with\n64-bit (BIGINT) precision. It is an aggregate function, and so can be used\nwith the GROUP BY clause.\n\nIf no rows match, BIT_XOR will return a value with all bits set to 0. NULL\nvalues have no effect on the result unless all results are NULL, which is\ntreated as no match.\n\nBIT_XOR can be used as a window function with the addition of the over_clause.\n\nExamples\n--------\n\nCREATE TABLE vals (x INT);\n\nINSERT INTO vals VALUES(111),(110),(100);\n\nSELECT BIT_AND(x), BIT_OR(x), BIT_XOR(x) FROM vals;\n+------------+-----------+------------+\n| BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+------------+-----------+------------+\n| 100 | 111 | 101 |\n+------------+-----------+------------+\n\nAs an aggregate function:\n\nCREATE TABLE vals2 (category VARCHAR(1), x INT);\n\nINSERT INTO vals2 VALUES\n (\'a\',111),(\'a\',110),(\'a\',100),\n (\'b\',\'000\'),(\'b\',001),(\'b\',011);\n\nSELECT category, BIT_AND(x), BIT_OR(x), BIT_XOR(x) \n FROM vals GROUP BY category;\n+----------+------------+-----------+------------+\n| category | BIT_AND(x) | BIT_OR(x) | BIT_XOR(x) |\n+----------+------------+-----------+------------+\n| a | 100 | 111 | 101 |\n| b | 0 | 11 | 10 |\n+----------+------------+-----------+------------+\n\nNo match:\n\nSELECT BIT_XOR(NULL);\n+---------------+\n| BIT_XOR(NULL) |\n+---------------+\n| 0 |\n+---------------+\n\nURL: https://mariadb.com/kb/en/bit_xor/','','https://mariadb.com/kb/en/bit_xor/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (177,16,'COUNT','Syntax\n------\n\nCOUNT(expr)\n\nDescription\n-----------\n\nReturns a count of the number of non-NULL values of expr in the rows retrieved\nby a SELECT statement. The result is a BIGINT value. It is an aggregate\nfunction, and so can be used with the GROUP BY clause.\n\nCOUNT(*) counts the total number of rows in a table.\n\nCOUNT() returns 0 if there were no matching rows.\n\nCOUNT() can be used as a window function.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nCOUNT(DISTINCT) example:\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nAs a window function\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, COUNT(score) OVER (PARTITION BY name) \n AS tests_written FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | tests_written |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 2 |\n| Chun | Tuning | 73 | 2 |\n| Esben | SQL | 43 | 2 |\n| Esben | Tuning | 31 | 2 |\n| Kaolin | SQL | 56 | 2 |\n| Kaolin | Tuning | 88 | 2 |\n| Tatiana | SQL | 87 | 1 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/count/','','https://mariadb.com/kb/en/count/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (178,16,'COUNT DISTINCT','Syntax\n------\n\nCOUNT(DISTINCT expr,[expr...])\n\nDescription\n-----------\n\nReturns a count of the number of different non-NULL values.\n\nCOUNT(DISTINCT) returns 0 if there were no matching rows.\n\nAlthough, from MariaDB 10.2.0, COUNT can be used as a window function, COUNT\nDISTINCT cannot be.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT COUNT(*) FROM student;\n+----------+\n| COUNT(*) |\n+----------+\n| 8 |\n+----------+\n\nSELECT COUNT(DISTINCT (name)) FROM student;\n+------------------------+\n| COUNT(DISTINCT (name)) |\n+------------------------+\n| 4 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/count-distinct/','','https://mariadb.com/kb/en/count-distinct/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (179,16,'GROUP_CONCAT','Syntax\n------\n\nGROUP_CONCAT(expr)\n\nDescription\n-----------\n\nThis function returns a string result with the concatenated non-NULL values\nfrom a group. It returns NULL if there are no non-NULL values.\n\nThe maximum returned length in bytes is determined by the group_concat_max_len\nserver system variable, which defaults to 1M (>= MariaDB 10.2.4) or 1K (<=\nMariaDB 10.2.3).\n\nIf group_concat_max_len <= 512, the return type is VARBINARY or VARCHAR;\notherwise, the return type is BLOB or TEXT. The choice between binary or\nnon-binary types depends from the input.\n\nThe full syntax is as follows:\n\nGROUP_CONCAT([DISTINCT] expr [,expr ...]\n [ORDER BY {unsigned_integer | col_name | expr}\n [ASC | DESC] [,col_name ...]]\n [SEPARATOR str_val]\n [LIMIT {[offset,] row_count | row_count OFFSET offset}])\n\nDISTINCT eliminates duplicate values from the output string.\n\nORDER BY determines the order of returned values.\n\nSEPARATOR specifies a separator between the values. The default separator is a\ncomma (,). It is possible to avoid using a separator by specifying an empty\nstring.\n\nLIMIT\n-----\n\nMariaDB starting with 10.3.3\n----------------------------\nUntil MariaDB 10.3.2, it was not possible to use the LIMIT clause with\nGROUP_CONCAT. This restriction was lifted in MariaDB 10.3.3.\n\nExamples\n--------\n\nSELECT student_name,\n GROUP_CONCAT(test_score)\n FROM student\n GROUP BY student_name;\n\nGet a readable list of MariaDB users from the mysql.user table:\n\nSELECT GROUP_CONCAT(DISTINCT User ORDER BY User SEPARATOR \'\\n\')\n FROM mysql.user;\n\nIn the former example, DISTINCT is used because the same user may occur more\nthan once. The new line (\\n) used as a SEPARATOR makes the results easier to\nread.\n\nGet a readable list of hosts from which each user can connect:\n\nSELECT User, GROUP_CONCAT(Host ORDER BY Host SEPARATOR \', \') \n FROM mysql.user GROUP BY User ORDER BY User;\n\nThe former example shows the difference between the GROUP_CONCAT\'s ORDER BY\n(which sorts the concatenated hosts), and the SELECT\'s ORDER BY (which sorts\nthe rows).\n\nFrom MariaDB 10.3.3, LIMIT can be used with GROUP_CONCAT, so, for example,\ngiven the following table:\n\nCREATE TABLE d (dd DATE, cc INT);\n\nINSERT INTO d VALUES (\'2017-01-01\',1);\nINSERT INTO d VALUES (\'2017-01-02\',2);\nINSERT INTO d VALUES (\'2017-01-04\',3);\n\nthe following query:\n\nSELECT SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc\nDESC),\",\",1) FROM d;\n+----------------------------------------------------------------------------+\n| SUBSTRING_INDEX(GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC),\",\",1) |\n+----------------------------------------------------------------------------+\n| 2017-01-04:3 |\n+----------------------------------------------------------------------------+\n\ncan be more simply rewritten as:\n\nSELECT GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) FROM d;\n+-------------------------------------------------------------+\n| GROUP_CONCAT(CONCAT_WS(\":\",dd,cc) ORDER BY cc DESC LIMIT 1) |\n+-------------------------------------------------------------+\n| 2017-01-04:3 |\n+-------------------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/group_concat/','','https://mariadb.com/kb/en/group_concat/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (180,16,'MAX','Syntax\n------\n\nMAX([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the largest, or maximum, value of expr. MAX() can also take a string\nargument in which case it returns the maximum string value. The DISTINCT\nkeyword can be used to find the maximum of the distinct values of expr,\nhowever, this produces the same result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MAX() may produce a\ndifferent highest result than ORDER BY DESC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMAX() can be used as a window function.\n\nMAX() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MAX(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MAX(score) |\n+---------+------------+\n| Chun | 75 |\n| Esben | 43 |\n| Kaolin | 88 |\n| Tatiana | 87 |\n+---------+------------+\n\nMAX string:\n\nSELECT MAX(name) FROM student;\n+-----------+\n| MAX(name) |\n+-----------+\n| Tatiana |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MAX(SCORE) FROM student;\n+------+------+------------+\n| name | test | MAX(SCORE) |\n+------+------+------------+\n| Chun | SQL | 88 |\n+------+------+------------+\n\nDifference between ORDER BY DESC and MAX():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MAX(grade) FROM student2;\n+------------+\n| MAX(grade) |\n+------------+\n| c |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade DESC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| a |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MAX(score) \n OVER (PARTITION BY name) AS highest_score FROM student_test;\n+---------+--------+-------+---------------+\n| name | test | score | highest_score |\n+---------+--------+-------+---------------+\n| Chun | SQL | 75 | 75 |\n| Chun | Tuning | 73 | 75 |\n| Esben | SQL | 43 | 43 |\n| Esben | Tuning | 31 | 43 |\n| Kaolin | SQL | 56 | 88 |\n| Kaolin | Tuning | 88 | 88 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+---------------+\n\nURL: https://mariadb.com/kb/en/max/','','https://mariadb.com/kb/en/max/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (181,16,'MIN','Syntax\n------\n\nMIN([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the minimum value of expr. MIN() may take a string argument, in which\ncase it returns the minimum string value. The DISTINCT keyword can be used to\nfind the minimum of the distinct values of expr, however, this produces the\nsame result as omitting DISTINCT.\n\nNote that SET and ENUM fields are currently compared by their string value\nrather than their relative position in the set, so MIN() may produce a\ndifferent lowest result than ORDER BY ASC.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nMIN() can be used as a window function.\n\nMIN() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE student (name CHAR(10), test CHAR(10), score TINYINT);\n\nINSERT INTO student VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87), (\'Tatiana\', \'Tuning\', 83);\n\nSELECT name, MIN(score) FROM student GROUP BY name;\n+---------+------------+\n| name | MIN(score) |\n+---------+------------+\n| Chun | 73 |\n| Esben | 31 |\n| Kaolin | 56 |\n| Tatiana | 83 |\n+---------+------------+\n\nMIN() with a string:\n\nSELECT MIN(name) FROM student;\n+-----------+\n| MIN(name) |\n+-----------+\n| Chun |\n+-----------+\n\nBe careful to avoid this common mistake, not grouping correctly and returning\nmismatched data:\n\nSELECT name,test,MIN(score) FROM student;\n+------+------+------------+\n| name | test | MIN(score) |\n+------+------+------------+\n| Chun | SQL | 31 |\n+------+------+------------+\n\nDifference between ORDER BY ASC and MIN():\n\nCREATE TABLE student2(name CHAR(10),grade ENUM(\'b\',\'c\',\'a\'));\n\nINSERT INTO student2 VALUES(\'Chun\',\'b\'),(\'Esben\',\'c\'),(\'Kaolin\',\'a\');\n\nSELECT MIN(grade) FROM student2;\n+------------+\n| MIN(grade) |\n+------------+\n| a |\n+------------+\n\nSELECT grade FROM student2 ORDER BY grade ASC LIMIT 1;\n+-------+\n| grade |\n+-------+\n| b |\n+-------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, MIN(score) \n OVER (PARTITION BY name) AS lowest_score FROM student_test;\n+---------+--------+-------+--------------+\n| name | test | score | lowest_score |\n+---------+--------+-------+--------------+\n| Chun | SQL | 75 | 73 |\n| Chun | Tuning | 73 | 73 |\n| Esben | SQL | 43 | 31 |\n| Esben | Tuning | 31 | 31 |\n| Kaolin | SQL | 56 | 56 |\n| Kaolin | Tuning | 88 | 56 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+--------------+\n\nURL: https://mariadb.com/kb/en/min/','','https://mariadb.com/kb/en/min/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (182,16,'STD','Syntax\n------\n\nSTD(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This is an extension to\nstandard SQL. The standard SQL function STDDEV_POP() can be used instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTD() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/std/','','https://mariadb.com/kb/en/std/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (183,16,'STDDEV','Syntax\n------\n\nSTDDEV(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr. This function is provided\nfor compatibility with Oracle. The standard SQL function STDDEV_POP() can be\nused instead.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV() can be used as a window function.\n\nThis function returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev/','','https://mariadb.com/kb/en/stddev/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (184,16,'STDDEV_POP','Syntax\n------\n\nSTDDEV_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard deviation of expr (the square root of\nVAR_POP()). You can also use STD() or STDDEV(), which are equivalent but not\nstandard SQL.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_POP() can be used as a window function.\n\nSTDDEV_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, STDDEV_POP(score) \n OVER (PARTITION BY test) AS stddev_results FROM student_test;\n+---------+--------+-------+----------------+\n| name | test | score | stddev_results |\n+---------+--------+-------+----------------+\n| Chun | SQL | 75 | 16.9466 |\n| Chun | Tuning | 73 | 24.1247 |\n| Esben | SQL | 43 | 16.9466 |\n| Esben | Tuning | 31 | 24.1247 |\n| Kaolin | SQL | 56 | 16.9466 |\n| Kaolin | Tuning | 88 | 24.1247 |\n| Tatiana | SQL | 87 | 16.9466 |\n+---------+--------+-------+----------------+\n\nURL: https://mariadb.com/kb/en/stddev_pop/','','https://mariadb.com/kb/en/stddev_pop/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (185,16,'STDDEV_SAMP','Syntax\n------\n\nSTDDEV_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample standard deviation of expr (the square root of VAR_SAMP()).\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nSTDDEV_SAMP() can be used as a window function.\n\nSTDDEV_SAMP() returns NULL if there were no matching rows.\n\nURL: https://mariadb.com/kb/en/stddev_samp/','','https://mariadb.com/kb/en/stddev_samp/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (186,16,'SUM','Syntax\n------\n\nSUM([DISTINCT] expr)\n\nDescription\n-----------\n\nReturns the sum of expr. If the return set has no rows, SUM() returns NULL.\nThe DISTINCT keyword can be used to sum only the distinct values of expr.\n\nSUM() can be used as a window function, although not with the DISTINCT\nspecifier.\n\nExamples\n--------\n\nCREATE TABLE sales (sales_value INT);\nINSERT INTO sales VALUES(10),(20),(20),(40);\n\nSELECT SUM(sales_value) FROM sales;\n+------------------+\n| SUM(sales_value) |\n+------------------+\n| 90 |\n+------------------+\n\nSELECT SUM(DISTINCT(sales_value)) FROM sales;\n+----------------------------+\n| SUM(DISTINCT(sales_value)) |\n+----------------------------+\n| 70 |\n+----------------------------+\n\nCommonly, SUM is used with a GROUP BY clause:\n\nCREATE TABLE sales (name CHAR(10), month CHAR(10), units INT);\n\nINSERT INTO sales VALUES \n (\'Chun\', \'Jan\', 75), (\'Chun\', \'Feb\', 73),\n (\'Esben\', \'Jan\', 43), (\'Esben\', \'Feb\', 31),\n (\'Kaolin\', \'Jan\', 56), (\'Kaolin\', \'Feb\', 88),\n (\'Tatiana\', \'Jan\', 87), (\'Tatiana\', \'Feb\', 83);\n\nSELECT name, SUM(units) FROM sales GROUP BY name;\n+---------+------------+\n| name | SUM(units) |\n+---------+------------+\n| Chun | 148 |\n| Esben | 74 |\n| Kaolin | 144 |\n| Tatiana | 170 |\n+---------+------------+\n\nThe GROUP BY clause is required when using an aggregate function along with\nregular column data, otherwise the result will be a mismatch, as in the\nfollowing common type of mistake:\n\nSELECT name,SUM(units) FROM sales\n;+------+------------+\n| name | SUM(units) |\n+------+------------+\n| Chun | 536 |\n+------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, SUM(score) OVER (PARTITION BY name) AS total_score\nFROM student_test;\n+---------+--------+-------+-------------+\n| name | test | score | total_score |\n+---------+--------+-------+-------------+\n| Chun | SQL | 75 | 148 |\n| Chun | Tuning | 73 | 148 |\n| Esben | SQL | 43 | 74 |\n| Esben | Tuning | 31 | 74 |\n| Kaolin | SQL | 56 | 144 |\n| Kaolin | Tuning | 88 | 144 |\n| Tatiana | SQL | 87 | 87 |\n+---------+--------+-------+-------------+\n\nURL: https://mariadb.com/kb/en/sum/','','https://mariadb.com/kb/en/sum/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (187,16,'VARIANCE','Syntax\n------\n\nVARIANCE(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. This is an extension to\nstandard SQL. The standard SQL function VAR_POP() can be used instead.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVARIANCE() can be used as a window function.\n\nVARIANCE() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 1.0000 |\n+-------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VARIANCE(i) FROM v;\n+-------------+\n| VARIANCE(i) |\n+-------------+\n| 200.5000 |\n+-------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | SQL | 43 | 287.1875 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Kaolin | Tuning | 88 | 582.0000 |\n| Tatiana | SQL | 87 | 287.1875 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/variance/','','https://mariadb.com/kb/en/variance/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (188,16,'VAR_POP','Syntax\n------\n\nVAR_POP(expr)\n\nDescription\n-----------\n\nReturns the population standard variance of expr. It considers rows as the\nwhole population, not as a sample, so it has the number of rows as the\ndenominator. You can also use VARIANCE(), which is equivalent but is not\nstandard SQL.\n\nVariance is calculated by\n\n* working out the mean for the set\n* for each number, subtracting the mean and squaring the result\n* calculate the average of the resulting differences\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_POP() can be used as a window function.\n\nVAR_POP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nCREATE TABLE v(i tinyint);\n\nINSERT INTO v VALUES(101),(99);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 1.0000 |\n+------------+\n\nINSERT INTO v VALUES(120),(80);\n\nSELECT VAR_POP(i) FROM v;\n+------------+\n| VAR_POP(i) |\n+------------+\n| 200.5000 |\n+------------+\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_POP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 287.1875 |\n| Esben | SQL | 43 | 287.1875 |\n| Kaolin | SQL | 56 | 287.1875 |\n| Tatiana | SQL | 87 | 287.1875 |\n| Chun | Tuning | 73 | 582.0000 |\n| Esben | Tuning | 31 | 582.0000 |\n| Kaolin | Tuning | 88 | 582.0000 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_pop/','','https://mariadb.com/kb/en/var_pop/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (189,16,'VAR_SAMP','Syntax\n------\n\nVAR_SAMP(expr)\n\nDescription\n-----------\n\nReturns the sample variance of expr. That is, the denominator is the number of\nrows minus one.\n\nIt is an aggregate function, and so can be used with the GROUP BY clause.\n\nVAR_SAMP() can be used as a window function.\n\nVAR_SAMP() returns NULL if there were no matching rows.\n\nExamples\n--------\n\nAs an aggregate function:\n\nCREATE OR REPLACE TABLE stats (category VARCHAR(2), x INT);\n\nINSERT INTO stats VALUES \n (\'a\',1),(\'a\',2),(\'a\',3),\n (\'b\',11),(\'b\',12),(\'b\',20),(\'b\',30),(\'b\',60);\n\nSELECT category, STDDEV_POP(x), STDDEV_SAMP(x), VAR_POP(x) \n FROM stats GROUP BY category;\n+----------+---------------+----------------+------------+\n| category | STDDEV_POP(x) | STDDEV_SAMP(x) | VAR_POP(x) |\n+----------+---------------+----------------+------------+\n| a | 0.8165 | 1.0000 | 0.6667 |\n| b | 18.0400 | 20.1693 | 325.4400 |\n+----------+---------------+----------------+------------+\n\nAs a window function:\n\nCREATE OR REPLACE TABLE student_test (name CHAR(10), test CHAR(10), score\nTINYINT);\n\nINSERT INTO student_test VALUES \n (\'Chun\', \'SQL\', 75), (\'Chun\', \'Tuning\', 73),\n (\'Esben\', \'SQL\', 43), (\'Esben\', \'Tuning\', 31),\n (\'Kaolin\', \'SQL\', 56), (\'Kaolin\', \'Tuning\', 88),\n (\'Tatiana\', \'SQL\', 87);\n\nSELECT name, test, score, VAR_SAMP(score) \n OVER (PARTITION BY test) AS variance_results FROM student_test;\n+---------+--------+-------+------------------+\n| name | test | score | variance_results |\n+---------+--------+-------+------------------+\n| Chun | SQL | 75 | 382.9167 |\n| Chun | Tuning | 73 | 873.0000 |\n| Esben | SQL | 43 | 382.9167 |\n| Esben | Tuning | 31 | 873.0000 |\n| Kaolin | SQL | 56 | 382.9167 |\n| Kaolin | Tuning | 88 | 873.0000 |\n| Tatiana | SQL | 87 | 382.9167 |\n+---------+--------+-------+------------------+\n\nURL: https://mariadb.com/kb/en/var_samp/','','https://mariadb.com/kb/en/var_samp/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (190,17,'BENCHMARK','Syntax\n------\n\nBENCHMARK(count,expr)\n\nDescription\n-----------\n\nThe BENCHMARK() function executes the expression expr repeatedly count times.\nIt may be used to time how quickly MariaDB processes the expression. The\nresult value is always 0. The intended use is from within the mysql client,\nwhich reports query execution times.\n\nExamples\n--------\n\nSELECT BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\'));\n+----------------------------------------------+\n| BENCHMARK(1000000,ENCODE(\'hello\',\'goodbye\')) |\n+----------------------------------------------+\n| 0 |\n+----------------------------------------------+\n1 row in set (0.21 sec)\n\nURL: https://mariadb.com/kb/en/benchmark/','','https://mariadb.com/kb/en/benchmark/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (191,17,'BINLOG_GTID_POS','Syntax\n------\n\nBINLOG_GTID_POS(binlog_filename,binlog_offset)\n\nDescription\n-----------\n\nThe BINLOG_GTID_POS() function takes as input an old-style binary log position\nin the form of a file name and a file offset. It looks up the position in the\ncurrent binlog, and returns a string representation of the corresponding GTID\nposition. If the position is not found in the current binlog, NULL is returned.\n\nExamples\n--------\n\nSELECT BINLOG_GTID_POS(\"master-bin.000001\", 600);\n\nURL: https://mariadb.com/kb/en/binlog_gtid_pos/','','https://mariadb.com/kb/en/binlog_gtid_pos/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (192,17,'CHARSET','Syntax\n------\n\nCHARSET(str)\n\nDescription\n-----------\n\nReturns the character set of the string argument. If str is not a string, it\nis considered as a binary string (so the function returns \'binary\'). This\napplies to NULL, too. The return value is a string in the utf8 character set.\n\nExamples\n--------\n\nSELECT CHARSET(\'abc\');\n+----------------+\n| CHARSET(\'abc\') |\n+----------------+\n| latin1 |\n+----------------+\n\nSELECT CHARSET(CONVERT(\'abc\' USING utf8));\n+------------------------------------+\n| CHARSET(CONVERT(\'abc\' USING utf8)) |\n+------------------------------------+\n| utf8 |\n+------------------------------------+\n\nSELECT CHARSET(USER());\n+-----------------+\n| CHARSET(USER()) |\n+-----------------+\n| utf8 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/charset/','','https://mariadb.com/kb/en/charset/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (193,17,'COERCIBILITY','Syntax\n------\n\nCOERCIBILITY(str)\n\nDescription\n-----------\n\nReturns the collation coercibility value of the string argument. Coercibility\ndefines what will be converted to what in case of collation conflict, with an\nexpression with higher coercibility being converted to the collation of an\nexpression with lower coercibility.\n\n+-----------------------------+---------------------------+------------------+\n| Coercibility | Description | Example |\n+-----------------------------+---------------------------+------------------+\n| 0 | Explicit | Value using a |\n| | | COLLATE clause |\n+-----------------------------+---------------------------+------------------+\n| 1 | No collation | Concatenated |\n| | | strings using |\n| | | different |\n| | | collations |\n+-----------------------------+---------------------------+------------------+\n| 2 | Implicit | Column value |\n+-----------------------------+---------------------------+------------------+\n| 3 | Constant | USER() return |\n| | | value |\n+-----------------------------+---------------------------+------------------+\n| 4 | Coercible | Literal string |\n+-----------------------------+---------------------------+------------------+\n| 5 | Ignorable | NULL or derived |\n| | | from NULL |\n+-----------------------------+---------------------------+------------------+\n\nExamples\n--------\n\nSELECT COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci);\n+-----------------------------------------------+\n| COERCIBILITY(\'abc\' COLLATE latin1_swedish_ci) |\n+-----------------------------------------------+\n| 0 |\n+-----------------------------------------------+\n\nSELECT COERCIBILITY(USER());\n+----------------------+\n| COERCIBILITY(USER()) |\n+----------------------+\n| 3 |\n+----------------------+\n\nSELECT COERCIBILITY(\'abc\');\n+---------------------+\n| COERCIBILITY(\'abc\') |\n+---------------------+\n| 4 |\n+---------------------+\n\nURL: https://mariadb.com/kb/en/coercibility/','','https://mariadb.com/kb/en/coercibility/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (194,17,'COLLATION','Syntax\n------\n\nCOLLATION(str)\n\nDescription\n-----------\n\nReturns the collation of the string argument. If str is not a string, it is\nconsidered as a binary string (so the function returns \'binary\'). This applies\nto NULL, too. The return value is a string in the utf8 character set.\n\nSee Character Sets and Collations.\n\nExamples\n--------\n\nSELECT COLLATION(\'abc\');\n+-------------------+\n| COLLATION(\'abc\') |\n+-------------------+\n| latin1_swedish_ci |\n+-------------------+\n\nSELECT COLLATION(_utf8\'abc\');\n+-----------------------+\n| COLLATION(_utf8\'abc\') |\n+-----------------------+\n| utf8_general_ci |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/collation/','','https://mariadb.com/kb/en/collation/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (195,17,'CONNECTION_ID','Syntax\n------\n\nCONNECTION_ID()\n\nDescription\n-----------\n\nReturns the connection ID for the connection. Every connection (including\nevents) has an ID that is unique among the set of currently connected clients.\n\nUntil MariaDB 10.3.1, returns MYSQL_TYPE_LONGLONG, or bigint(10), in all\ncases. From MariaDB 10.3.1, returns MYSQL_TYPE_LONG, or int(10), when the\nresult would fit within 32-bits.\n\nExamples\n--------\n\nSELECT CONNECTION_ID();\n+-----------------+\n| CONNECTION_ID() |\n+-----------------+\n| 3 |\n+-----------------+\n\nURL: https://mariadb.com/kb/en/connection_id/','','https://mariadb.com/kb/en/connection_id/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (196,17,'CURRENT_ROLE','Syntax\n------\n\nCURRENT_ROLE, CURRENT_ROLE()\n\nDescription\n-----------\n\nReturns the current role name. This determines your access privileges. The\nreturn value is a string in the utf8 character set.\n\nIf there is no current role, NULL is returned.\n\nThe output of SELECT CURRENT_ROLE is equivalent to the contents of the\nENABLED_ROLES Information Schema table.\n\nUSER() returns the combination of user and host used to login. CURRENT_USER()\nreturns the account used to determine current connection\'s privileges.\n\nExamples\n--------\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| NULL |\n+--------------+\n\nSET ROLE staff;\n\nSELECT CURRENT_ROLE;\n+--------------+\n| CURRENT_ROLE |\n+--------------+\n| staff |\n+--------------+\n\nURL: https://mariadb.com/kb/en/current_role/','','https://mariadb.com/kb/en/current_role/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (197,17,'CURRENT_USER','Syntax\n------\n\nCURRENT_USER, CURRENT_USER()\n\nDescription\n-----------\n\nReturns the user name and host name combination for the MariaDB account that\nthe server used to authenticate the current client. This account determines\nyour access privileges. The return value is a string in the utf8 character set.\n\nThe value of CURRENT_USER() can differ from the value of USER().\nCURRENT_ROLE() returns the current active role.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nselect user(),current_user();\n+---------------------+----------------+\n| user() | current_user() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nWhen calling CURRENT_USER() in a stored procedure, it returns the owner of the\nstored procedure, as defined with DEFINER.\n\nURL: https://mariadb.com/kb/en/current_user/','','https://mariadb.com/kb/en/current_user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (198,17,'DATABASE','Syntax\n------\n\nDATABASE()\n\nDescription\n-----------\n\nReturns the default (current) database name as a string in the utf8 character\nset. If there is no default database, DATABASE() returns NULL. Within a stored\nroutine, the default database is the database that the routine is associated\nwith, which is not necessarily the same as the database that is the default in\nthe calling context.\n\nSCHEMA() is a synonym for DATABASE().\n\nTo select a default database, the USE statement can be run. Another way to set\nthe default database is specifying its name at mysql command line client\nstartup.\n\nExamples\n--------\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| NULL |\n+------------+\n\nUSE test;\nDatabase changed\n\nSELECT DATABASE();\n+------------+\n| DATABASE() |\n+------------+\n| test |\n+------------+\n\nURL: https://mariadb.com/kb/en/database/','','https://mariadb.com/kb/en/database/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (199,17,'DECODE_HISTOGRAM','Syntax\n------\n\nDECODE_HISTOGRAM(hist_type,histogram)\n\nDescription\n-----------\n\nReturns a string of comma separated numeric values corresponding to a\nprobability distribution represented by the histogram of type hist_type\n(SINGLE_PREC_HB or DOUBLE_PREC_HB). The hist_type and histogram would be\ncommonly used from the mysql.column_stats table.\n\nSee Histogram Based Statistics for details.\n\nExamples\n--------\n\nCREATE TABLE origin (\n i INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,\n v INT UNSIGNED NOT NULL\n);\n\nINSERT INTO origin(v) VALUES \n (1),(2),(3),(4),(5),(10),(20),\n (30),(40),(50),(60),(70),(80),\n (90),(100),(200),(400),(800);\n\nSET histogram_size=10,histogram_type=SINGLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,hist_type,\n hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) |\ndecode_histogram(hist_type,histogram) |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n| test | origin | i | SINGLE_PREC_HB | 0F2D3C5A7887A5C3D2F0 |\n0.059,0.118,0.059,0.118,0.118,0.059,0.118,0.118,0.059,0.118,0.059 |\n| test | origin | v | SINGLE_PREC_HB | 000001060C0F161C1F7F |\n0.000,0.000,0.004,0.020,0.024,0.012,0.027,0.024,0.012,0.376,0.502 |\n+---------+------------+-------------+----------------+----------------------+-\n-----------------------------------------------------------------+\n\nSET histogram_size=20,histogram_type=DOUBLE_PREC_HB;\n\nANALYZE TABLE origin PERSISTENT FOR ALL;\n+-------------+---------+----------+-----------------------------------------+\n| Table | Op | Msg_type | Msg_text |\n+-------------+---------+----------+-----------------------------------------+\n| test.origin | analyze | status | Engine-independent statistics collected |\n| test.origin | analyze | status | OK |\n+-------------+---------+----------+-----------------------------------------+\n\nSELECT db_name,table_name,column_name,\n hist_type,hex(histogram),decode_histogram(hist_type,histogram)\n FROM mysql.column_stats WHERE db_name=\'test\' and table_name=\'origin\';\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| db_name | table_name | column_name | hist_type | hex(histogram) \n | decode_histogram(hist_type,histogram)\n |\n+---------+------------+-------------+----------------+------------------------\n-----------------+-------------------------------------------------------------\n---------------------------+\n| test | origin | i | DOUBLE_PREC_HB |\n0F0F2D2D3C3C5A5A78788787A5A5C3C3D2D2F0F0 |\n0.05882,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765,0.11765,0.05882,0.11765\n0.05882 |\n| test | origin | v | DOUBLE_PREC_HB |\n5200F600480116067E0CB30F1B16831CB81FD67F |\n0.00125,0.00250,0.00125,0.01877,0.02502,0.01253,0.02502,0.02502,0.01253,0.37546\n0.50063 |\n\nURL: https://mariadb.com/kb/en/decode_histogram/','','https://mariadb.com/kb/en/decode_histogram/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (200,17,'DEFAULT','Syntax\n------\n\nDEFAULT(col_name)\n\nDescription\n-----------\n\nReturns the default value for a table column. If the column has no default\nvalue (and is not NULLABLE - NULLABLE fields have a NULL default), an error is\nreturned.\n\nFor integer columns using AUTO_INCREMENT, 0 is returned.\n\nWhen using DEFAULT as a value to set in an INSERT or UPDATE statement, you can\nuse the bare keyword DEFAULT without the parentheses and argument to refer to\nthe column in context. You can only use DEFAULT as a bare keyword if you are\nusing it alone without a surrounding expression or function.\n\nExamples\n--------\n\nSelect only non-default values for a column:\n\nSELECT i FROM t WHERE i != DEFAULT(i);\n\nUpdate values to be one greater than the default value:\n\nUPDATE t SET i = DEFAULT(i)+1 WHERE i < 100;\n\nWhen referring to the default value exactly in UPDATE or INSERT, you can omit\nthe argument:\n\nINSERT INTO t (i) VALUES (DEFAULT);\nUPDATE t SET i = DEFAULT WHERE i < 100;\n\nCREATE OR REPLACE TABLE t (\n i INT NOT NULL AUTO_INCREMENT,\n j INT NOT NULL,\n k INT DEFAULT 3,\n l INT NOT NULL DEFAULT 4,\n m INT,\n PRIMARY KEY (i)\n);\n\nDESC t;\n+-------+---------+------+-----+---------+----------------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+---------+------+-----+---------+----------------+\n| i | int(11) | NO | PRI | NULL | auto_increment |\n| j | int(11) | NO | | NULL | |\n| k | int(11) | YES | | 3 | |\n| l | int(11) | NO | | 4 | |\n| m | int(11) | YES | | NULL | |\n+-------+---------+------+-----+---------+----------------+\n\nINSERT INTO t (j) VALUES (1);\nINSERT INTO t (j,m) VALUES (2,2);\nINSERT INTO t (j,l,m) VALUES (3,3,3);\n\nSELECT * FROM t;\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m) FROM t;\n+------------+------------+-------------+------------+\n| DEFAULT(i) | DEFAULT(k) | DEFAULT (l) | DEFAULT(m) |\n+------------+------------+-------------+------------+\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n| 0 | 3 | 4 | NULL |\n+------------+------------+-------------+------------+\n\nSELECT DEFAULT(i), DEFAULT(k), DEFAULT (l), DEFAULT(m), DEFAULT(j) FROM t;\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE i = DEFAULT(i);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE j = DEFAULT(j);\nERROR 1364 (HY000): Field \'j\' doesn\'t have a default value\n\nSELECT * FROM t WHERE k = DEFAULT(k);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n| 3 | 3 | 3 | 3 | 3 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE l = DEFAULT(l);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n| 2 | 2 | 3 | 4 | 2 |\n+---+---+------+---+------+\n\nSELECT * FROM t WHERE m = DEFAULT(m);\nEmpty set (0.001 sec)\n\nSELECT * FROM t WHERE m <=> DEFAULT(m);\n+---+---+------+---+------+\n| i | j | k | l | m |\n+---+---+------+---+------+\n| 1 | 1 | 3 | 4 | NULL |\n+---+---+------+---+------+\n\nURL: https://mariadb.com/kb/en/default/','','https://mariadb.com/kb/en/default/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (201,17,'FOUND_ROWS','Syntax\n------\n\nFOUND_ROWS()\n\nDescription\n-----------\n\nA SELECT statement may include a LIMIT clause to restrict the number of rows\nthe server returns to the client. In some cases, it is desirable to know how\nmany rows the statement would have returned without the LIMIT, but without\nrunning the statement again. To obtain this row count, include a\nSQL_CALC_FOUND_ROWS option in the SELECT statement, and then invoke\nFOUND_ROWS() afterwards.\n\nYou can also use FOUND_ROWS() to obtain the number of rows returned by a\nSELECT which does not contain a LIMIT clause. In this case you don\'t need to\nuse the SQL_CALC_FOUND_ROWS option. This can be useful for example in a stored\nprocedure.\n\nAlso, this function works with some other statements which return a resultset,\nincluding SHOW, DESC and HELP. For DELETE ... RETURNING you should use\nROW_COUNT(). It also works as a prepared statement, or after executing a\nprepared statement.\n\nStatements which don\'t return any results don\'t affect FOUND_ROWS() - the\nprevious value will still be returned.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows selected by the last query in the procedure, not by the whole procedure.\n\nStatements using the FOUND_ROWS() function are not safe for replication.\n\nExamples\n--------\n\nSHOW ENGINES\\G\n*************************** 1. row ***************************\n Engine: CSV\n Support: YES\n Comment: Stores tables as CSV files\nTransactions: NO\n XA: NO\n Savepoints: NO\n*************************** 2. row ***************************\n Engine: MRG_MyISAM\n Support: YES\n Comment: Collection of identical MyISAM tables\nTransactions: NO\n XA: NO\n Savepoints: NO\n\n...\n\n*************************** 8. row ***************************\n Engine: PERFORMANCE_SCHEMA\n Support: YES\n Comment: Performance Schema\nTransactions: NO\n XA: NO\n Savepoints: NO\n8 rows in set (0.000 sec)\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 8 |\n+--------------+\n\nSELECT SQL_CALC_FOUND_ROWS * FROM tbl_name WHERE id > 100 LIMIT 10;\n\nSELECT FOUND_ROWS();\n+--------------+\n| FOUND_ROWS() |\n+--------------+\n| 23 |\n+--------------+\n\nURL: https://mariadb.com/kb/en/found_rows/','','https://mariadb.com/kb/en/found_rows/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (202,17,'LAST_INSERT_ID','Syntax\n------\n\nLAST_INSERT_ID(), LAST_INSERT_ID(expr)\n\nDescription\n-----------\n\nLAST_INSERT_ID() (no arguments) returns the first automatically generated\nvalue successfully inserted for an AUTO_INCREMENT column as a result of the\nmost recently executed INSERT statement. The value of LAST_INSERT_ID() remains\nunchanged if no rows are successfully inserted.\n\nIf one gives an argument to LAST_INSERT_ID(), then it will return the value of\nthe expression and the next call to LAST_INSERT_ID() will return the same\nvalue. The value will also be sent to the client and can be accessed by the\nmysql_insert_id function.\n\nFor example, after inserting a row that generates an AUTO_INCREMENT value, you\ncan get the value like this:\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 9 |\n+------------------+\n\nYou can also use LAST_INSERT_ID() to delete the last inserted row:\n\nDELETE FROM product WHERE id = LAST_INSERT_ID();\n\nIf no rows were successfully inserted, LAST_INSERT_ID() returns 0.\n\nThe value of LAST_INSERT_ID() will be consistent across all versions if all\nrows in the INSERT or UPDATE statement were successful.\n\nThe currently executing statement does not affect the value of\nLAST_INSERT_ID(). Suppose that you generate an AUTO_INCREMENT value with one\nstatement, and then refer to LAST_INSERT_ID() in a multiple-row INSERT\nstatement that inserts rows into a table with its own AUTO_INCREMENT column.\nThe value of LAST_INSERT_ID() will remain stable in the second statement; its\nvalue for the second and later rows is not affected by the earlier row\ninsertions. (However, if you mix references to LAST_INSERT_ID() and\nLAST_INSERT_ID(expr), the effect is undefined.)\n\nIf the previous statement returned an error, the value of LAST_INSERT_ID() is\nundefined. For transactional tables, if the statement is rolled back due to an\nerror, the value of LAST_INSERT_ID() is left undefined. For manual ROLLBACK,\nthe value of LAST_INSERT_ID() is not restored to that before the transaction;\nit remains as it was at the point of the ROLLBACK.\n\nWithin the body of a stored routine (procedure or function) or a trigger, the\nvalue of LAST_INSERT_ID() changes the same way as for statements executed\noutside the body of these kinds of objects. The effect of a stored routine or\ntrigger upon the value of LAST_INSERT_ID() that is seen by following\nstatements depends on the kind of routine:\n\n* If a stored procedure executes statements that change the value of\nLAST_INSERT_ID(), the new value will be seen by statements that follow the\nprocedure call.\n\n* For stored functions and triggers that change the value, the value is\nrestored when the function or trigger ends, so following statements will not\nsee a changed value.\n\nExamples\n--------\n\nCREATE TABLE t (\n id INTEGER UNSIGNED AUTO_INCREMENT PRIMARY KEY,\n f VARCHAR(1))\nENGINE = InnoDB;\n\nINSERT INTO t(f) VALUES(\'a\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 1 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'b\');\n\nINSERT INTO t(f) VALUES(\'c\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 3 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'d\'),(\'e\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 4 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 12 |\n+------------------+\n\nINSERT INTO t(f) VALUES(\'f\');\n\nSELECT LAST_INSERT_ID();\n+------------------+\n| LAST_INSERT_ID() |\n+------------------+\n| 6 |\n+------------------+\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n+----+------+\n\nSELECT LAST_INSERT_ID(12);\n+--------------------+\n| LAST_INSERT_ID(12) |\n+--------------------+\n| 12 |\n+--------------------+\n\nINSERT INTO t(f) VALUES(\'g\');\n\nSELECT * FROM t;\n+----+------+\n| id | f |\n+----+------+\n| 1 | a |\n| 2 | b |\n| 3 | c |\n| 4 | d |\n| 5 | e |\n| 6 | f |\n| 7 | g |\n+----+------+\n\nURL: https://mariadb.com/kb/en/last_insert_id/','','https://mariadb.com/kb/en/last_insert_id/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (203,17,'LAST_VALUE','Syntax\n------\n\nLAST_VALUE(expr,[expr,...])\n\nLAST_VALUE(expr) OVER (\n [ PARTITION BY partition_expression ]\n [ ORDER BY order_list ]\n)\n\nDescription\n-----------\n\nLAST_VALUE() evaluates all expressions and returns the last.\n\nThis is useful together with setting user variables to a value with\n@var:=expr, for example when you want to get data of rows updated/deleted\nwithout having to do two queries against the table.\n\nLAST_VALUE can be used as a window function.\n\nReturns NULL if no last value exists.\n\nExamples\n--------\n\nCREATE TABLE t1 (a int, b int);\nINSERT INTO t1 VALUES(1,10),(2,20);\nDELETE FROM t1 WHERE a=1 AND last_value(@a:=a,@b:=b,1);\nSELECT @a,@b;\n+------+------+\n| @a | @b |\n+------+------+\n| 1 | 10 |\n+------+------+\n\nAs a window function:\n\nCREATE TABLE t1 (\n pk int primary key,\n a int,\n b int,\n c char(10),\n d decimal(10, 3),\n e real\n);\n\nINSERT INTO t1 VALUES\n( 1, 0, 1, \'one\', 0.1, 0.001),\n( 2, 0, 2, \'two\', 0.2, 0.002),\n( 3, 0, 3, \'three\', 0.3, 0.003),\n( 4, 1, 2, \'three\', 0.4, 0.004),\n( 5, 1, 1, \'two\', 0.5, 0.005),\n( 6, 1, 1, \'one\', 0.6, 0.006),\n( 7, 2, NULL, \'n_one\', 0.5, 0.007),\n( 8, 2, 1, \'n_two\', NULL, 0.008),\n( 9, 2, 2, NULL, 0.7, 0.009),\n(10, 2, 0, \'n_four\', 0.8, 0.010),\n(11, 2, 10, NULL, 0.9, NULL);\n\nSELECT pk, FIRST_VALUE(pk) OVER (ORDER BY pk) AS first_asc,\n LAST_VALUE(pk) OVER (ORDER BY pk) AS last_asc,\n FIRST_VALUE(pk) OVER (ORDER BY pk DESC) AS first_desc,\n LAST_VALUE(pk) OVER (ORDER BY pk DESC) AS last_desc\nFROM t1\nORDER BY pk DESC;\n\n+----+-----------+----------+------------+-----------+\n| pk | first_asc | last_asc | first_desc | last_desc |\n+----+-----------+----------+------------+-----------+\n| 11 | 1 | 11 | 11 | 11 |\n| 10 | 1 | 10 | 11 | 10 |\n| 9 | 1 | 9 | 11 | 9 |\n| 8 | 1 | 8 | 11 | 8 |\n| 7 | 1 | 7 | 11 | 7 |\n| 6 | 1 | 6 | 11 | 6 |\n| 5 | 1 | 5 | 11 | 5 |\n| 4 | 1 | 4 | 11 | 4 |\n| 3 | 1 | 3 | 11 | 3 |\n| 2 | 1 | 2 | 11 | 2 |\n| 1 | 1 | 1 | 11 | 1 |\n+----+-----------+----------+------------+-----------+\n\nCREATE OR REPLACE TABLE t1 (i int);\nINSERT INTO t1 VALUES (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);\n\nSELECT i,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nf_1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN CURRENT ROW and 1 FOLLOWING) AS\nl_1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING) AS\nf_1p1f,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 2 PRECEDING AND 1 PRECEDING) AS\nf_2p1p,\n FIRST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f,\n LAST_VALUE(i) OVER (ORDER BY i ROWS BETWEEN 1 FOLLOWING AND 2 FOLLOWING) AS\nf_1f2f\nFROM t1;\n\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| i | f_1f | l_1f | f_1p1f | f_1p1f | f_2p1p | f_2p1p | f_1f2f | f_1f2f |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n| 1 | 1 | 2 | 1 | 2 | NULL | NULL | 2 | 3 |\n| 2 | 2 | 3 | 1 | 3 | 1 | 1 | 3 | 4 |\n| 3 | 3 | 4 | 2 | 4 | 1 | 2 | 4 | 5 |\n| 4 | 4 | 5 | 3 | 5 | 2 | 3 | 5 | 6 |\n| 5 | 5 | 6 | 4 | 6 | 3 | 4 | 6 | 7 |\n| 6 | 6 | 7 | 5 | 7 | 4 | 5 | 7 | 8 |\n| 7 | 7 | 8 | 6 | 8 | 5 | 6 | 8 | 9 |\n| 8 | 8 | 9 | 7 | 9 | 6 | 7 | 9 | 10 |\n| 9 | 9 | 10 | 8 | 10 | 7 | 8 | 10 | 10 |\n| 10 | 10 | 10 | 9 | 10 | 8 | 9 | NULL | NULL |\n+------+------+------+--------+--------+--------+--------+--------+--------+\n\nURL: https://mariadb.com/kb/en/last_value/','','https://mariadb.com/kb/en/last_value/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (204,17,'PROCEDURE ANALYSE','Syntax\n------\n\nanalyse([max_elements[,max_memory]])\n\nDescription\n-----------\n\nThis procedure is defined in the sql/sql_analyse.cc file. It examines the\nresult from a query and returns an analysis of the results that suggests\noptimal data types for each column. To obtain this analysis, append PROCEDURE\nANALYSE to the end of a SELECT statement:\n\nSELECT ... FROM ... WHERE ... PROCEDURE ANALYSE([max_elements,[max_memory]])\n\nFor example:\n\nSELECT col1, col2 FROM table1 PROCEDURE ANALYSE(10, 2000);\n\nThe results show some statistics for the values returned by the query, and\npropose an optimal data type for the columns. This can be helpful for checking\nyour existing tables, or after importing new data. You may need to try\ndifferent settings for the arguments so that PROCEDURE ANALYSE() does not\nsuggest the ENUM data type when it is not appropriate.\n\nThe arguments are optional and are used as follows:\n\n* max_elements (default 256) is the maximum number of distinct values that\nanalyse notices per column. This is used by analyse to check whether the\noptimal data type should be of type ENUM; if there are more than max_elements\ndistinct values, then ENUM is not a suggested type.\n* max_memory (default 8192) is the maximum amount of memory that analyse\nshould allocate per column while trying to find all distinct values.\n\nURL: https://mariadb.com/kb/en/procedure-analyse/','','https://mariadb.com/kb/en/procedure-analyse/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (205,17,'ROWNUM','MariaDB starting with 10.6.1\n----------------------------\nFrom MariaDB 10.6.1, the ROWNUM() function is supported.\n\nSyntax\n------\n\nROWNUM()\n\nIn Oracle mode one can just use ROWNUM, without the parentheses.\n\nDescription\n-----------\n\nROWNUM() returns the current number of accepted rows in the current context.\nIt main purpose is to emulate the ROWNUM pseudo column in Oracle. For MariaDB\nnative applications, we recommend the usage of LIMIT, as it is easier to use\nand gives more predictable results than the usage of ROWNUM().\n\nThe main difference between using LIMIT and ROWNUM() to limit the rows in the\nresult is that LIMIT works on the result set while ROWNUM works on the number\nof accepted rows (before any ORDER or GROUP BY clauses).\n\nThe following queries will return the same results:\n\nSELECT * from t1 LIMIT 10;\nSELECT * from t1 WHERE ROWNUM() <= 10;\n\nWhile the following may return different results based on in which orders the\nrows are found:\n\nSELECT * from t1 ORDER BY a LIMIT 10;\nSELECT * from t1 ORDER BY a WHERE ROWNUM() <= 10;\n\nThe recommended way to use ROWNUM to limit the number of returned rows and get\npredictable results is to have the query in a subquery and test for ROWNUM()\nin the outer query:\n\nSELECT * FROM (select * from t1 ORDER BY a) WHERE ROWNUM() <= 10;\n\nROWNUM() can be used in the following contexts:\n\n* SELECT\n* INSERT\n* UPDATE\n* DELETE\n* LOAD DATA INFILE\n\nUsed in other contexts, ROWNUM() will return 0.\n\nExamples\n--------\n\nINSERT INTO t1 VALUES (1,ROWNUM()),(2,ROWNUM()),(3,ROWNUM());\n\nINSERT INTO t1 VALUES (1),(2) returning a, ROWNUM();\n\nUPDATE t1 SET row_num_column=ROWNUM();\n\nDELETE FROM t1 WHERE a < 10 AND ROWNUM() < 2;\n\nLOAD DATA INFILE \'filename\' into table t1 fields terminated by \',\' \n lines terminated by \"\\r\\n\" (a,b) set c=ROWNUM();\n\nOptimizations\n-------------\n\nIn many cases where ROWNUM() is used, MariaDB will use the same optimizations\nit uses with LIMIT.\n\nLIMIT optimization is possible when using ROWNUM in the following manner:\n\n* When one is in a top level WHERE clause comparing ROWNUM() with a numerical\nconstant using any of the following expressions:\nROWNUM() < number\nROWNUM() <= number\nROWNUM() = 1\nROWNUM() can be also be the right argument to the comparison function.\n\nIn the above cases, LIMIT optimization can be done in the following cases:\n\n* For the current sub query when the ROWNUM comparison is done on the top\nlevel:\n\nSELECT * from t1 WHERE ROWNUM() <= 2 AND t1.a > 0\n\n* For an inner sub query, when the upper level has only a ROWNUM() comparison\nin the WHERE clause:\n\nSELECT * from (select * from t1) as t WHERE ROWNUM() <= 2\n\nOther Changes Related to ROWNUM\n-------------------------------\n\nWhen ROWNUM() is used anywhere in a query, the optimization to ignore ORDER BY\nin subqueries are disabled.\n\nThis was done to get the following common Oracle query to work as expected:\n\nselect * from (select * from t1 order by a desc) as t where rownum() <= 2;\n\nBy default MariaDB ignores any ORDER BY in subqueries both because the SQL\nstandard defines results sets in subqueries to be un-ordered and because of\nperformance reasons (especially when using views in subqueries). See MDEV-3926\n\"Wrong result with GROUP BY ... WITH ROLLUP\" for a discussion of this topic.\n\nOther Considerations\n--------------------\n\nWhile MariaDB tries to emulate Oracle\'s usage of ROWNUM() as closely as\npossible, there are cases where the result is different:\n\n* When the optimizer finds rows in a different order (because of different\nstorage methods or optimization). This may also happen in Oracle if one adds\nor deletes an index, in which case the rows may be found in a different order.\n\nNote that usage of ROWNUM() in functions or stored procedures will use their\nown context, not the caller\'s context.\n\nURL: https://mariadb.com/kb/en/rownum/','','https://mariadb.com/kb/en/rownum/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (206,17,'ROW_COUNT','Syntax\n------\n\nROW_COUNT()\n\nDescription\n-----------\n\nROW_COUNT() returns the number of rows updated, inserted or deleted by the\npreceding statement. This is the same as the row count that the mysql client\ndisplays and the value from the mysql_affected_rows() C API function.\n\nGenerally:\n\n* For statements which return a result set (such as SELECT, SHOW, DESC or\nHELP), returns -1, even when the result set is empty. This is also true for\nadministrative statements, such as OPTIMIZE.\n* For DML statements other than SELECT and for ALTER TABLE, returns the number\nof affected rows.\n* For DDL statements (including TRUNCATE) and for other statements which don\'t\nreturn any result set (such as USE, DO, SIGNAL or DEALLOCATE PREPARE), returns\n0.\n\nFor UPDATE, affected rows is by default the number of rows that were actually\nchanged. If the CLIENT_FOUND_ROWS flag to mysql_real_connect() is specified\nwhen connecting to mysqld, affected rows is instead the number of rows matched\nby the WHERE clause.\n\nFor REPLACE, deleted rows are also counted. So, if REPLACE deletes a row and\nadds a new row, ROW_COUNT() returns 2.\n\nFor INSERT ... ON DUPLICATE KEY, updated rows are counted twice. So, if INSERT\nadds a new rows and modifies another row, ROW_COUNT() returns 3.\n\nROW_COUNT() does not take into account rows that are not directly\ndeleted/updated by the last statement. This means that rows deleted by foreign\nkeys or triggers are not counted.\n\nWarning: You can use ROW_COUNT() with prepared statements, but you need to\ncall it after EXECUTE, not after DEALLOCATE PREPARE, because the row count for\nallocate prepare is always 0.\n\nWarning: When used after a CALL statement, this function returns the number of\nrows affected by the last statement in the procedure, not by the whole\nprocedure.\n\nWarning: After INSERT DELAYED, ROW_COUNT() returns the number of the rows you\ntried to insert, not the number of the successful writes.\n\nThis information can also be found in the diagnostics area.\n\nStatements using the ROW_COUNT() function are not safe for replication.\n\nExamples\n--------\n\nCREATE TABLE t (A INT);\n\nINSERT INTO t VALUES(1),(2),(3);\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nDELETE FROM t WHERE A IN(1,2);\n\nSELECT ROW_COUNT(); \n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 2 |\n+-------------+\n\nExample with prepared statements:\n\nSET @q = \'INSERT INTO t VALUES(1),(2),(3);\';\n\nPREPARE stmt FROM @q;\n\nEXECUTE stmt;\nQuery OK, 3 rows affected (0.39 sec)\nRecords: 3 Duplicates: 0 Warnings: 0\n\nSELECT ROW_COUNT();\n+-------------+\n| ROW_COUNT() |\n+-------------+\n| 3 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/row_count/','','https://mariadb.com/kb/en/row_count/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (207,17,'SCHEMA','Syntax\n------\n\nSCHEMA()\n\nDescription\n-----------\n\nThis function is a synonym for DATABASE().\n\nURL: https://mariadb.com/kb/en/schema/','','https://mariadb.com/kb/en/schema/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (208,17,'SESSION_USER','Syntax\n------\n\nSESSION_USER()\n\nDescription\n-----------\n\nSESSION_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/session_user/','','https://mariadb.com/kb/en/session_user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (209,17,'SYSTEM_USER','Syntax\n------\n\nSYSTEM_USER()\n\nDescription\n-----------\n\nSYSTEM_USER() is a synonym for USER().\n\nURL: https://mariadb.com/kb/en/system_user/','','https://mariadb.com/kb/en/system_user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (210,17,'USER','Syntax\n------\n\nUSER()\n\nDescription\n-----------\n\nReturns the current MariaDB user name and host name, given when authenticating\nto MariaDB, as a string in the utf8 character set.\n\nNote that the value of USER() may differ from the value of CURRENT_USER(),\nwhich is the user used to authenticate the current client. CURRENT_ROLE()\nreturns the current active role.\n\nSYSTEM_USER() and SESSION_USER are synonyms for USER().\n\nStatements using the USER() function or one of its synonyms are not safe for\nstatement level replication.\n\nExamples\n--------\n\nshell> mysql --user=\"anonymous\"\n\nSELECT USER(),CURRENT_USER();\n+---------------------+----------------+\n| USER() | CURRENT_USER() |\n+---------------------+----------------+\n| anonymous@localhost | @localhost |\n+---------------------+----------------+\n\nTo select only the IP address, use SUBSTRING_INDEX(),\n\nSELECT SUBSTRING_INDEX(USER(), \'@\', -1);\n+----------------------------------+\n| SUBSTRING_INDEX(USER(), \'@\', -1) |\n+----------------------------------+\n| 192.168.0.101 |\n+----------------------------------+\n\nURL: https://mariadb.com/kb/en/user/','','https://mariadb.com/kb/en/user/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (211,17,'VERSION','Syntax\n------\n\nVERSION()\n\nDescription\n-----------\n\nReturns a string that indicates the MariaDB server version. The string uses\nthe utf8 character set.\n\nExamples\n--------\n\nSELECT VERSION();\n+----------------+\n| VERSION() |\n+----------------+\n| 10.4.7-MariaDB |\n+----------------+\n\nThe VERSION() string may have one or more of the following suffixes:\n\n+---------------------------+------------------------------------------------+\n| Suffix | Description |\n+---------------------------+------------------------------------------------+\n| -embedded | The server is an embedded server (libmysqld). |\n+---------------------------+------------------------------------------------+\n| -log | General logging, slow logging or binary |\n| | (replication) logging is enabled. |\n+---------------------------+------------------------------------------------+\n| -debug | The server is compiled for debugging. |\n+---------------------------+------------------------------------------------+\n| -valgrind | The server is compiled to be instrumented |\n| | with valgrind. |\n+---------------------------+------------------------------------------------+\n\nChanging the Version String\n---------------------------\n\nSome old legacy code may break because they are parsing the VERSION string and\nexpecting a MySQL string or a simple version string like Joomla til API17, see\nMDEV-7780.\n\nFrom MariaDB 10.2, one can fool these applications by setting the version\nstring from the command line or the my.cnf files with --version=....\n\nURL: https://mariadb.com/kb/en/version/','','https://mariadb.com/kb/en/version/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (212,18,'Assignment Operator (:=)','Syntax\n------\n\nvar_name := expr\n\nDescription\n-----------\n\nAssignment operator for assigning a value. The value on the right is assigned\nto the variable on left.\n\nUnlike the = operator, := can always be used to assign a value to a variable.\n\nThis operator works with both user-defined variables and local variables.\n\nWhen assigning the same value to several variables, LAST_VALUE() can be useful.\n\nExamples\n--------\n\nSELECT @x := 10;\n+----------+\n| @x := 10 |\n+----------+\n| 10 |\n+----------+\n\nSELECT @x, @y := @x;\n+------+----------+\n| @x | @y := @x |\n+------+----------+\n| 10 | 10 |\n+------+----------+\n\nURL: https://mariadb.com/kb/en/assignment-operator/','','https://mariadb.com/kb/en/assignment-operator/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (213,18,'Assignment Operator (=)','Syntax\n------\n\nidentifier = expr\n\nDescription\n-----------\n\nThe equal sign is used as both an assignment operator in certain contexts, and\nas a comparison operator. When used as assignment operator, the value on the\nright is assigned to the variable (or column, in some contexts) on the left.\n\nSince its use can be ambiguous, unlike the := assignment operator, the =\nassignment operator cannot be used in all contexts, and is only valid as part\nof a SET statement, or the SET clause of an UPDATE statement\n\nThis operator works with both user-defined variables and local variables.\n\nExamples\n--------\n\nUPDATE table_name SET x = 2 WHERE x > 100;\n\nSET @x = 1, @y := 2;\n\nURL: https://mariadb.com/kb/en/assignment-operators-assignment-operator/','','https://mariadb.com/kb/en/assignment-operators-assignment-operator/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (214,19,'Not Equal Operator','Syntax\n------\n\n<>, !=\n\nDescription\n-----------\n\nNot equal operator. Evaluates both SQL expressions and returns 1 if they are\nnot equal and 0 if they are equal, or NULL if either expression is NULL. If\nthe expressions return different data types, (for instance, a number and a\nstring), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) != (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a != t2.x) OR (t1.b != t2.y)\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT \'.01\' <> \'0.01\';\n+-----------------+\n| \'.01\' <> \'0.01\' |\n+-----------------+\n| 1 |\n+-----------------+\n\nSELECT .01 <> \'0.01\';\n+---------------+\n| .01 <> \'0.01\' |\n+---------------+\n| 0 |\n+---------------+\n\nSELECT \'zapp\' <> \'zappp\';\n+-------------------+\n| \'zapp\' <> \'zappp\' |\n+-------------------+\n| 1 |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/not-equal/','','https://mariadb.com/kb/en/not-equal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (215,19,'<','Syntax\n------\n\n<\n\nDescription\n-----------\n\nLess than operator. Evaluates both SQL expressions and returns 1 if the left\nvalue is less than the right value and 0 if it is not, or NULL if either\nexpression is NULL. If the expressions return different data types, (for\ninstance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) < (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b < t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 < 2;\n+-------+\n| 2 < 2 |\n+-------+\n| 0 |\n+-------+\n\nType conversion:\n\nSELECT 3<\'4\';\n+-------+\n| 3<\'4\' |\n+-------+\n| 1 |\n+-------+\n\nCase insensitivity - see Character Sets and Collations:\n\nSELECT \'a\'<\'A\';\n+---------+\n| \'a\'<\'A\' |\n+---------+\n| 0 |\n+---------+\n\nURL: https://mariadb.com/kb/en/less-than/','','https://mariadb.com/kb/en/less-than/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (216,19,'<=','Syntax\n------\n\n<=\n\nDescription\n-----------\n\nLess than or equal operator. Evaluates both SQL expressions and returns 1 if\nthe left value is less than or equal to the right value and 0 if it is not, or\nNULL if either expression is NULL. If the expressions return different data\ntypes, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a < t2.x) OR ((t1.a = t2.x) AND (t1.b <= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 0.1 <= 2;\n+----------+\n| 0.1 <= 2 |\n+----------+\n| 1 |\n+----------+\n\nSELECT \'a\'<=\'A\';\n+----------+\n| \'a\'<=\'A\' |\n+----------+\n| 1 |\n+----------+\n\nURL: https://mariadb.com/kb/en/less-than-or-equal/','','https://mariadb.com/kb/en/less-than-or-equal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (217,19,'<=>','Syntax\n------\n\n<=>\n\nDescription\n-----------\n\nNULL-safe equal operator. It performs an equality comparison like the =\noperator, but returns 1 rather than NULL if both operands are NULL, and 0\nrather than NULL if one operand is NULL.\n\na <=> b is equivalent to a = b OR (a IS NULL AND b IS NULL).\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) <=> (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a <=> t2.x) AND (t1.b <=> t2.y)\nFROM t1 INNER JOIN t2;\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 <=> 1, NULL <=> NULL, 1 <=> NULL;\n+---------+---------------+------------+\n| 1 <=> 1 | NULL <=> NULL | 1 <=> NULL |\n+---------+---------------+------------+\n| 1 | 1 | 0 |\n+---------+---------------+------------+\n\nSELECT 1 = 1, NULL = NULL, 1 = NULL;\n+-------+-------------+----------+\n| 1 = 1 | NULL = NULL | 1 = NULL |\n+-------+-------------+----------+\n| 1 | NULL | NULL |\n+-------+-------------+----------+\n\nURL: https://mariadb.com/kb/en/null-safe-equal/','','https://mariadb.com/kb/en/null-safe-equal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (218,19,'=','Syntax\n------\n\nleft_expr = right_expr\n\nDescription\n-----------\n\nEqual operator. Evaluates both SQL expressions and returns 1 if they are\nequal, 0 if they are not equal, or NULL if either expression is NULL. If the\nexpressions return different data types (for example, a number and a string),\na type conversion is performed.\n\nWhen used in row comparisons these two queries are synonymous and return the\nsame results:\n\nSELECT (t1.a, t1.b) = (t2.x, t2.y) FROM t1 INNER JOIN t2;\n\nSELECT (t1.a = t2.x) AND (t1.b = t2.y) FROM t1 INNER JOIN t2;\n\nTo perform a NULL-safe comparison, use the <=> operator.\n\n= can also be used as an assignment operator.\n\nExamples\n--------\n\nSELECT 1 = 0;\n+-------+\n| 1 = 0 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'0\' = 0;\n+---------+\n| \'0\' = 0 |\n+---------+\n| 1 |\n+---------+\n\nSELECT \'0.0\' = 0;\n+-----------+\n| \'0.0\' = 0 |\n+-----------+\n| 1 |\n+-----------+\n\nSELECT \'0.01\' = 0;\n+------------+\n| \'0.01\' = 0 |\n+------------+\n| 0 |\n+------------+\n\nSELECT \'.01\' = 0.01;\n+--------------+\n| \'.01\' = 0.01 |\n+--------------+\n| 1 |\n+--------------+\n\nSELECT (5 * 2) = CONCAT(\'1\', \'0\');\n+----------------------------+\n| (5 * 2) = CONCAT(\'1\', \'0\') |\n+----------------------------+\n| 1 |\n+----------------------------+\n\nSELECT 1 = NULL;\n+----------+\n| 1 = NULL |\n+----------+\n| NULL |\n+----------+\n\nSELECT NULL = NULL;\n+-------------+\n| NULL = NULL |\n+-------------+\n| NULL |\n+-------------+\n\nURL: https://mariadb.com/kb/en/equal/','','https://mariadb.com/kb/en/equal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (219,19,'>','Syntax\n------\n\n>\n\nDescription\n-----------\n\nGreater than operator. Evaluates both SQL expressions and returns 1 if the\nleft value is greater than the right value and 0 if it is not, or NULL if\neither expression is NULL. If the expressions return different data types,\n(for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) > (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b > t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 > 2;\n+-------+\n| 2 > 2 |\n+-------+\n| 0 |\n+-------+\n\nSELECT \'b\' > \'a\';\n+-----------+\n| \'b\' > \'a\' |\n+-----------+\n| 1 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/greater-than/','','https://mariadb.com/kb/en/greater-than/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (220,19,'>=','Syntax\n------\n\n>=\n\nDescription\n-----------\n\nGreater than or equal operator. Evaluates both SQL expressions and returns 1\nif the left value is greater than or equal to the right value and 0 if it is\nnot, or NULL if either expression is NULL. If the expressions return different\ndata types, (for instance, a number and a string), performs type conversion.\n\nWhen used in row comparisons these two queries return the same results:\n\nSELECT (t1.a, t1.b) >= (t2.x, t2.y) \nFROM t1 INNER JOIN t2;\n\nSELECT (t1.a > t2.x) OR ((t1.a = t2.x) AND (t1.b >= t2.y))\nFROM t1 INNER JOIN t2;\n\nExamples\n--------\n\nSELECT 2 >= 2;\n+--------+\n| 2 >= 2 |\n+--------+\n| 1 |\n+--------+\n\nSELECT \'A\' >= \'a\';\n+------------+\n| \'A\' >= \'a\' |\n+------------+\n| 1 |\n+------------+\n\nURL: https://mariadb.com/kb/en/greater-than-or-equal/','','https://mariadb.com/kb/en/greater-than-or-equal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (221,19,'BETWEEN AND','Syntax\n------\n\nexpr BETWEEN min AND max\n\nDescription\n-----------\n\nIf expr is greater than or equal to min and expr is less than or equal to max,\nBETWEEN returns 1, otherwise it returns 0. This is equivalent to the\nexpression (min <= expr AND expr <= max) if all the arguments are of the same\ntype. Otherwise type conversion takes place according to the rules described\nat Type Conversion, but applied to all the three arguments.\n\nExamples\n--------\n\nSELECT 1 BETWEEN 2 AND 3;\n+-------------------+\n| 1 BETWEEN 2 AND 3 |\n+-------------------+\n| 0 |\n+-------------------+\n\nSELECT \'b\' BETWEEN \'a\' AND \'c\';\n+-------------------------+\n| \'b\' BETWEEN \'a\' AND \'c\' |\n+-------------------------+\n| 1 |\n+-------------------------+\n\nSELECT 2 BETWEEN 2 AND \'3\';\n+---------------------+\n| 2 BETWEEN 2 AND \'3\' |\n+---------------------+\n| 1 |\n+---------------------+\n\nSELECT 2 BETWEEN 2 AND \'x-3\';\n+-----------------------+\n| 2 BETWEEN 2 AND \'x-3\' |\n+-----------------------+\n| 0 |\n+-----------------------+\n1 row in set, 1 warning (0.00 sec)\n\nWarning (Code 1292): Truncated incorrect DOUBLE value: \'x-3\'\n\nNULL:\n\nSELECT 1 BETWEEN 1 AND NULL;\n+----------------------+\n| 1 BETWEEN 1 AND NULL |\n+----------------------+\n| NULL |\n+----------------------+\n\nDATE, DATETIME and TIMESTAMP examples. Omitting the time component compares\nagainst 00:00, so later times on the same date are not returned:\n\nCREATE TABLE `x` (\n a date ,\n b datetime,\n c timestamp\n)\n\nINSERT INTO x VALUES \n (\'2018-11-11\', \'2018-11-11 05:15\', \'2018-11-11 05:15\'), \n (\'2018-11-12\', \'2018-11-12 05:15\', \'2018-11-12 05:15\');\n\nSELECT * FROM x WHERE a BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n| 2018-11-12 | 2018-11-12 05:15:00 | 2018-11-12 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE b BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nSELECT * FROM x WHERE c BETWEEN \'2018-11-11\' AND \'2018-11-12\';\n+------------+---------------------+---------------------+\n| a | b | c |\n+------------+---------------------+---------------------+\n| 2018-11-11 | 2018-11-11 05:15:00 | 2018-11-11 05:15:00 |\n+------------+---------------------+---------------------+\n\nURL: https://mariadb.com/kb/en/between-and/','','https://mariadb.com/kb/en/between-and/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (222,19,'COALESCE','Syntax\n------\n\nCOALESCE(value,...)\n\nDescription\n-----------\n\nReturns the first non-NULL value in the list, or NULL if there are no non-NULL\nvalues. At least one parameter must be passed.\n\nThe function is useful when substituting a default value for null values when\ndisplaying data.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT COALESCE(NULL,1);\n+------------------+\n| COALESCE(NULL,1) |\n+------------------+\n| 1 |\n+------------------+\n\nSELECT COALESCE(NULL,NULL,NULL);\n+--------------------------+\n| COALESCE(NULL,NULL,NULL) |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nWhen two arguments are given, COALESCE() is the same as IFNULL():\n\nSET @a=NULL, @b=1;\n\nSELECT COALESCE(@a, @b), IFNULL(@a, @b);\n+------------------+----------------+\n| COALESCE(@a, @b) | IFNULL(@a, @b) |\n+------------------+----------------+\n| 1 | 1 |\n+------------------+----------------+\n\nHex type confusion:\n\nCREATE TABLE t1 (a INT, b VARCHAR(10));\nINSERT INTO t1 VALUES (0x31, 0x61),(COALESCE(0x31), COALESCE(0x61));\n\nSELECT * FROM t1;\n+------+------+\n| a | b |\n+------+------+\n| 49 | a |\n| 1 | a |\n+------+------+\n\nThe reason for the differing results above is that when 0x31 is inserted\ndirectly to the column, it\'s treated as a number (see Hexadecimal Literals),\nwhile when 0x31 is passed to COALESCE(), it\'s treated as a string, because:\n\n* HEX values have a string data type by default.\n* COALESCE() has the same data type as the argument.\n\nSubstituting zero for NULL (in this case when the aggregate function returns\nNULL after finding no rows):\n\nSELECT SUM(score) FROM student;\n+------------+\n| SUM(score) |\n+------------+\n| NULL |\n+------------+\n\nSELECT COALESCE(SUM(score),0) FROM student;\n+------------------------+\n| COALESCE(SUM(score),0) |\n+------------------------+\n| 0 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/coalesce/','','https://mariadb.com/kb/en/coalesce/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (223,19,'GREATEST','Syntax\n------\n\nGREATEST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the largest (maximum-valued) argument. The\narguments are compared using the same rules as for LEAST().\n\nExamples\n--------\n\nSELECT GREATEST(2,0);\n+---------------+\n| GREATEST(2,0) |\n+---------------+\n| 2 |\n+---------------+\n\nSELECT GREATEST(34.0,3.0,5.0,767.0);\n+------------------------------+\n| GREATEST(34.0,3.0,5.0,767.0) |\n+------------------------------+\n| 767.0 |\n+------------------------------+\n\nSELECT GREATEST(\'B\',\'A\',\'C\');\n+-----------------------+\n| GREATEST(\'B\',\'A\',\'C\') |\n+-----------------------+\n| C |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/greatest/','','https://mariadb.com/kb/en/greatest/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (224,19,'IN','Syntax\n------\n\nexpr IN (value,...)\n\nDescription\n-----------\n\nReturns 1 if expr is equal to any of the values in the IN list, else returns\n0. If all values are constants, they are evaluated according to the type of\nexpr and sorted. The search for the item then is done using a binary search.\nThis means IN is very quick if the IN value list consists entirely of\nconstants. Otherwise, type conversion takes place according to the rules\ndescribed at Type Conversion, but applied to all the arguments.\n\nIf expr is NULL, IN always returns NULL. If at least one of the values in the\nlist is NULL, and one of the comparisons is true, the result is 1. If at least\none of the values in the list is NULL and none of the comparisons is true, the\nresult is NULL.\n\nExamples\n--------\n\nSELECT 2 IN (0,3,5,7);\n+----------------+\n| 2 IN (0,3,5,7) |\n+----------------+\n| 0 |\n+----------------+\n\nSELECT \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\');\n+----------------------------------+\n| \'wefwf\' IN (\'wee\',\'wefwf\',\'weg\') |\n+----------------------------------+\n| 1 |\n+----------------------------------+\n\nType conversion:\n\nSELECT 1 IN (\'1\', \'2\', \'3\');\n+----------------------+\n| 1 IN (\'1\', \'2\', \'3\') |\n+----------------------+\n| 1 |\n+----------------------+\n\nSELECT NULL IN (1, 2, 3);\n+-------------------+\n| NULL IN (1, 2, 3) |\n+-------------------+\n| NULL |\n+-------------------+\n\nSELECT 1 IN (1, 2, NULL);\n+-------------------+\n| 1 IN (1, 2, NULL) |\n+-------------------+\n| 1 |\n+-------------------+\n\nSELECT 5 IN (1, 2, NULL);\n+-------------------+\n| 5 IN (1, 2, NULL) |\n+-------------------+\n| NULL |\n+-------------------+\n\nURL: https://mariadb.com/kb/en/in/','','https://mariadb.com/kb/en/in/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (225,19,'INTERVAL','Syntax\n------\n\nINTERVAL(N,N1,N2,N3,...)\n\nDescription\n-----------\n\nReturns the index of the last argument that is less than the first argument or\nis NULL.\n\nReturns 0 if N < N1, 1 if N < N2, 2 if N < N3 and so on or -1 if N is NULL.\nAll arguments are treated as integers. It is required that N1 < N2 < N3 < ...\n< Nn for this function to work correctly. This is because a fast binary search\nis used.\n\nExamples\n--------\n\nSELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);\n+--------------------------------------+\n| INTERVAL(23, 1, 15, 17, 30, 44, 200) |\n+--------------------------------------+\n| 3 |\n+--------------------------------------+\n\nSELECT INTERVAL(10, 1, 10, 100, 1000);\n+--------------------------------+\n| INTERVAL(10, 1, 10, 100, 1000) |\n+--------------------------------+\n| 2 |\n+--------------------------------+\n\nSELECT INTERVAL(22, 23, 30, 44, 200);\n+-------------------------------+\n| INTERVAL(22, 23, 30, 44, 200) |\n+-------------------------------+\n| 0 |\n+-------------------------------+\n\nSELECT INTERVAL(10, 2, NULL);\n+-----------------------+\n| INTERVAL(10, 2, NULL) |\n+-----------------------+\n| 2 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/interval/','','https://mariadb.com/kb/en/interval/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (226,19,'IS','Syntax\n------\n\nIS boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nThere is an important difference between using IS TRUE or comparing a value\nwith TRUE using =. When using =, only 1 equals to TRUE. But when using IS\nTRUE, all values which are logically true (like a number > 1) return TRUE.\n\nExamples\n--------\n\nSELECT 1 IS TRUE, 0 IS FALSE, NULL IS UNKNOWN;\n+-----------+------------+-----------------+\n| 1 IS TRUE | 0 IS FALSE | NULL IS UNKNOWN |\n+-----------+------------+-----------------+\n| 1 | 1 | 1 |\n+-----------+------------+-----------------+\n\nDifference between = and IS TRUE:\n\nSELECT 2 = TRUE, 2 IS TRUE;\n+----------+-----------+\n| 2 = TRUE | 2 IS TRUE |\n+----------+-----------+\n| 0 | 1 |\n+----------+-----------+\n\nURL: https://mariadb.com/kb/en/is/','','https://mariadb.com/kb/en/is/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (227,19,'IS NOT','Syntax\n------\n\nIS NOT boolean_value\n\nDescription\n-----------\n\nTests a value against a boolean value, where boolean_value can be TRUE, FALSE,\nor UNKNOWN.\n\nExamples\n--------\n\nSELECT 1 IS NOT UNKNOWN, 0 IS NOT UNKNOWN, NULL IS NOT UNKNOWN;\n+------------------+------------------+---------------------+\n| 1 IS NOT UNKNOWN | 0 IS NOT UNKNOWN | NULL IS NOT UNKNOWN |\n+------------------+------------------+---------------------+\n| 1 | 1 | 0 |\n+------------------+------------------+---------------------+\n\nSELECT NULL IS NOT TRUE, NULL IS NOT FALSE;\n+------------------+-------------------+\n| NULL IS NOT TRUE | NULL IS NOT FALSE |\n+------------------+-------------------+\n| 1 | 1 |\n+------------------+-------------------+\n\nURL: https://mariadb.com/kb/en/is-not/','','https://mariadb.com/kb/en/is-not/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (228,19,'IS NOT NULL','Syntax\n------\n\nIS NOT NULL\n\nDescription\n-----------\n\nTests whether a value is not NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NOT NULL, 0 IS NOT NULL, NULL IS NOT NULL;\n+---------------+---------------+------------------+\n| 1 IS NOT NULL | 0 IS NOT NULL | NULL IS NOT NULL |\n+---------------+---------------+------------------+\n| 1 | 1 | 0 |\n+---------------+---------------+------------------+\n\nURL: https://mariadb.com/kb/en/is-not-null/','','https://mariadb.com/kb/en/is-not-null/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (229,19,'IS NULL','Syntax\n------\n\nIS NULL\n\nDescription\n-----------\n\nTests whether a value is NULL. See also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT 1 IS NULL, 0 IS NULL, NULL IS NULL;\n+-----------+-----------+--------------+\n| 1 IS NULL | 0 IS NULL | NULL IS NULL |\n+-----------+-----------+--------------+\n| 0 | 0 | 1 |\n+-----------+-----------+--------------+\n\nCompatibility\n-------------\n\nSome ODBC applications use the syntax auto_increment_field IS NOT NULL to find\nthe latest row that was inserted with an autogenerated key value. If your\napplications need this, you can set the sql_auto_is_null variable to 1.\n\nSET @@sql_auto_is_null=1;\nCREATE TABLE t1 (auto_increment_column INT NOT NULL AUTO_INCREMENT PRIMARY\nKEY);\nINSERT INTO t1 VALUES (NULL);\nSELECT * FROM t1 WHERE auto_increment_column IS NULL;\n\n+-----------------------+\n| auto_increment_column |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/is-null/','','https://mariadb.com/kb/en/is-null/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (230,19,'ISNULL','Syntax\n------\n\nISNULL(expr)\n\nDescription\n-----------\n\nIf expr is NULL, ISNULL() returns 1, otherwise it returns 0.\n\nSee also NULL Values in MariaDB.\n\nExamples\n--------\n\nSELECT ISNULL(1+1);\n+-------------+\n| ISNULL(1+1) |\n+-------------+\n| 0 |\n+-------------+\n\nSELECT ISNULL(1/0);\n+-------------+\n| ISNULL(1/0) |\n+-------------+\n| 1 |\n+-------------+\n\nURL: https://mariadb.com/kb/en/isnull/','','https://mariadb.com/kb/en/isnull/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (231,19,'LEAST','Syntax\n------\n\nLEAST(value1,value2,...)\n\nDescription\n-----------\n\nWith two or more arguments, returns the smallest (minimum-valued) argument.\nThe arguments are compared using the following rules:\n\n* If the return value is used in an INTEGER context or all arguments are\ninteger-valued, they are compared as integers.\n* If the return value is used in a REAL context or all arguments are\nreal-valued, they are compared as reals.\n* If any argument is a case-sensitive string, the arguments are compared as\ncase-sensitive strings.\n* In all other cases, the arguments are compared as case-insensitive strings.\n\nLEAST() returns NULL if any argument is NULL.\n\nExamples\n--------\n\nSELECT LEAST(2,0);\n+------------+\n| LEAST(2,0) |\n+------------+\n| 0 |\n+------------+\n\nSELECT LEAST(34.0,3.0,5.0,767.0);\n+---------------------------+\n| LEAST(34.0,3.0,5.0,767.0) |\n+---------------------------+\n| 3.0 |\n+---------------------------+\n\nSELECT LEAST(\'B\',\'A\',\'C\');\n+--------------------+\n| LEAST(\'B\',\'A\',\'C\') |\n+--------------------+\n| A |\n+--------------------+\n\nURL: https://mariadb.com/kb/en/least/','','https://mariadb.com/kb/en/least/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (232,19,'NOT BETWEEN','Syntax\n------\n\nexpr NOT BETWEEN min AND max\n\nDescription\n-----------\n\nThis is the same as NOT (expr BETWEEN min AND max).\n\nNote that the meaning of the alternative form NOT expr BETWEEN min AND max is\naffected by the HIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nExamples\n--------\n\nSELECT 1 NOT BETWEEN 2 AND 3;\n+-----------------------+\n| 1 NOT BETWEEN 2 AND 3 |\n+-----------------------+\n| 1 |\n+-----------------------+\n\nSELECT \'b\' NOT BETWEEN \'a\' AND \'c\';\n+-----------------------------+\n| \'b\' NOT BETWEEN \'a\' AND \'c\' |\n+-----------------------------+\n| 0 |\n+-----------------------------+\n\nNULL:\n\nSELECT 1 NOT BETWEEN 1 AND NULL;\n+--------------------------+\n| 1 NOT BETWEEN 1 AND NULL |\n+--------------------------+\n| NULL |\n+--------------------------+\n\nURL: https://mariadb.com/kb/en/not-between/','','https://mariadb.com/kb/en/not-between/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (233,19,'NOT IN','Syntax\n------\n\nexpr NOT IN (value,...)\n\nDescription\n-----------\n\nThis is the same as NOT (expr IN (value,...)).\n\nExamples\n--------\n\nSELECT 2 NOT IN (0,3,5,7);\n+--------------------+\n| 2 NOT IN (0,3,5,7) |\n+--------------------+\n| 1 |\n+--------------------+\n\nSELECT \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\');\n+--------------------------------------+\n| \'wefwf\' NOT IN (\'wee\',\'wefwf\',\'weg\') |\n+--------------------------------------+\n| 0 |\n+--------------------------------------+\n\nSELECT 1 NOT IN (\'1\', \'2\', \'3\');\n+--------------------------+\n| 1 NOT IN (\'1\', \'2\', \'3\') |\n+--------------------------+\n| 0 |\n+--------------------------+\n\nNULL:\n\nSELECT NULL NOT IN (1, 2, 3);\n+-----------------------+\n| NULL NOT IN (1, 2, 3) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nSELECT 1 NOT IN (1, 2, NULL);\n+-----------------------+\n| 1 NOT IN (1, 2, NULL) |\n+-----------------------+\n| 0 |\n+-----------------------+\n\nSELECT 5 NOT IN (1, 2, NULL);\n+-----------------------+\n| 5 NOT IN (1, 2, NULL) |\n+-----------------------+\n| NULL |\n+-----------------------+\n\nURL: https://mariadb.com/kb/en/not-in/','','https://mariadb.com/kb/en/not-in/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (234,20,'&','Syntax\n------\n\n&\n\nDescription\n-----------\n\nBitwise AND. Converts the values to binary and compares bits. Only if both the\ncorresponding bits are 1 is the resulting bit also 1.\n\nSee also bitwise OR.\n\nExamples\n--------\n\nSELECT 2&1;\n+-----+\n| 2&1 |\n+-----+\n| 0 |\n+-----+\n\nSELECT 3&1;\n+-----+\n| 3&1 |\n+-----+\n| 1 |\n+-----+\n\nSELECT 29 & 15;\n+---------+\n| 29 & 15 |\n+---------+\n| 13 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise_and/','','https://mariadb.com/kb/en/bitwise_and/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (235,20,'<<','Syntax\n------\n\nvalue1 << value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the left.\n\nExamples\n--------\n\nSELECT 1 << 2;\n+--------+\n| 1 << 2 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-left/','','https://mariadb.com/kb/en/shift-left/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (236,20,'>>','Syntax\n------\n\nvalue1 >> value2\n\nDescription\n-----------\n\nConverts a longlong (BIGINT) number (value1) to binary and shifts value2 units\nto the right.\n\nExamples\n--------\n\nSELECT 4 >> 2;\n+--------+\n| 4 >> 2 |\n+--------+\n| 1 |\n+--------+\n\nURL: https://mariadb.com/kb/en/shift-right/','','https://mariadb.com/kb/en/shift-right/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (237,20,'BIT_COUNT','Syntax\n------\n\nBIT_COUNT(N)\n\nDescription\n-----------\n\nReturns the number of bits that are set in the argument N.\n\nExamples\n--------\n\nSELECT BIT_COUNT(29), BIT_COUNT(b\'101010\');\n+---------------+----------------------+\n| BIT_COUNT(29) | BIT_COUNT(b\'101010\') |\n+---------------+----------------------+\n| 4 | 3 |\n+---------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bit_count/','','https://mariadb.com/kb/en/bit_count/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (238,20,'^','Syntax\n------\n\n^\n\nDescription\n-----------\n\nBitwise XOR. Converts the values to binary and compares bits. If one (and only\none) of the corresponding bits is 1 is the resulting bit also 1.\n\nExamples\n--------\n\nSELECT 1 ^ 1;\n+-------+\n| 1 ^ 1 |\n+-------+\n| 0 |\n+-------+\n\nSELECT 1 ^ 0;\n+-------+\n| 1 ^ 0 |\n+-------+\n| 1 |\n+-------+\n\nSELECT 11 ^ 3;\n+--------+\n| 11 ^ 3 |\n+--------+\n| 8 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-xor/','','https://mariadb.com/kb/en/bitwise-xor/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (239,20,'|','Syntax\n------\n\n|\n\nDescription\n-----------\n\nBitwise OR. Converts the values to binary and compares bits. If either of the\ncorresponding bits has a value of 1, the resulting bit is also 1.\n\nSee also bitwise AND.\n\nExamples\n--------\n\nSELECT 2|1;\n+-----+\n| 2|1 |\n+-----+\n| 3 |\n+-----+\n\nSELECT 29 | 15;\n+---------+\n| 29 | 15 |\n+---------+\n| 31 |\n+---------+\n\nURL: https://mariadb.com/kb/en/bitwise-or/','','https://mariadb.com/kb/en/bitwise-or/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (240,20,'~','Syntax\n------\n\n~\n\nDescription\n-----------\n\nBitwise NOT. Converts the value to 4 bytes binary and inverts all bits.\n\nExamples\n--------\n\nSELECT 3 & ~1;\n+--------+\n| 3 & ~1 |\n+--------+\n| 2 |\n+--------+\n\nSELECT 5 & ~1;\n+--------+\n| 5 & ~1 |\n+--------+\n| 4 |\n+--------+\n\nURL: https://mariadb.com/kb/en/bitwise-not/','','https://mariadb.com/kb/en/bitwise-not/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (241,20,'Parentheses','Parentheses are sometimes called precedence operators - this means that they\ncan be used to change the other operator\'s precedence in an expression. The\nexpressions that are written between parentheses are computed before the\nexpressions that are written outside. Parentheses must always contain an\nexpression (that is, they cannot be empty), and can be nested.\n\nFor example, the following expressions could return different results:\n\n* NOT a OR b\n* NOT (a OR b)\n\nIn the first case, NOT applies to a, so if a is FALSE or b is TRUE, the\nexpression returns TRUE. In the second case, NOT applies to the result of a OR\nb, so if at least one of a or b is TRUE, the expression is TRUE.\n\nWhen the precedence of operators is not intuitive, you can use parentheses to\nmake it immediately clear for whoever reads the statement.\n\nThe precedence of the NOT operator can also be affected by the\nHIGH_NOT_PRECEDENCE SQL_MODE flag.\n\nOther uses\n----------\n\nParentheses must always be used to enclose subqueries.\n\nParentheses can also be used in a JOIN statement between multiple tables to\ndetermine which tables must be joined first.\n\nAlso, parentheses are used to enclose the list of parameters to be passed to\nbuilt-in functions, user-defined functions and stored routines. However, when\nno parameter is passed to a stored procedure, parentheses are optional. For\nbuiltin functions and user-defined functions, spaces are not allowed between\nthe function name and the open parenthesis, unless the IGNORE_SPACE SQL_MODE\nis set. For stored routines (and for functions if IGNORE_SPACE is set) spaces\nare allowed before the open parenthesis, including tab characters and new line\ncharacters.\n\nSyntax errors\n-------------\n\nIf there are more open parentheses than closed parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \'\'\na\nt line 1\n\nNote the empty string.\n\nIf there are more closed parentheses than open parentheses, the error usually\nlooks like this:\n\nERROR 1064 (42000): You have an error in your SQL syntax; check the manual that\ncorresponds to your MariaDB server version for the right syntax to use near \')\'\nat line 1\n\nNote the quoted closed parenthesis.\n\nURL: https://mariadb.com/kb/en/parentheses/','','https://mariadb.com/kb/en/parentheses/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (242,20,'TRUE FALSE','Description\n-----------\n\nThe constants TRUE and FALSE evaluate to 1 and 0, respectively. The constant\nnames can be written in any lettercase.\n\nExamples\n--------\n\nSELECT TRUE, true, FALSE, false;\n+------+------+-------+-------+\n| TRUE | TRUE | FALSE | FALSE |\n+------+------+-------+-------+\n| 1 | 1 | 0 | 0 |\n+------+------+-------+-------+\n\nURL: https://mariadb.com/kb/en/true-false/','','https://mariadb.com/kb/en/true-false/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (243,21,'ANALYZE TABLE','Syntax\n------\n\nANALYZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE tbl_name [,tbl_name ...] \n [PERSISTENT FOR [ALL|COLUMNS ([col_name [,col_name ...]])]\n [INDEXES ([index_name [,index_name ...]])]]\n\nDescription\n-----------\n\nANALYZE TABLE analyzes and stores the key distribution for a table (index\nstatistics). This statement works with MyISAM, Aria and InnoDB tables. During\nthe analysis, InnoDB will allow reads/writes, and MyISAM/Aria reads/inserts.\nFor MyISAM tables, this statement is equivalent to using myisamchk --analyze.\n\nFor more information on how the analysis works within InnoDB, see InnoDB\nLimitations.\n\nMariaDB uses the stored key distribution to decide the order in which tables\nshould be joined when you perform a join on something other than a constant.\nIn addition, key distributions can be used when deciding which indexes to use\nfor a specific table within a query.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, ANALYZE TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, ANALYZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nANALYZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... ANALYZE PARTITION to analyze one or more partitions.\n\nThe Aria storage engine supports progress reporting for the ANALYZE TABLE\nstatement.\n\nEngine-Independent Statistics\n-----------------------------\n\nANALYZE TABLE supports engine-independent statistics. See Engine-Independent\nTable Statistics: Collecting Statistics with the ANALYZE TABLE Statement for\nmore information.\n\nUseful Variables\n----------------\n\nFor calculating the number of duplicates, ANALYZE TABLE uses a buffer of\nsort_buffer_size bytes per column. You can slightly increase the speed of\nANALYZE TABLE by increasing this variable.\n\nURL: https://mariadb.com/kb/en/analyze-table/','','https://mariadb.com/kb/en/analyze-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (244,21,'CHECK TABLE','Syntax\n------\n\nCHECK TABLE tbl_name [, tbl_name] ... [option] ...\n\noption = {FOR UPGRADE | QUICK | FAST | MEDIUM | EXTENDED | CHANGED}\n\nDescription\n-----------\n\nCHECK TABLE checks a table or tables for errors. CHECK TABLE works for\nArchive, Aria, CSV, InnoDB and MyISAM tables. For Aria and MyISAM tables, the\nkey statistics are updated as well. For CSV, see also Checking and Repairing\nCSV Tables.\n\nAs an alternative, myisamchk is a commandline tool for checking MyISAM tables\nwhen the tables are not being accessed. For Aria tables, there is a similar\ntool: aria_chk.\n\nFor checking dynamic columns integrity, COLUMN_CHECK() can be used.\n\nCHECK TABLE can also check views for problems, such as tables that are\nreferenced in the view definition that no longer exist.\n\nCHECK TABLE is also supported for partitioned tables. You can use ALTER TABLE\n... CHECK PARTITION to check one or more partitions.\n\nThe meaning of the different options are as follows - note that this can vary\na bit between storage engines:\n\n+-----+----------------------------------------------------------------------+\n| FOR | Do a very quick check if the storage format for the table has |\n| UPG | changed so that one needs to do a REPAIR. This is only needed when |\n| ADE | one upgrades between major versions of MariaDB or MySQL. This is |\n| | usually done by running mysql_upgrade. |\n+-----+----------------------------------------------------------------------+\n| FAS | Only check tables that has not been closed properly or are marked |\n| | as corrupt. Only supported by the MyISAM and Aria engines. For |\n| | other engines the table is checked normally |\n+-----+----------------------------------------------------------------------+\n| CHA | Check only tables that has changed since last REPAIR / CHECK. Only |\n| GED | supported by the MyISAM and Aria engines. For other engines the |\n| | table is checked normally. |\n+-----+----------------------------------------------------------------------+\n| QUI | Do a fast check. For MyISAM and Aria, this means skipping the check |\n| K | of the delete link chain, which may take some time. |\n+-----+----------------------------------------------------------------------+\n| MED | Scan also the data files. Checks integrity between data and index |\n| UM | files with checksums. In most cases this should find all possible |\n| | errors. |\n+-----+----------------------------------------------------------------------+\n| EXT | Does a full check to verify every possible error. For MyISAM and |\n| NDE | Aria, verify for each row that all it keys exists and points to the |\n| | row. This may take a long time on large tables. Ignored by InnoDB |\n| | before MariaDB 10.6.11, MariaDB 10.7.7, MariaDB 10.8.6 and MariaDB |\n| | 10.9.4. |\n+-----+----------------------------------------------------------------------+\n\nFor most cases running CHECK TABLE without options or MEDIUM should be good\nenough.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf you want to know if two tables are identical, take a look at CHECKSUM TABLE.\n\nInnoDB\n------\n\nIf CHECK TABLE finds an error in an InnoDB table, MariaDB might shutdown to\nprevent the error propagation. In this case, the problem will be reported in\nthe error log. Otherwise the table or an index might be marked as corrupted,\nto prevent use. This does not happen with some minor problems, like a wrong\nnumber of entries in a secondary index. Those problems are reported in the\noutput of CHECK TABLE.\n\nEach tablespace contains a header with metadata. This header is not checked by\nthis statement.\n\nDuring the execution of CHECK TABLE, other threads may be blocked.\n\nURL: https://mariadb.com/kb/en/check-table/','','https://mariadb.com/kb/en/check-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (245,21,'CHECK VIEW','Syntax\n------\n\nCHECK VIEW view_name\n\nDescription\n-----------\n\nThe CHECK VIEW statement was introduced in MariaDB 10.0.18 to assist with\nfixing MDEV-6916, an issue introduced in MariaDB 5.2 where the view algorithms\nwere swapped. It checks whether the view algorithm is correct. It is run as\npart of mysql_upgrade, and should not normally be required in regular use.\n\nURL: https://mariadb.com/kb/en/check-view/','','https://mariadb.com/kb/en/check-view/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (246,21,'CHECKSUM TABLE','Syntax\n------\n\nCHECKSUM TABLE tbl_name [, tbl_name] ... [ QUICK | EXTENDED ]\n\nDescription\n-----------\n\nCHECKSUM TABLE reports a table checksum. This is very useful if you want to\nknow if two tables are the same (for example on a master and slave).\n\nWith QUICK, the live table checksum is reported if it is available, or NULL\notherwise. This is very fast. A live checksum is enabled by specifying the\nCHECKSUM=1 table option when you create the table; currently, this is\nsupported only for Aria and MyISAM tables.\n\nWith EXTENDED, the entire table is read row by row and the checksum is\ncalculated. This can be very slow for large tables.\n\nIf neither QUICK nor EXTENDED is specified, MariaDB returns a live checksum if\nthe table storage engine supports it and scans the table otherwise.\n\nCHECKSUM TABLE requires the SELECT privilege for the table.\n\nFor a nonexistent table, CHECKSUM TABLE returns NULL and generates a warning.\n\nThe table row format affects the checksum value. If the row format changes,\nthe checksum will change. This means that when a table created with a\nMariaDB/MySQL version is upgraded to another version, the checksum value will\nprobably change.\n\nTwo identical tables should always match to the same checksum value; however,\nalso for non-identical tables there is a very slight chance that they will\nreturn the same value as the hashing algorithm is not completely\ncollision-free.\n\nIdentical Tables\n----------------\n\nIdentical tables mean that the CREATE statement is identical and that the\nfollowing variable, which affects the storage formats, was the same when the\ntables were created:\n\n* mysql56-temporal-format\n\nDifferences Between MariaDB and MySQL\n-------------------------------------\n\nCHECKSUM TABLE may give a different result as MariaDB doesn\'t ignore NULLs in\nthe columns as MySQL 5.1 does (Later MySQL versions should calculate checksums\nthe same way as MariaDB). You can get the \'old style\' checksum in MariaDB by\nstarting mysqld with the --old option. Note however that that the MyISAM and\nAria storage engines in MariaDB are using the new checksum internally, so if\nyou are using --old, the CHECKSUM command will be slower as it needs to\ncalculate the checksum row by row. Starting from MariaDB Server 10.9, --old is\ndeprecated and will be removed in a future release. Set --old-mode or OLD_MODE\nto COMPAT_5_1_CHECKSUM to get \'old style\' checksum.\n\nURL: https://mariadb.com/kb/en/checksum-table/','','https://mariadb.com/kb/en/checksum-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (247,21,'OPTIMIZE TABLE','Syntax\n------\n\nOPTIMIZE [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [WAIT n | NOWAIT]\n\nDescription\n-----------\n\nOPTIMIZE TABLE has two main functions. It can either be used to defragment\ntables, or to update the InnoDB fulltext index.\n\nMariaDB starting with 10.3.0\n----------------------------\n\nWAIT/NOWAIT\n-----------\n\nSet the lock wait timeout. See WAIT and NOWAIT.\n\nDefragmenting\n-------------\n\nOPTIMIZE TABLE works for InnoDB (before MariaDB 10.1.1, only if the\ninnodb_file_per_table server system variable is set), Aria, MyISAM and ARCHIVE\ntables, and should be used if you have deleted a large part of a table or if\nyou have made many changes to a table with variable-length rows (tables that\nhave VARCHAR, VARBINARY, BLOB, or TEXT columns). Deleted rows are maintained\nin a linked list and subsequent INSERT operations reuse old row positions.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, OPTIMIZE TABLE statements are written to the binary log and will\nbe replicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure\nthe statement is not written to the binary log.\n\nFrom MariaDB 10.3.19, OPTIMIZE TABLE statements are not logged to the binary\nlog if read_only is set. See also Read-Only Replicas.\n\nOPTIMIZE TABLE is also supported for partitioned tables. You can use ALTER\nTABLE ... OPTIMIZE PARTITION to optimize one or more partitions.\n\nYou can use OPTIMIZE TABLE to reclaim the unused space and to defragment the\ndata file. With other storage engines, OPTIMIZE TABLE does nothing by default,\nand returns this message: \" The storage engine for the table doesn\'t support\noptimize\". However, if the server has been started with the --skip-new option,\nOPTIMIZE TABLE is linked to ALTER TABLE, and recreates the table. This\noperation frees the unused space and updates index statistics.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nIf a MyISAM table is fragmented, concurrent inserts will not be performed\nuntil an OPTIMIZE TABLE statement is executed on that table, unless the\nconcurrent_insert server system variable is set to ALWAYS.\n\nUpdating an InnoDB fulltext index\n---------------------------------\n\nWhen rows are added or deleted to an InnoDB fulltext index, the index is not\nimmediately re-organized, as this can be an expensive operation. Change\nstatistics are stored in a separate location . The fulltext index is only\nfully re-organized when an OPTIMIZE TABLE statement is run.\n\nBy default, an OPTIMIZE TABLE will defragment a table. In order to use it to\nupdate fulltext index statistics, the innodb_optimize_fulltext_only system\nvariable must be set to 1. This is intended to be a temporary setting, and\nshould be reset to 0 once the fulltext index has been re-organized.\n\nSince fulltext re-organization can take a long time, the\ninnodb_ft_num_word_optimize variable limits the re-organization to a number of\nwords (2000 by default). You can run multiple OPTIMIZE statements to fully\nre-organize the index.\n\nDefragmenting InnoDB tablespaces\n--------------------------------\n\nMariaDB 10.1.1 merged the Facebook/Kakao defragmentation patch, allowing one\nto use OPTIMIZE TABLE to defragment InnoDB tablespaces. For this functionality\nto be enabled, the innodb_defragment system variable must be enabled. No new\ntables are created and there is no need to copy data from old tables to new\ntables. Instead, this feature loads n pages (determined by\ninnodb-defragment-n-pages) and tries to move records so that pages would be\nfull of records and then frees pages that are fully empty after the operation.\nNote that tablespace files (including ibdata1) will not shrink as the result\nof defragmentation, but one will get better memory utilization in the InnoDB\nbuffer pool as there are fewer data pages in use.\n\nSee Defragmenting InnoDB Tablespaces for more details.\n\nURL: https://mariadb.com/kb/en/optimize-table/','','https://mariadb.com/kb/en/optimize-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (248,21,'REPAIR TABLE','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] TABLE\n tbl_name [, tbl_name] ...\n [QUICK] [EXTENDED] [USE_FRM]\n\nDescription\n-----------\n\nREPAIR TABLE repairs a possibly corrupted table. By default, it has the same\neffect as\n\nmyisamchk --recover tbl_name\n\nor\n\naria_chk --recover tbl_name\n\nSee aria_chk and myisamchk for more.\n\nREPAIR TABLE works for Archive, Aria, CSV and MyISAM tables. For InnoDB, see\nrecovery modes. For CSV, see also Checking and Repairing CSV Tables. For\nArchive, this statement also improves compression. If the storage engine does\nnot support this statement, a warning is issued.\n\nThis statement requires SELECT and INSERT privileges for the table.\n\nBy default, REPAIR TABLE statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nFrom MariaDB 10.3.19, REPAIR TABLE statements are not logged to the binary log\nif read_only is set. See also Read-Only Replicas.\n\nWhen an index is recreated, the storage engine may use a configurable buffer\nin the process. Incrementing the buffer speeds up the index creation. Aria and\nMyISAM allocate a buffer whose size is defined by aria_sort_buffer_size or\nmyisam_sort_buffer_size, also used for ALTER TABLE.\n\nREPAIR TABLE is also supported for partitioned tables. However, the USE_FRM\noption cannot be used with this statement on a partitioned table.\n\nALTER TABLE ... REPAIR PARTITION can be used to repair one or more partitions.\n\nThe Aria storage engine supports progress reporting for this statement.\n\nURL: https://mariadb.com/kb/en/repair-table/','','https://mariadb.com/kb/en/repair-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (249,21,'REPAIR VIEW','Syntax\n------\n\nREPAIR [NO_WRITE_TO_BINLOG | LOCAL] VIEW view_name[, view_name] ... [FROM\nMYSQL]\n\nDescription\n-----------\n\nThe REPAIR VIEW statement was introduced to assist with fixing MDEV-6916, an\nissue introduced in MariaDB 5.2 where the view algorithms were swapped\ncompared to their MySQL on disk representation. It checks whether the view\nalgorithm is correct. It is run as part of mysql_upgrade, and should not\nnormally be required in regular use.\n\nBy default it corrects the checksum and if necessary adds the mariadb-version\nfield. If the optional FROM MYSQL clause is used, and no mariadb-version field\nis present, the MERGE and TEMPTABLE algorithms are toggled.\n\nBy default, REPAIR VIEW statements are written to the binary log and will be\nreplicated. The NO_WRITE_TO_BINLOG keyword (LOCAL is an alias) will ensure the\nstatement is not written to the binary log.\n\nURL: https://mariadb.com/kb/en/repair-view/','','https://mariadb.com/kb/en/repair-view/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (250,22,'mysql.func Table','The mysql.func table stores information about user-defined functions (UDFs)\ncreated with the CREATE FUNCTION UDF statement.\n\nMariaDB starting with 10.4\n--------------------------\nIn MariaDB 10.4 and later, this table uses the Aria storage engine.\n\nMariaDB until 10.3\n------------------\nIn MariaDB 10.3 and before, this table uses the MyISAM storage engine.\n\nThe mysql.func table contains the following fields:\n\n+----------+---------+---------+-------+--------------+---------------------+\n| Field | Type | Null | Key | Default | Description |\n+----------+---------+---------+-------+--------------+---------------------+\n| name | char(64 | NO | PRI | | UDF name |\n| | | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| ret | tinyint | NO | | 0 | |\n| | 1) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| dl | char(12 | NO | | | Shared library name |\n| | ) | | | | |\n+----------+---------+---------+-------+--------------+---------------------+\n| type | enum(\'f | NO | | NULL | Type, either |\n| | nction\' | | | | function or |\n| | \'aggreg | | | | aggregate. |\n| | te\') | | | | Aggregate |\n| | | | | | functions are |\n| | | | | | summary functions |\n| | | | | | such as SUM() and |\n| | | | | | AVG(). |\n+----------+---------+---------+-------+--------------+---------------------+\n\nExample\n-------\n\nSELECT * FROM mysql.func;\n+------------------------------+-----+--------------+-----------+\n| name | ret | dl | type |\n+------------------------------+-----+--------------+-----------+\n| spider_direct_sql | 2 | ha_spider.so | function |\n| spider_bg_direct_sql | 2 | ha_spider.so | aggregate |\n| spider_ping_table | 2 | ha_spider.so | function |\n| spider_copy_tables | 2 | ha_spider.so | function |\n| spider_flush_table_mon_cache | 2 | ha_spider.so | function |\n+------------------------------+-----+--------------+-----------+\n\nURL: https://mariadb.com/kb/en/mysqlfunc-table/','','https://mariadb.com/kb/en/mysqlfunc-table/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (251,22,'CREATE FUNCTION UDF','Syntax\n------\n\nCREATE [OR REPLACE] [AGGREGATE] FUNCTION [IF NOT EXISTS] function_name\n RETURNS {STRING|INTEGER|REAL|DECIMAL}\n SONAME shared_library_name\n\nDescription\n-----------\n\nA user-defined function (UDF) is a way to extend MariaDB with a new function\nthat works like a native (built-in) MariaDB function such as ABS() or CONCAT().\n\nfunction_name is the name that should be used in SQL statements to invoke the\nfunction.\n\nTo create a function, you must have the INSERT privilege for the mysql\ndatabase. This is necessary becauseCREATE FUNCTION adds a row to the\nmysql.func system table that records the function\'s name, type, and shared\nlibrary name. If you do not have this table, you should run the mysql_upgrade\ncommand to create it.\n\nUDFs need to be written in C, C++ or another language that uses C calling\nconventions, MariaDB needs to have been dynamically compiled, and your\noperating system must support dynamic loading.\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see http://www.mysqludf.org/.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFor creating a stored function as opposed to a user-defined function, see\nCREATE FUNCTION.\n\nFor valid identifiers to use as function names, see Identifier Names.\n\nRETURNS\n-------\n\nThe RETURNS clause indicates the type of the function\'s return value, and can\nbe one of STRING, INTEGER, REAL or DECIMAL. DECIMAL functions currently return\nstring values and should be written like STRING functions.\n\nshared_library_name\n-------------------\n\nshared_library_name is the basename of the shared object file that contains\nthe code that implements the function. The file must be located in the plugin\ndirectory. This directory is given by the value of the plugin_dir system\nvariable. Note that before MariaDB/MySQL 5.1, the shared object could be\nlocated in any directory that was searched by your system\'s dynamic linker.\n\nAGGREGATE\n---------\n\nAggregate functions are summary functions such as SUM() and AVG().\n\nMariaDB starting with 10.4\n--------------------------\nAggregate UDF functions can be used as window functions.\n\nOR REPLACE\n----------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe OR REPLACE clause was added in MariaDB 10.1.3\n\nIf the optional OR REPLACE clause is used, it acts as a shortcut for:\n\nDROP FUNCTION IF EXISTS function_name;\nCREATE FUNCTION name ...;\n\nIF NOT EXISTS\n-------------\n\nMariaDB starting with 10.1.3\n----------------------------\nThe IF NOT EXISTS clause was added in MariaDB 10.1.3\n\nWhen the IF NOT EXISTS clause is used, MariaDB will return a warning instead\nof an error if the specified function already exists. Cannot be used together\nwith OR REPLACE.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nOR REPLACE and IF NOT EXISTS:\n\nCREATE FUNCTION jsoncontains_path RETURNS integer SONAME \'ha_connect.so\';\nERROR 1125 (HY000): Function \'jsoncontains_path\' already exists\n\nCREATE OR REPLACE FUNCTION jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected (0.00 sec)\n\nCREATE FUNCTION IF NOT EXISTS jsoncontains_path RETURNS integer SONAME\n\'ha_connect.so\';\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+---------------------------------------------+\n| Level | Code | Message |\n+-------+------+---------------------------------------------+\n| Note | 1125 | Function \'jsoncontains_path\' already exists |\n+-------+------+---------------------------------------------+\n\nURL: https://mariadb.com/kb/en/create-function-udf/','','https://mariadb.com/kb/en/create-function-udf/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (252,22,'DROP FUNCTION UDF','Syntax\n------\n\nDROP FUNCTION [IF EXISTS] function_name\n\nDescription\n-----------\n\nThis statement drops the user-defined function (UDF) named function_name.\n\nTo drop a function, you must have the DELETE privilege for the mysql database.\nThis is because DROP FUNCTION removes the row from the mysql.func system table\nthat records the function\'s name, type and shared library name.\n\nFor dropping a stored function, see DROP FUNCTION.\n\nUpgrading a UDF\n---------------\n\nTo upgrade the UDF\'s shared library, first run a DROP FUNCTION statement, then\nupgrade the shared library and finally run the CREATE FUNCTION statement. If\nyou upgrade without following this process, you may crash the server.\n\nExamples\n--------\n\nDROP FUNCTION jsoncontains_path;\n\nIF EXISTS:\n\nDROP FUNCTION jsoncontains_path;\nERROR 1305 (42000): FUNCTION test.jsoncontains_path does not exist\n\nDROP FUNCTION IF EXISTS jsoncontains_path;\nQuery OK, 0 rows affected, 1 warning (0.00 sec)\n\nSHOW WARNINGS;\n+-------+------+------------------------------------------------+\n| Level | Code | Message |\n+-------+------+------------------------------------------------+\n| Note | 1305 | FUNCTION test.jsoncontains_path does not exist |\n+-------+------+------------------------------------------------+\n\nURL: https://mariadb.com/kb/en/drop-function-udf/','','https://mariadb.com/kb/en/drop-function-udf/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (253,22,'Creating User-Defined Functions','User-defined functions allow MariaDB to be extended with a new function that\nworks like a native (built-in) MariaDB function such as ABS() or CONCAT().\nThere are alternative ways to add a new function: writing a native function\n(which requires modifying and compiling the server source code), or writing a\nstored function.\n\nStatements making use of user-defined functions are not safe for replication.\n\nFunctions are written in C or C++, and to make use of them, the operating\nsystem must support dynamic loading.\n\nEach new SQL function requires corresponding functions written in C/C++. In\nthe list below, at least the main function - x() - and one other, are\nrequired. x should be replaced by the name of the function you are creating.\n\nAll functions need to be thread-safe, so not global or static variables that\nchange can be allocated. Memory is allocated in x_init()/ and freed in\nx_deinit().\n\nSimple Functions\n----------------\n\nx()\n---\n\nRequired for all UDFs; this is where the results are calculated.\n\n+------------------------------------------+----------------------------------+\n| C/C++ type | SQL type |\n+------------------------------------------+----------------------------------+\n| char * | STRING |\n+------------------------------------------+----------------------------------+\n| long long | INTEGER |\n+------------------------------------------+----------------------------------+\n| double | REAL |\n+------------------------------------------+----------------------------------+\n\nDECIMAL functions return string values, and so should be written accordingly.\nIt is not possible to create ROW functions.\n\nx_init()\n--------\n\nInitialization function for x(). Can be used for the following:\n\n* Check the number of arguments to X() (the SQL equivalent).\n* Verify the argument types, or to force arguments to be of a particular type\nafter the function is called.\n* Specify whether the result can be NULL.\n* Specify the maximum result length.\n* For REAL functions, specify the maximum number of decimals for the result.\n* Allocate any required memory.\n\nx_deinit()\n----------\n\nDe-initialization function for x(). Used to de-allocate memory that was\nallocated in x_init().\n\nDescription\n-----------\n\nEach time the SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n* See User-defined Functions Calling Sequences for more details on the\nfunctions.\n\nAggregate Functions\n-------------------\n\nThe following functions are required for aggregate functions, such as AVG()\nand SUM(). When using CREATE FUNCTION, the AGGREGATE keyword is required.\n\nx_clear()\n---------\n\nUsed to reset the current aggregate, but without inserting the argument as the\ninitial aggregate value for the new group.\n\nx_add()\n-------\n\nUsed to add the argument to the current aggregate.\n\nx_remove()\n----------\n\nStarting from MariaDB 10.4, improves the support of window functions (so it is\nnot obligatory to add it) and should remove the argument from the current\naggregate.\n\nDescription\n-----------\n\nEach time the aggregate SQL function X() is called:\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* If there is no x_init() function, or it has been called and did not return\nan error, x() is then called once per row.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\n* MariaDB will first call the C/C++ initialization function, x_init(),\nassuming it exists. All setup will be performed, and if it returns an error,\nthe SQL statement is aborted and no further functions are called.\n* The table is sorted according to the GROUP BY expression.\n* x_clear() is called for the first row of each new group.\n* x_add() is called once per row for each row in the same group.\n* x() is called when the group changes, or after the last row, to get the\naggregate result. \n* The latter three steps are repeated until all rows have been processed.\n* After all rows have finished processing, x_deinit() is called, if present,\nto clean up by de-allocating any memory that was allocated in x_init().\n\nExamples\n--------\n\nFor an example, see sql/udf_example.cc in the source tree. For a collection of\nexisting UDFs see https://github.com/mysqludf.\n\nURL: https://mariadb.com/kb/en/creating-user-defined-functions/','','https://mariadb.com/kb/en/creating-user-defined-functions/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (254,22,'User-Defined Functions Calling Sequences','The functions described in Creating User-defined Functions are expanded on\nthis page. They are declared as follows:\n\nSimple Functions\n----------------\n\nx()\n---\n\nIf x() returns an integer, it is declared as follows:\n\nlong long x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIf x() returns a string (DECIMAL functions also return string values), it is\ndeclared as follows:\n\nchar *x(UDF_INIT *initid, UDF_ARGS *args,\n char *result, unsigned long *length,\n char *is_null, char *error);\n\nIf x() returns a real, it is declared as follows:\n\ndouble x(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nx_init()\n--------\n\nmy_bool x_init(UDF_INIT *initid, UDF_ARGS *args, char *message);\n\nx_deinit()\n----------\n\nvoid x_deinit(UDF_INIT *initid);\n\nDescription\n-----------\n\ninitid is a parameter passed to all three functions that points to a UDF_INIT\nstructure, used for communicating information between the functions. Its\nstructure members are:\n\n* my_bool maybe_null\nmaybe_null should be set to 1 if x_init can return a NULL value, Defaults to 1\nif any arguments are declared maybe_null.\n\n* unsigned int decimals\nNumber of decimals after the decimal point. The default, if an explicit number\nof decimals is passed in the arguments to the main function, is the maximum\nnumber of decimals, so if 9.5, 9.55 and 9.555 are passed to the function, the\ndefault would be three (based on 9.555, the maximum). If there are no\nexplicit number of decimals, the default is set to 31, or one more than the\nmaximum for the DOUBLE, FLOAT and DECIMAL types. This default can be changed\nin the function to suit the actual calculation.\n\n* unsigned int max_length\nMaximum length of the result. For integers, the default is 21. For strings,\nthe length of the longest argument. For reals, the default is 13 plus the\nnumber of decimals indicated by initid->decimals. The length includes any\nsigns or decimal points. Can also be set to 65KB or 16MB in order to return a\nBLOB. The memory remains unallocated, but this is used to decide on the data\ntype to use if the data needs to be temporarily stored.\n\n* char *ptr\nA pointer for use as required by the function. Commonly, initid->ptr is used\nto communicate allocated memory, with x_init() allocating the memory and\nassigning it to this pointer, x() using it, and x_deinit() de-allocating it.\n\n* my_bool const_item\nShould be set to 1 in x_init() if x() always returns the same value, otherwise\n0.\n\nAggregate Functions\n-------------------\n\nx_clear()\n---------\n\nx_clear() is a required function for aggregate functions, and is declared as\nfollows:\n\nvoid x_clear(UDF_INIT *initid, char *is_null, char *error);\n\nIt is called when the summary results need to be reset, that is at the\nbeginning of each new group. but also to reset the values when there were no\nmatching rows.\n\nis_null is set to point to CHAR(0) before calling x_clear().\n\nIn the case of an error, you can store the value to which the error argument\npoints (a single-byte variable, not a string string buffer) in the variable.\n\nx_reset()\n---------\n\nx_reset() is declared as follows:\n\nvoid x_reset(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called on finding the first row in a new group. Should reset the summary\nvariables, and then use UDF_ARGS as the first value in the group\'s internal\nsummary value. The function is not required if the UDF interface uses\nx_clear().\n\nx_add()\n-------\n\nx_add() is declared as follows:\n\nvoid x_add(UDF_INIT *initid, UDF_ARGS *args,\n char *is_null, char *error);\n\nIt is called for all rows belonging to the same group, and should be used to\nadd the value in UDF_ARGS to the internal summary variable.\n\nx_remove()\n----------\n\nx_remove() was added in MariaDB 10.4 and is declared as follows (same as\nx_add()):\n\nvoid x_remove(UDF_INIT* initid, UDF_ARGS* args,\n char* is_null, char *error );\n\nIt adds more efficient support of aggregate UDFs as window functions.\nx_remove() should \"subtract\" the row (reverse x_add()). In MariaDB 10.4\naggregate UDFs will work as WINDOW functions without x_remove() but it will\nnot be so efficient.\n\nIf x_remove() supported (defined) detected automatically.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-calling-sequences/','','https://mariadb.com/kb/en/user-defined-functions-calling-sequences/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (255,22,'User-Defined Functions Security','The MariaDB server imposes a number of limitations on user-defined functions\nfor security purposes.\n\n* The INSERT privilege for the mysql database is required to run CREATE\nFUNCTION, as a record will be added to the mysql.func-table.\n* The DELETE privilege for the mysql database is required to run DROP FUNCTION\nas the corresponding record will be removed from the mysql.func-table.\n* UDF object files can only be placed in the plugin directory, as specified by\nthe value of the plugin_dir system variable.\n* At least one symbol, beyond the required x() - corresponding to an SQL\nfunction X()) - is required. These can be x_init(), x_deinit(), xxx_reset(),\nx_clear() and x_add() functions (see Creating User-defined Functions). The\nallow-suspicious-udfs mysqld option (by default unset) provides a workaround,\npermitting only one symbol to be used. This is not recommended, as it opens\nthe possibility of loading shared objects that are not legitimate user-defined\nfunctions.\n\nURL: https://mariadb.com/kb/en/user-defined-functions-security/','','https://mariadb.com/kb/en/user-defined-functions-security/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (256,23,'Numeric Data Type Overview','There are a number of numeric data types:\n\n* TINYINT\n* BOOLEAN - Synonym for TINYINT(1)\n* INT1 - Synonym for TINYINT\n* SMALLINT\n* INT2 - Synonym for SMALLINT\n* MEDIUMINT\n* INT3 - Synonym for MEDIUMINT\n* INT, INTEGER\n* INT4 - Synonym for INT\n* BIGINT\n* INT8 - Synonym for BIGINT\n* DECIMAL, DEC, NUMERIC, FIXED\n* FLOAT\n* DOUBLE, DOUBLE PRECISION, REAL\n* BIT\n\nSee the specific articles for detailed information on each.\n\nSIGNED, UNSIGNED and ZEROFILL\n-----------------------------\n\nMost numeric types can be defined as SIGNED, UNSIGNED or ZEROFILL, for example:\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nIf SIGNED, or no attribute, is specified, a portion of the numeric type will\nbe reserved for the sign (plus or minus). For example, a TINYINT SIGNED can\nrange from -128 to 127.\n\nIf UNSIGNED is specified, no portion of the numeric type is reserved for the\nsign, so for integer types range can be larger. For example, a TINYINT\nUNSIGNED can range from 0 to 255. Floating point and fixed-point types also\ncan be UNSIGNED, but this only prevents negative values from being stored and\ndoesn\'t alter the range.\n\nIf ZEROFILL is specified, the column will be set to UNSIGNED and the spaces\nused by default to pad the field are replaced with zeros. ZEROFILL is ignored\nin expressions or as part of a UNION. ZEROFILL is a non-standard MySQL and\nMariaDB enhancement.\n\nNote that although the preferred syntax indicates that the attributes are\nexclusive, more than one attribute can be specified.\n\nUntil MariaDB 10.2.7 (MDEV-8659), any combination of the attributes could be\nused in any order, with duplicates. In this case:\n\n* the presence of ZEROFILL makes the column UNSIGNED ZEROFILL.\n* the presence of UNSIGNED makes the column UNSIGNED.\n\nFrom MariaDB 10.2.8, only the following combinations are supported:\n\n* SIGNED\n* UNSIGNED\n* ZEROFILL\n* UNSIGNED ZEROFILL\n* ZEROFILL UNSIGNED\n\nThe latter two should be replaced with simply ZEROFILL, but are still accepted\nby the parser.\n\nExamples\n--------\n\nCREATE TABLE zf (\n i1 TINYINT SIGNED,\n i2 TINYINT UNSIGNED,\n i3 TINYINT ZEROFILL\n);\n\nINSERT INTO zf VALUES (2,2,2);\n\nSELECT * FROM zf;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 2 | 2 | 002 |\n+------+------+------+\n\nRange\n-----\n\nWhen attempting to add a value that is out of the valid range for the numeric\ntype, MariaDB will react depending on the strict SQL_MODE setting.\n\nIf strict_mode has been set (the default from MariaDB 10.2.4), MariaDB will\nreturn an error.\n\nIf strict_mode has not been set (the default until MariaDB 10.2.3), MariaDB\nwill adjust the number to fit in the field, returning a warning.\n\nExamples\n--------\n\nWith strict_mode set:\n\nSHOW VARIABLES LIKE \'sql_mode\';\n+---------------+--------------------------------------------------------------\n----------------------------+\n| Variable_name | Value \n |\n+---------------+--------------------------------------------------------------\n----------------------------+\n| sql_mode |\nSTRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SU\nSTITUTION |\n+---------------+--------------------------------------------------------------\n----------------------------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nERROR 1264 (22003): Out of range value for column \'i1\' at row 1\n\nSELECT * FROM ranges;\nEmpty set (0.10 sec)\n\nWith strict_mode unset:\n\nSHOW VARIABLES LIKE \'sql_mode%\';\n+---------------+-------+\n| Variable_name | Value |\n+---------------+-------+\n| sql_mode | |\n+---------------+-------+\n\nCREATE TABLE ranges (i1 TINYINT, i2 SMALLINT, i3 TINYINT UNSIGNED);\n\nINSERT INTO ranges VALUES (257,257,257);\nQuery OK, 1 row affected, 2 warnings (0.00 sec)\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'i1\' at row 1 |\n| Warning | 1264 | Out of range value for column \'i3\' at row 1 |\n+---------+------+---------------------------------------------+\n2 rows in set (0.00 sec)\n\nSELECT * FROM ranges;\n+------+------+------+\n| i1 | i2 | i3 |\n+------+------+------+\n| 127 | 257 | 255 |\n+------+------+------+\n\nAuto_increment\n--------------\n\nThe AUTO_INCREMENT attribute can be used to generate a unique identity for new\nrows. For more details, see auto_increment.\n\nURL: https://mariadb.com/kb/en/numeric-data-type-overview/','','https://mariadb.com/kb/en/numeric-data-type-overview/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (257,23,'TINYINT','Syntax\n------\n\nTINYINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA very small integer. The signed range is -128 to 127. The unsigned range is 0\nto 255. For details on the attributes, see Numeric Data Type Overview.\n\nINT1 is a synonym for TINYINT. BOOL and BOOLEAN are synonyms for TINYINT(1).\n\nExamples\n--------\n\nCREATE TABLE tinyints (a TINYINT,b TINYINT UNSIGNED,c TINYINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO tinyints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.11 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO tinyints VALUES (-10,10,10);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n+------+------+------+\n\nINSERT INTO tinyints VALUES (128,128,128);\nQuery OK, 1 row affected, 1 warning (0.19 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO tinyints VALUES (127,128,128);\n\nSELECT * FROM tinyints;\n+------+------+------+\n| a | b | c |\n+------+------+------+\n| -10 | 0 | 000 |\n| -10 | 10 | 000 |\n| -10 | 10 | 010 |\n| 127 | 128 | 128 |\n| 127 | 128 | 128 |\n+------+------+------+\n\nURL: https://mariadb.com/kb/en/tinyint/','','https://mariadb.com/kb/en/tinyint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (258,23,'BOOLEAN','Syntax\n------\n\nBOOL, BOOLEAN\n\nDescription\n-----------\n\nThese types are synonyms for TINYINT(1). A value of zero is considered false.\nNon-zero values are considered true.\n\nHowever, the values TRUE and FALSE are merely aliases for 1 and 0. See Boolean\nLiterals, as well as the IS operator for testing values against a boolean.\n\nExamples\n--------\n\nCREATE TABLE boo (i BOOLEAN);\n\nDESC boo;\n+-------+------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+------------+------+-----+---------+-------+\n| i | tinyint(1) | YES | | NULL | |\n+-------+------------+------+-----+---------+-------+\n\nSELECT IF(0, \'true\', \'false\');\n+------------------------+\n| IF(0, \'true\', \'false\') |\n+------------------------+\n| false |\n+------------------------+\n\nSELECT IF(1, \'true\', \'false\');\n+------------------------+\n| IF(1, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nSELECT IF(2, \'true\', \'false\');\n+------------------------+\n| IF(2, \'true\', \'false\') |\n+------------------------+\n| true |\n+------------------------+\n\nTRUE and FALSE as aliases for 1 and 0:\n\nSELECT IF(0 = FALSE, \'true\', \'false\');\n\n+--------------------------------+\n| IF(0 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| true |\n+--------------------------------+\n\nSELECT IF(1 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(1 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| true |\n+-------------------------------+\n\nSELECT IF(2 = TRUE, \'true\', \'false\');\n+-------------------------------+\n| IF(2 = TRUE, \'true\', \'false\') |\n+-------------------------------+\n| false |\n+-------------------------------+\n\nSELECT IF(2 = FALSE, \'true\', \'false\');\n+--------------------------------+\n| IF(2 = FALSE, \'true\', \'false\') |\n+--------------------------------+\n| false |\n+--------------------------------+\n\nThe last two statements display the results shown because 2 is equal to\nneither 1 nor 0.\n\nURL: https://mariadb.com/kb/en/boolean/','','https://mariadb.com/kb/en/boolean/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (259,23,'SMALLINT','Syntax\n------\n\nSMALLINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small integer. The signed range is -32768 to 32767. The unsigned range is 0\nto 65535.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the SMALLINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT2 is a synonym for SMALLINT.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE smallints (a SMALLINT,b SMALLINT UNSIGNED,c SMALLINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO smallints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.09 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO smallints VALUES (-10,10,10);\n\nINSERT INTO smallints VALUES (32768,32768,32768);\nQuery OK, 1 row affected, 1 warning (0.04 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO smallints VALUES (32767,32768,32768);\n\nSELECT * FROM smallints;\n+-------+-------+-------+\n| a | b | c |\n+-------+-------+-------+\n| -10 | 0 | 00000 |\n| -10 | 10 | 00000 |\n| -10 | 10 | 00010 |\n| 32767 | 32768 | 32768 |\n| 32767 | 32768 | 32768 |\n+-------+-------+-------+\n\nURL: https://mariadb.com/kb/en/smallint/','','https://mariadb.com/kb/en/smallint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (260,23,'MEDIUMINT','Syntax\n------\n\nMEDIUMINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA medium-sized integer. The signed range is -8388608 to 8388607. The unsigned\nrange is 0 to 16777215.\n\nZEROFILL pads the integer with zeroes and assumes UNSIGNED (even if UNSIGNED\nis not specified).\n\nINT3 is a synonym for MEDIUMINT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE mediumints (a MEDIUMINT,b MEDIUMINT UNSIGNED,c MEDIUMINT\nZEROFILL);\n\nDESCRIBE mediumints;\n+-------+--------------------------------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+--------------------------------+------+-----+---------+-------+\n| a | mediumint(9) | YES | | NULL | |\n| b | mediumint(8) unsigned | YES | | NULL | |\n| c | mediumint(8) unsigned zerofill | YES | | NULL | |\n+-------+--------------------------------+------+-----+---------+-------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO mediumints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.05 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO mediumints VALUES (-10,10,10);\n\nINSERT INTO mediumints VALUES (8388608,8388608,8388608);\nQuery OK, 1 row affected, 1 warning (0.05 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO mediumints VALUES (8388607,8388608,8388608);\n\nSELECT * FROM mediumints;\n+---------+---------+----------+\n| a | b | c |\n+---------+---------+----------+\n| -10 | 0 | 00000000 |\n| -10 | 0 | 00000000 |\n| -10 | 10 | 00000000 |\n| -10 | 10 | 00000010 |\n| 8388607 | 8388608 | 08388608 |\n| 8388607 | 8388608 | 08388608 |\n+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/mediumint/','','https://mariadb.com/kb/en/mediumint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (261,23,'INT','Syntax\n------\n\nINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\nINTEGER[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size integer. When marked UNSIGNED, it ranges from 0 to 4294967295,\notherwise its range is -2147483648 to 2147483647 (SIGNED is the default). If a\ncolumn has been set to ZEROFILL, all values will be prepended by zeros so that\nthe INT value contains a number of M digits. INTEGER is a synonym for INT.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nINT4 is a synonym for INT.\n\nFor details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE ints (a INT,b INT UNSIGNED,c INT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO ints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.10 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO ints VALUES (-10,10,10);\n\nINSERT INTO ints VALUES (2147483648,2147483648,2147483648);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO ints VALUES (2147483647,2147483648,2147483648);\n\nSELECT * FROM ints;\n+------------+------------+------------+\n| a | b | c |\n+------------+------------+------------+\n| -10 | 0 | 0000000000 |\n| -10 | 10 | 0000000000 |\n| -10 | 10 | 0000000010 |\n| 2147483647 | 2147483648 | 2147483648 |\n| 2147483647 | 2147483648 | 2147483648 |\n+------------+------------+------------+\n\nURL: https://mariadb.com/kb/en/int/','','https://mariadb.com/kb/en/int/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (262,23,'BIGINT','Syntax\n------\n\nBIGINT[(M)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA large integer. The signed range is -9223372036854775808 to\n9223372036854775807. The unsigned range is 0 to 18446744073709551615.\n\nIf a column has been set to ZEROFILL, all values will be prepended by zeros so\nthat the BIGINT value contains a number of M digits.\n\nNote: If the ZEROFILL attribute has been specified, the column will\nautomatically become UNSIGNED.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nSERIAL is an alias for:\n\nBIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE\n\nINT8 is a synonym for BIGINT.\n\nExamples\n--------\n\nCREATE TABLE bigints (a BIGINT,b BIGINT UNSIGNED,c BIGINT ZEROFILL);\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nERROR 1264 (22003): Out of range value for column \'b\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nERROR 1264 (22003): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nERROR 1264 (22003): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO bigints VALUES (-10,-10,-10);\nQuery OK, 1 row affected, 2 warnings (0.08 sec)\nWarning (Code 1264): Out of range value for column \'b\' at row 1\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,-10);\nQuery OK, 1 row affected, 1 warning (0.08 sec)\nWarning (Code 1264): Out of range value for column \'c\' at row 1\n\nINSERT INTO bigints VALUES (-10,10,10);\n\nINSERT INTO bigints VALUES\n(9223372036854775808,9223372036854775808,9223372036854775808);\nQuery OK, 1 row affected, 1 warning (0.07 sec)\nWarning (Code 1264): Out of range value for column \'a\' at row 1\n\nINSERT INTO bigints VALUES\n(9223372036854775807,9223372036854775808,9223372036854775808);\n\nSELECT * FROM bigints;\n+---------------------+---------------------+----------------------+\n| a | b | c |\n+---------------------+---------------------+----------------------+\n| -10 | 0 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000000 |\n| -10 | 10 | 00000000000000000010 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n| 9223372036854775807 | 9223372036854775808 | 09223372036854775808 |\n+---------------------+---------------------+----------------------+\n\nURL: https://mariadb.com/kb/en/bigint/','','https://mariadb.com/kb/en/bigint/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (263,23,'DECIMAL','Syntax\n------\n\nDECIMAL[(M[,D])] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA packed \"exact\" fixed-point number. M is the total number of digits (the\nprecision) and D is the number of digits after the decimal point (the scale).\n\n* The decimal point and (for negative numbers) the \"-\" sign are not\ncounted in M. \n* If D is 0, values have no decimal point or fractional\npart and on INSERT the value will be rounded to the nearest DECIMAL. \n* The maximum number of digits (M) for DECIMAL is 65. \n* The maximum number of supported decimals (D) is 30 before MariadB 10.2.1 and\n38 afterwards. \n* If D is omitted, the default is 0. If M is omitted, the default is 10.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nAll basic calculations (+, -, *, /) with DECIMAL columns are done with a\nprecision of 65 digits.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nDEC, NUMERIC and FIXED are synonyms, as well as NUMBER in Oracle mode from\nMariaDB 10.3.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DECIMAL UNSIGNED ZEROFILL);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4.0),(5.2),(5.7);\nQuery OK, 6 rows affected, 2 warnings (0.16 sec)\nRecords: 6 Duplicates: 0 Warnings: 2\n\nNote (Code 1265): Data truncated for column \'d\' at row 5\nNote (Code 1265): Data truncated for column \'d\' at row 6\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n+------------+\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO t1 VALUES (-7);\nERROR 1264 (22003): Out of range value for column \'d\' at row 1\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO t1 VALUES (-7);\nQuery OK, 1 row affected, 1 warning (0.02 sec)\nWarning (Code 1264): Out of range value for column \'d\' at row 1\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 0000000001 |\n| 0000000002 |\n| 0000000003 |\n| 0000000004 |\n| 0000000005 |\n| 0000000006 |\n| 0000000000 |\n+------------+\n\nURL: https://mariadb.com/kb/en/decimal/','','https://mariadb.com/kb/en/decimal/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (264,23,'FLOAT','Syntax\n------\n\nFLOAT[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA small (single-precision) floating-point number (see DOUBLE for a\nregular-size floating point number). Allowable values are:\n\n* -3.402823466E+38 to -1.175494351E-38\n* 0\n* 1.175494351E-38 to 3.402823466E+38.\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A single-precision floating-point number is accurate to\napproximately 7 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nUsing FLOAT might give you some unexpected problems because all calculations\nin MariaDB are done with double precision. See Floating Point Accuracy.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nURL: https://mariadb.com/kb/en/float/','','https://mariadb.com/kb/en/float/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (265,23,'DOUBLE','Syntax\n------\n\nDOUBLE[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nDOUBLE PRECISION[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\nREAL[(M,D)] [SIGNED | UNSIGNED | ZEROFILL]\n\nDescription\n-----------\n\nA normal-size (double-precision) floating-point number (see FLOAT for a\nsingle-precision floating-point number).\n\nAllowable values are:\n\n* -1.7976931348623157E+308 to -2.2250738585072014E-308\n* 0\n* 2.2250738585072014E-308 to 1.7976931348623157E+308\n\nThese are the theoretical limits, based on the IEEE standard. The actual range\nmight be slightly smaller depending on your hardware or operating system.\n\nM is the total number of digits and D is the number of digits following the\ndecimal point. If M and D are omitted, values are stored to the limits allowed\nby the hardware. A double-precision floating-point number is accurate to\napproximately 15 decimal places.\n\nUNSIGNED, if specified, disallows negative values.\n\nZEROFILL, if specified, pads the number with zeros, up to the total number of\ndigits specified by M.\n\nREAL and DOUBLE PRECISION are synonyms, unless the REAL_AS_FLOAT SQL mode is\nenabled, in which case REAL is a synonym for FLOAT rather than DOUBLE.\n\nSee Floating Point Accuracy for issues when using floating-point numbers.\n\nFor more details on the attributes, see Numeric Data Type Overview.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DOUBLE(5,0) zerofill);\n\nINSERT INTO t1 VALUES (1),(2),(3),(4);\n\nSELECT * FROM t1;\n+-------+\n| d |\n+-------+\n| 00001 |\n| 00002 |\n| 00003 |\n| 00004 |\n+-------+\n\nURL: https://mariadb.com/kb/en/double/','','https://mariadb.com/kb/en/double/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (266,23,'BIT','Syntax\n------\n\nBIT[(M)]\n\nDescription\n-----------\n\nA bit-field type. M indicates the number of bits per value, from 1 to 64. The\ndefault is 1 if M is omitted.\n\nBit values can be inserted with b\'value\' notation, where value is the bit\nvalue in 0\'s and 1\'s.\n\nBit fields are automatically zero-padded from the left to the full length of\nthe bit, so for example in a BIT(4) field, \'10\' is equivalent to \'0010\'.\n\nBits are returned as binary, so to display them, either add 0, or use a\nfunction such as HEX, OCT or BIN to convert them.\n\nExamples\n--------\n\nCREATE TABLE b ( b1 BIT(8) );\n\nWith strict_mode set, the default from MariaDB 10.2.4:\n\nINSERT INTO b VALUES (b\'11111111\');\n\nINSERT INTO b VALUES (b\'01010101\');\n\nINSERT INTO b VALUES (b\'1111111111111\');\nERROR 1406 (22001): Data too long for column \'b1\' at row 1\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n+------+---------+---------+----------+\n\nWith strict_mode unset, the default until MariaDB 10.2.3:\n\nINSERT INTO b VALUES (b\'11111111\'),(b\'01010101\'),(b\'1111111111111\');\nQuery OK, 3 rows affected, 1 warning (0.10 sec)\nRecords: 3 Duplicates: 0 Warnings: 1\n\nSHOW WARNINGS;\n+---------+------+---------------------------------------------+\n| Level | Code | Message |\n+---------+------+---------------------------------------------+\n| Warning | 1264 | Out of range value for column \'b1\' at row 3 |\n+---------+------+---------------------------------------------+\n\nSELECT b1+0, HEX(b1), OCT(b1), BIN(b1) FROM b;\n+------+---------+---------+----------+\n| b1+0 | HEX(b1) | OCT(b1) | BIN(b1) |\n+------+---------+---------+----------+\n| 255 | FF | 377 | 11111111 |\n| 85 | 55 | 125 | 1010101 |\n| 255 | FF | 377 | 11111111 |\n+------+---------+---------+----------+\n\nURL: https://mariadb.com/kb/en/bit/','','https://mariadb.com/kb/en/bit/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (267,23,'Floating-point Accuracy','Due to their nature, not all floating-point numbers can be stored with exact\nprecision. Hardware architecture, the CPU or even the compiler version and\noptimization level may affect the precision.\n\nIf you are comparing DOUBLEs or FLOATs with numeric decimals, it is not safe\nto use the equality operator.\n\nSometimes, changing a floating-point number from single-precision (FLOAT) to\ndouble-precision (DOUBLE) will fix the problem.\n\nExample\n-------\n\nf1, f2 and f3 have seemingly identical values across each row, but due to\nfloating point accuracy, the results may be unexpected.\n\nCREATE TABLE fpn (id INT, f1 FLOAT, f2 DOUBLE, f3 DECIMAL (10,3));\nINSERT INTO fpn VALUES (1,2,2,2),(2,0.1,0.1,0.1);\n\nSELECT * FROM fpn WHERE f1*f1 = f2*f2;\n+------+------+------+-------+\n| id | f1 | f2 | f3 |\n+------+------+------+-------+\n| 1 | 2 | 2 | 2.000 |\n+------+------+------+-------+\n\nThe reason why only one instead of two rows was returned becomes clear when we\nsee how the floating point squares were evaluated.\n\nSELECT f1*f1, f2*f2, f3*f3 FROM fpn;\n+----------------------+----------------------+----------+\n| f1*f1 | f2*f2 | f3*f3 |\n+----------------------+----------------------+----------+\n| 4 | 4 | 4.000000 |\n| 0.010000000298023226 | 0.010000000000000002 | 0.010000 |\n+----------------------+----------------------+----------+\n\nURL: https://mariadb.com/kb/en/floating-point-accuracy/','','https://mariadb.com/kb/en/floating-point-accuracy/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (268,23,'BINARY','This page describes the BINARY data type. For details about the operator, see\nBinary Operator.\n\nSyntax\n------\n\nBINARY(M)\n\nDescription\n-----------\n\nThe BINARY type is similar to the CHAR type, but stores binary byte strings\nrather than non-binary character strings. M represents the column length in\nbytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nBINARY values are right-padded with 0x00 (the zero byte) to the specified\nlength when inserted. The padding is not removed on select, so this needs to\nbe taken into account when sorting and comparing, where all bytes are\nsignificant. The zero byte, 0x00 is less than a space for comparison purposes.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE bins (a BINARY(10));\n\nINSERT INTO bins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM bins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO bins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM bins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM bins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nThe field is a BINARY(10), so padding of two \'\\0\'s are inserted, causing\ncomparisons that don\'t take this into account to fail:\n\nTRUNCATE bins;\n\nINSERT INTO bins VALUES(\'12345678\');\n\nSELECT a = \'12345678\', a = \'12345678\\0\\0\' from bins;\n+----------------+--------------------+\n| a = \'12345678\' | a = \'12345678\\0\\0\' |\n+----------------+--------------------+\n| 0 | 1 |\n+----------------+--------------------+\n\nURL: https://mariadb.com/kb/en/binary/','','https://mariadb.com/kb/en/binary/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (269,23,'BLOB','Syntax\n------\n\nBLOB[(M)]\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 65,535 (216 - 1) bytes. Each BLOB value\nis stored using a two-byte length prefix that indicates the number of bytes in\nthe value.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest BLOB type large enough to hold values M\nbytes long.\n\nBLOBS can also be used to store dynamic columns.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nIndexing\n--------\n\nMariaDB starting with 10.4\n--------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on a column that uses\nthe BLOB data type. In previous releases this was not possible, as the index\nwould only guarantee the uniqueness of a fixed number of characters.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/blob/','','https://mariadb.com/kb/en/blob/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (270,23,'BLOB and TEXT Data Types','Description\n-----------\n\nA BLOB is a binary large object that can hold a variable amount of data. The\nfour BLOB types are\n\n* TINYBLOB,\n* BLOB, \n* MEDIUMBLOB, and\n* LONGBLOB.\n\nThese differ only in the maximum length of the values they can hold.\n\nThe TEXT types are\n\n* TINYTEXT,\n* TEXT,\n* MEDIUMTEXT, and\n* LONGTEXT.\n* JSON (alias for LONGTEXT)\n\nThese correspond to the four BLOB types and have the same maximum lengths and\nstorage requirements.\n\nMariaDB starting with 10.2.1\n----------------------------\nStarting from MariaDB 10.2.1, BLOB and TEXT columns can have a DEFAULT value.\n\nMariaDB starting with 10.4.3\n----------------------------\nFrom MariaDB 10.4, it is possible to set a unique index on columns that use\nthe BLOB or TEXT data types.\n\nURL: https://mariadb.com/kb/en/blob-and-text-data-types/','','https://mariadb.com/kb/en/blob-and-text-data-types/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (271,23,'CHAR','This article covers the CHAR data type. See CHAR Function for the function.\n\nSyntax\n------\n\n[NATIONAL] CHAR[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA fixed-length string that is always right-padded with spaces to the specified\nlength when stored. M represents the column length in characters. The range of\nM is 0 to 255. If M is omitted, the length is 1.\n\nCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nCHAR(0).\n\nNote: Trailing spaces are removed when CHAR values are retrieved unless the\nPAD_CHAR_TO_FULL_LENGTH SQL mode is enabled.\n\nBefore MariaDB 10.2, all collations were of type PADSPACE, meaning that CHAR\n(as well as VARCHAR and TEXT) values are compared without regard for trailing\nspaces. This does not apply to the LIKE pattern-matching operator, which takes\ninto account trailing spaces.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (c CHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT c=\'Maria\',c=\'Maria \' FROM strtest;\n+-----------+--------------+\n| c=\'Maria\' | c=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT c LIKE \'Maria\',c LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| c LIKE \'Maria\' | c LIKE \'Maria \' |\n+----------------+-------------------+\n| 1 | 0 |\n+----------------+-------------------+\n\nNO PAD Collations\n-----------------\n\nNO PAD collations regard trailing spaces as normal characters. You can get a\nlist of all NO PAD collations by querying the Information Schema Collations\ntable, for example:\n\nSELECT collation_name FROM information_schema.collations \n WHERE collation_name LIKE \"%nopad%\";\n+------------------------------+\n| collation_name |\n+------------------------------+\n| big5_chinese_nopad_ci |\n| big5_nopad_bin |\n...\n\nURL: https://mariadb.com/kb/en/char/','','https://mariadb.com/kb/en/char/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (272,23,'CHAR BYTE','Description\n-----------\n\nThe CHAR BYTE data type is an alias for the BINARY data type. This is a\ncompatibility feature.\n\nURL: https://mariadb.com/kb/en/char-byte/','','https://mariadb.com/kb/en/char-byte/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (273,23,'ENUM','Syntax\n------\n\nENUM(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nAn enumeration. A string object that can have only one value, chosen from the\nlist of values \'value1\', \'value2\', ..., NULL or the special \'\' error value. In\ntheory, an ENUM column can have a maximum of 65,535 distinct values; in\npractice, the real maximum depends on many factors. ENUM values are\nrepresented internally as integers.\n\nTrailing spaces are automatically stripped from ENUM values on table creation.\n\nENUMs require relatively little storage space compared to strings, either one\nor two bytes depending on the number of enumeration values.\n\nNULL and empty values\n---------------------\n\nAn ENUM can also contain NULL and empty values. If the ENUM column is declared\nto permit NULL values, NULL becomes a valid value, as well as the default\nvalue (see below). If strict SQL Mode is not enabled, and an invalid value is\ninserted into an ENUM, a special empty string, with an index value of zero\n(see Numeric index, below), is inserted, with a warning. This may be\nconfusing, because the empty string is also a possible value, and the only\ndifference if that is this case its index is not 0. Inserting will fail with\nan error if strict mode is active.\n\nIf a DEFAULT clause is missing, the default value will be:\n\n* NULL if the column is nullable;\n* otherwise, the first value in the enumeration.\n\nNumeric index\n-------------\n\nENUM values are indexed numerically in the order they are defined, and sorting\nwill be performed in this numeric order. We suggest not using ENUM to store\nnumerals, as there is little to no storage space benefit, and it is easy to\nconfuse the enum integer with the enum numeral value by leaving out the quotes.\n\nAn ENUM defined as ENUM(\'apple\',\'orange\',\'pear\') would have the following\nindex values:\n\n+--------------------------------------+--------------------------------------+\n| Index | Value |\n+--------------------------------------+--------------------------------------+\n| NULL | NULL |\n+--------------------------------------+--------------------------------------+\n| 0 | \'\' |\n+--------------------------------------+--------------------------------------+\n| 1 | \'apple\' |\n+--------------------------------------+--------------------------------------+\n| 2 | \'orange\' |\n+--------------------------------------+--------------------------------------+\n| 3 | \'pear\' |\n+--------------------------------------+--------------------------------------+\n\nExamples\n--------\n\nCREATE TABLE fruits (\n id INT NOT NULL auto_increment PRIMARY KEY,\n fruit ENUM(\'apple\',\'orange\',\'pear\'),\n bushels INT);\n\nDESCRIBE fruits;\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| Field | Type | Null | Key | Default | Extra \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n| id | int(11) | NO | PRI | NULL |\nauto_increment |\n| fruit | enum(\'apple\',\'orange\',\'pear\') | YES | | NULL | \n |\n| bushels | int(11) | YES | | NULL | \n |\n+---------+-------------------------------+------+-----+---------+-------------\n--+\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'pear\',20),\n (\'apple\',100),\n (\'orange\',25);\n\nINSERT INTO fruits\n (fruit,bushels) VALUES\n (\'avocado\',10);\nERROR 1265 (01000): Data truncated for column \'fruit\' at row 1\n\nSELECT * FROM fruits;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 1 | pear | 20 |\n| 2 | apple | 100 |\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSelecting by numeric index:\n\nSELECT * FROM fruits WHERE fruit=2;\n+----+--------+---------+\n| id | fruit | bushels |\n+----+--------+---------+\n| 3 | orange | 25 |\n+----+--------+---------+\n\nSorting is according to the index value:\n\nCREATE TABLE enums (a ENUM(\'2\',\'1\'));\n\nINSERT INTO enums VALUES (\'1\'),(\'2\');\n\nSELECT * FROM enums ORDER BY a ASC;\n+------+\n| a |\n+------+\n| 2 |\n| 1 |\n+------+\n\nIt\'s easy to get confused between returning the enum integer with the stored\nvalue, so we don\'t suggest using ENUM to store numerals. The first example\nreturns the 1st indexed field (\'2\' has an index value of 1, as it\'s defined\nfirst), while the second example returns the string value \'1\'.\n\nSELECT * FROM enums WHERE a=1;\n+------+\n| a |\n+------+\n| 2 |\n+------+\n\nSELECT * FROM enums WHERE a=\'1\';\n+------+\n| a |\n+------+\n| 1 |\n+------+\n\nURL: https://mariadb.com/kb/en/enum/','','https://mariadb.com/kb/en/enum/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (274,23,'INET6','MariaDB starting with 10.5.0\n----------------------------\nThe INET6 data type was added in MariaDB 10.5.0\n\nSyntax\n------\n\nINET6\n\nDescription\n-----------\n\nThe INET6 data type is intended for storage of IPv6 addresses, as well as IPv4\naddresses assuming conventional mapping of IPv4 addresses into IPv6 addresses.\n\nBoth short and long IPv6 notation are permitted, according to RFC-5952.\n\n* Values are stored as a 16-byte fixed length binary string, with most\nsignificant byte first.\n* Storage engines see INET6 as BINARY(16).\n* Clients see INET6 as CHAR(39) and get text representation on retrieval.\n\nThe IPv4-compatible notation is considered as deprecated. It is supported for\ncompatibility with the INET6_ATON function, which also understands this\nformat. It\'s recommended to use the mapped format to store IPv4 addresses in\nINET6.\n\nWhen an IPv4 mapped (or compatible) value is stored in INET6, it still\noccupies 16 bytes:\n\nRetrieval\n---------\n\nOn retrieval, in the client-server text protocol, INET6 values are converted\nto the short text representation, according to RFC-5952, that is with all\nleading zeroes in each group removed and with consequent zero groups\ncompressed.\n\nBesides creating one\'s own stored function, there is no a way to retrieve an\nINET6 value using long text representation.\n\nCasting\n-------\n\n* CAST from a character string to INET6 understands addresses in short or long\ntext notation (including IPv4 mapped and compatible addresses). NULL is\nreturned if the format is not understood.\n* CAST from a binary string to INET6 requires a 16-byte string as an argument.\nNULL is returned if the argument length is not equal to 16.\n* CAST from other data types to INET6 first converts data to a character\nstring, then CAST from character string to INET6 is applied.\n* CAST from INET6 to CHAR returns short text address notation.\n* CAST from INET6 to BINARY returns its 16-byte binary string representation.\n* CAST from INET6 to data types other than CHAR (e.g. SIGNED, UNSIGNED, TIME,\netc) returns an error.\n\nComparisons\n-----------\n\nAn INET6 expression can be compared to:\n\n* another INET6 expression\n* a character string expression with a text (short or long) address\nrepresentation:\n* a 16-byte binary string expression:\n\nAttempting to compare INET6 to an expression of any other data type returns an\nerror.\n\nMixing INET6 Values for Result\n------------------------------\n\nAn INET6 expression can be mixed for result (i.e. UNION, CASE..THEN, COALESCE\netc) with:\n\n* another INET6 expression. The resulting data type is INET6.\n* a character string in text (short or long) address representation. The\nresult data type is INET6. The character string counterpart is automatically\nconverted to INET6. If the string format is not understood, it\'s converted\nwith a warning to either NULL or to \'::\', depending on the NULL-ability of the\nresult.\n* a 16-byte binary string. The resulting data type is INET6. The binary string\ncounterpart is automatically converted to INET6. If the length of the binary\nstring is not equal to 16, it\'s converted with a warning to NULL or to \'::\'\ndepending on the NULL-ability of the result.\n\nAttempts to mix INET6 for result with other data types will return an error.\n\nMixing INET6 with other data types for LEAST and GREATEST, when mixing for\ncomparison and mixing for result are involved at the same time, uses the same\nrules with mixing for result, described in the previous paragraphs.\n\nFunctions and Operators\n-----------------------\n\n* HEX() with an INET6 argument returns a hexadecimal representation of the\nunderlying 16-byte binary string\n* Arithmetic operators (+,-,*,/,MOD,DIV) are not supported for INET6. This may\nchange in the future.\n* The INET6_ATON function now understands INET6 values as an argument\n* The prototypes of the IS_IPV4_COMPAT and IS_IPV4_MAPPED functions have\nchanged from a BINARY(16) to a INET6,\n* When the argument for these two functions is not INET6, automatic implicit\nCAST to INET6 is applied. As a consequence, both functions now understand\narguments in both text representation and binary(16) representation. Before\nMariaDB 10.5.0, these functions understood only binary(16) representation.\n\nPrepared Statement Parameters\n-----------------------------\n\nINET6 understands both text and binary(16) address representation in prepared\nstatement parameters (PREPARE..EXECUTE and EXECUTE IMMEDIATE statements).\n\nMigration between BINARY(16) and INET6\n---------------------------------------\n\nBefore MariaDB 10.5.0, you may have used BINARY(16) as a storage for IPv6\ninternet addresses, in combination with INET6_ATON and INET6_NTOA to\nrespectively insert and retrieve data.\n\nFrom 10.5, you can ALTER BINARY(16) columns storing IPv6 addresses to INET6.\nAfter such an alter, there is no a need to use INET6_ATON() and INET6_NTOA().\nAddresses can be inserted and retrieved directly.\n\nIt is also possible to convert INET6 columns to BINARY(16) and continue using\nthe data in combination with INET6_NTOA() and INET6_ATON().\n\nExamples\n--------\n\nCREATE TABLE t1 (a INET6);\n\nInserting using short text address notation:\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nLong text address notation:\n\nINSERT INTO t1 VALUES (\'2001:0db8:0000:0000:0000:ff00:0042:8329\');\n\n16-byte binary string notation:\n\nINSERT INTO t1 VALUES (0x20010DB8000000000000FF0000428329);\nINSERT INTO t1 VALUES (UNHEX(\'20010DB8000000000000FF0000428329\'));\n\nIPv4 addresses, using IPv4-mapped and IPv4-compatible notations:\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\'); -- mapped\nINSERT INTO t1 VALUES (\'::192.0.2.128\'); -- compatible\n\nSELECT * FROM t1;\n+------------------------+\n| a |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.0.2.128 |\n| ::192.0.2.128 |\n+------------------------+\n\nIPv4 mapped (or compatible) values still occupy 16 bytes:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'::ffff:192.0.2.128\');\n\nSELECT * FROM t1;\n+--------------------+\n| a |\n+--------------------+\n| ::ffff:192.0.2.128 |\n+--------------------+\n\nSELECT HEX(a) FROM t1;\n+----------------------------------+\n| HEX(a) |\n+----------------------------------+\n| 00000000000000000000FFFFC0000280 |\n+----------------------------------+\n\nCasting from INET6 to anything other than CHAR returns an error:\n\nSELECT CAST(a AS DECIMAL) FROM t1;\n\nERROR 4079 (HY000): Illegal parameter data type inet6 for operation\n\'decimal_typecast\'\n\nComparison Examples\n-------------------\n\nComparison with another INET6 expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n CREATE OR REPLACE TABLE t2 (a INET6);\n\nINSERT INTO t1 VALUES\n(\'2001:db8::ff00:42:8328\'),(\'2001:db8::ff00:42:8329\');\n INSERT INTO t2 VALUES\n(\'2001:db8::ff00:42:832a\'),(\'2001:db8::ff00:42:8329\');\n\nSELECT t1.* FROM t1,t2 WHERE t1.a=t2.a;\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a character string expression with a text (short or long) address\nrepresentation:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=\'2001:db8::ff00:42:8329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith a 16-byte binary string expression:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT * FROM t1 WHERE a=X\'20010DB8000000000000FF0000428329\';\n +------------------------+\n | a |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nWith an expression of another data type:\n\nSELECT * FROM t1 WHERE a=1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'=\'\n\nMixing for Result Examples\n--------------------------\n\nMixed with another INET6 expression, returning an INET6 data type:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b INET6);\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8329\');\n\nSELECT a FROM t1 UNION SELECT b FROM t1;\n +------------------------+\n | a |\n +------------------------+\n | NULL |\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nSELECT COALESCE(a, b) FROM t1;\n +------------------------+\n | COALESCE(a, b) |\n +------------------------+\n | 2001:db8::ff00:42:8329 |\n +------------------------+\n\nMixed with a character string in text (short or long) address representation:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARCHAR(64));\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:8328\');\n\nINSERT INTO t1 VALUES (NULL,\'2001:db8::ff00:42:832a garbage\');\n\nSELECT COALESCE(a,b) FROM t1;\n +------------------------+\n | COALESCE(a,b) |\n +------------------------+\n | 2001:db8::ff00:42:8328 |\n | NULL |\n +------------------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n\n+---------+------+---------------------------------------------------------+\n | Level | Code | Message\n|\n\n+---------+------+---------------------------------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'2001:db8::ff00:42:832a garbage\'\n|\n\n+---------+------+---------------------------------------------------------+\n\nMixed with a 16-byte binary string:\n\nCREATE OR REPLACE TABLE t1 (a INET6, b VARBINARY(16));\n\nINSERT INTO t1 VALUES (NULL,CONCAT(0xFFFF,REPEAT(0x0000,6),0xFFFF));\n\nINSERT INTO t1 VALUES (NULL,0x00/*garbage*/);\n\nSELECT COALESCE(a,b) FROM t1;\n +---------------+\n | COALESCE(a,b) |\n +---------------+\n | ffff::ffff |\n | NULL |\n +---------------+\n 2 rows in set, 1 warning (0.001 sec)\n\nSHOW WARNINGS;\n +---------+------+-------------------------------+\n | Level | Code | Message |\n +---------+------+-------------------------------+\n | Warning | 1292 | Incorrect inet6 value: \'\\x00\' |\n +---------+------+-------------------------------+\n\nMixing with other data types:\n\nSELECT CAST(\'ffff::ffff\' AS INET6) UNION SELECT 1;\nERROR 4078 (HY000): Illegal parameter data types inet6 and int for operation\n\'UNION\'\n\nFunctions and Operators Examples\n--------------------------------\n\nHEX with an INET6 argument returning a hexadecimal representation:\n\nSELECT HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6));\n +----------------------------------------------+\n | HEX(CAST(\'2001:db8::ff00:42:8329\' AS INET6)) |\n +----------------------------------------------+\n | 20010DB8000000000000FF0000428329 |\n +----------------------------------------------+\n\nINET6_ATON now understands INET6 values as an argument:\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n\nSELECT a, HEX(INET6_ATON(a)) FROM t1;\n +------------------------+----------------------------------+\n | a | HEX(INET6_ATON(a)) |\n +------------------------+----------------------------------+\n | 2001:db8::ff00:42:8329 | 20010DB8000000000000FF0000428329 |\n +------------------------+----------------------------------+\n\nIS_IPV4_COMPAT and IS_IPV4_MAPPED prototype now a BINARY(16)):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\n INSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\n INSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), IS_IPV4_COMPAT(a) FROM t1;\n +------------------------+-------------------+-------------------+\n | a | IS_IPV4_MAPPED(a) | IS_IPV4_COMPAT(a) |\n +------------------------+-------------------+-------------------+\n | 2001:db8::ff00:42:8329 | 0 | 0 |\n | ::ffff:192.168.0.1 | 1 | 0 |\n | ::192.168.0.1 | 0 | 1 |\n +------------------------+-------------------+-------------------+\n\nAutomatic implicit CAST to INET6:\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b VARCHAR(39) DEFAULT a\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), b, IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | a | IS_IPV4_MAPPED(a) | b |\nIS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n | ffff::ffff | 0 | ffff::ffff |\n 0 |\n | ::ffff:192.168.0.1 | 1 | ::ffff:192.168.0.1 |\n 1 |\n\n+--------------------+-------------------+--------------------+----------------\n--+\n\nCREATE OR REPLACE TABLE t1 (\n a INET6,\n b BINARY(16) DEFAULT UNHEX(HEX(a))\n );\n\nINSERT INTO t1 (a) VALUES (\'ffff::ffff\'),(\'::ffff:192.168.0.1\');\n\nSELECT a, IS_IPV4_MAPPED(a), HEX(b), IS_IPV4_MAPPED(b) FROM t1;\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | a | IS_IPV4_MAPPED(a) | HEX(b)\n | IS_IPV4_MAPPED(b) |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n | ffff::ffff | 0 |\nFFFF000000000000000000000000FFFF | 0 |\n | ::ffff:192.168.0.1 | 1 |\n00000000000000000000FFFFC0A80001 | 1 |\n\n+--------------------+-------------------+----------------------------------+--\n----------------+\n\nPrepared Statement Parameters Examples\n--------------------------------------\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING \'ffff::fffe\';\nEXECUTE IMMEDIATE \'INSERT INTO t1 VALUES (?)\' USING\nX\'FFFF000000000000000000000000FFFF\';\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n| ffff::ffff |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING \'ffff::fffe\';\n+------------+\n| a |\n+------------+\n| ffff::fffe |\n+------------+\n\nEXECUTE IMMEDIATE \'SELECT * FROM t1 WHERE a=?\' USING','','https://mariadb.com/kb/en/inet6/'); update help_topic set description = CONCAT(description, '\nX\'FFFF000000000000000000000000FFFF\';\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n+------------+\n\nMigration between BINARY(16) and INET6 Examples\n-----------------------------------------------\n\nBefore MariaDB 10.5:\n\nCREATE OR REPLACE TABLE t1 (a BINARY(16));\n\nINSERT INTO t1 VALUES (INET6_ATON(\'ffff::ffff\'));\n\nSELECT INET6_NTOA(a) FROM t1;\n+---------------+\n| INET6_NTOA(a) |\n+---------------+\n| ffff::ffff |\n+---------------+\n\nMigrating to INET6, from MariaDB 10.5:\n\nALTER TABLE t1 MODIFY a INET6;\n\nINSERT INTO t1 VALUES (\'ffff::fffe\');\n\nSELECT * FROM t1;\n+------------+\n| a |\n+------------+\n| ffff::ffff |\n| ffff::fffe |\n+------------+\n\nMigration from INET6 to BINARY(16):\n\nCREATE OR REPLACE TABLE t1 (a INET6);\n\nINSERT INTO t1 VALUES (\'2001:db8::ff00:42:8329\');\nINSERT INTO t1 VALUES (\'::ffff:192.168.0.1\');\nINSERT INTO t1 VALUES (\'::192.168.0.1\');\n\nALTER TABLE t1 MODIFY a BINARY(16);\n\nSELECT INET6_NTOA(a) FROM t1;\n+------------------------+\n| INET6_NTOA(a) |\n+------------------------+\n| 2001:db8::ff00:42:8329 |\n| ::ffff:192.168.0.1 |\n| ::192.168.0.1 |\n+------------------------+\n\nURL: https://mariadb.com/kb/en/inet6/') WHERE help_topic_id = 274; insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (275,23,'JSON Data Type','MariaDB starting with 10.2.7\n----------------------------\nThe JSON alias was added in MariaDB 10.2.7. This was done to make it possible\nto use JSON columns in statement based replication from MySQL to MariaDB and\nto make it possible for MariaDB to read mysqldumps from MySQL.\n\nJSON is an alias for LONGTEXT introduced for compatibility reasons with\nMySQL\'s JSON data type. MariaDB implements this as a LONGTEXT rather, as the\nJSON data type contradicts the SQL standard, and MariaDB\'s benchmarks indicate\nthat performance is at least equivalent.\n\nIn order to ensure that a a valid json document is inserted, the JSON_VALID\nfunction can be used as a CHECK constraint. This constraint is automatically\nincluded for types using the JSON alias from MariaDB 10.4.3.\n\nExamples\n--------\n\nCREATE TABLE t (j JSON);\n\nDESC t;\n+-------+----------+------+-----+---------+-------+\n| Field | Type | Null | Key | Default | Extra |\n+-------+----------+------+-----+---------+-------+\n| j | longtext | YES | | NULL | |\n+-------+----------+------+-----+---------+-------+\n\nWith validation:\n\nCREATE TABLE t2 (\n j JSON\n CHECK (JSON_VALID(j))\n);\n\nINSERT INTO t2 VALUES (\'invalid\');\nERROR 4025 (23000): CONSTRAINT `j` failed for `test`.`t2`\n\nINSERT INTO t2 VALUES (\'{\"id\": 1, \"name\": \"Monty\"}\');\nQuery OK, 1 row affected (0.13 sec)\n\nReplicating JSON Data Between MySQL and MariaDB\n-----------------------------------------------\n\nThe JSON type in MySQL stores the JSON object in a compact form, not as\nLONGTEXT as in MariaDB. This means that row based replication will not work\nfor JSON types from MySQL to MariaDB.\n\nThere are a a few different ways to solve this:\n\n* Use statement based replication.\n* Change the JSON column to type TEXT in MySQL\n* If you must use row-based replication and cannot change the MySQL master\nfrom JSON to TEXT, you can try to introduce an intermediate MySQL slave and\nchange the column type from JSON to TEXT on it. Then you replicate from this\nintermediate slave to MariaDB.\n\nConverting a MySQL TABLE with JSON Fields to MariaDB\n----------------------------------------------------\n\nMariaDB can\'t directly access MySQL\'s JSON format.\n\nThere are a a few different ways to move the table to MariaDB:\n\n* From MariaDB 10.5.7, see the you can use the mysql_json plugin. See Making\nMariaDB understand MySQL JSON.\n* Change the JSON column to type TEXT in MySQL. After this, MariaDB can\ndirectly use the table without any need for a dump and restore.\n* Use mariadb-dump/mysqldump to copy the table.\n\nDifferences Between MySQL JSON Strings and MariaDB JSON Strings\n---------------------------------------------------------------\n\n* In MySQL, JSON is an object and is compared according to json values. In\nMariaDB JSON strings are normal strings and compared as strings. One exception\nis when using JSON_EXTRACT() in which case strings are unescaped before\ncomparison.\n\nURL: https://mariadb.com/kb/en/json-data-type/','','https://mariadb.com/kb/en/json-data-type/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (276,23,'MEDIUMBLOB','Syntax\n------\n\nMEDIUMBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 16,777,215 (224 - 1) bytes. Each\nMEDIUMBLOB value is stored using a three-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumblob/','','https://mariadb.com/kb/en/mediumblob/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (277,23,'MEDIUMTEXT','Syntax\n------\n\nMEDIUMTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 16,777,215 (224 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach MEDIUMTEXT value is stored using a three-byte length prefix that\nindicates the number of bytes in the value.\n\nURL: https://mariadb.com/kb/en/mediumtext/','','https://mariadb.com/kb/en/mediumtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (278,23,'LONGBLOB','Syntax\n------\n\nLONGBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 4,294,967,295 bytes or 4GB (232 - 1).\nThe effective maximum length of LONGBLOB columns depends on the configured\nmaximum packet size in the client/server protocol and available memory. Each\nLONGBLOB value is stored using a four-byte length prefix that indicates the\nnumber of bytes in the value.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, BLOB is a synonym for LONGBLOB.\n\nURL: https://mariadb.com/kb/en/longblob/','','https://mariadb.com/kb/en/longblob/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (279,23,'LONGTEXT','Syntax\n------\n\nLONGTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 4,294,967,295 or 4GB (232 - 1)\ncharacters. The effective maximum length is less if the value contains\nmulti-byte characters. The effective maximum length of LONGTEXT columns also\ndepends on the configured maximum packet size in the client/server protocol\nand available memory. Each LONGTEXT value is stored using a four-byte length\nprefix that indicates the number of bytes in the value.\n\nFrom MariaDB 10.2.7, JSON is an alias for LONGTEXT. See JSON Data Type for\ndetails.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, CLOB is a synonym for LONGTEXT.\n\nURL: https://mariadb.com/kb/en/longtext/','','https://mariadb.com/kb/en/longtext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (280,23,'ROW','MariaDB starting with 10.3.0\n----------------------------\nThe ROW data type was introduced in MariaDB 10.3.0.\n\nSyntax\n------\n\nROW ( [{, }... ])\n\nDescription\n-----------\n\nROW is a data type for stored procedure variables.\n\nFeatures\n--------\n\nROW fields as normal variables\n------------------------------\n\nROW fields (members) act as normal variables, and are able to appear in all\nquery parts where a stored procedure variable is allowed:\n\n* Assignment is using the := operator and the SET command:\n\na.x:= 10;\na.x:= b.x;\nSET a.x= 10, a.y=20, a.z= b.z;\n\n* Passing to functions and operators:\n\nSELECT f1(rec.a), rec.a<10;\n\n* Clauses (select list, WHERE, HAVING, LIMIT, etc...,):\n\nSELECT var.a, t1.b FROM t1 WHERE t1.b=var.b LIMIT var.c;\n\n* INSERT values:\n\nINSERT INTO t1 VALUES (rec.a, rec.b, rec.c);\n\n* SELECT .. INTO targets\n\nSELECT a,b INTO rec.a, rec.b FROM t1 WHERE t1.id=10;\n\n* Dynamic SQL out parameters (EXECUTE and EXECUTE IMMEDIATE)\n\nEXECUTE IMMEDIATE \'CALL proc_with_out_param(?)\' USING rec.a;\n\nROW type variables as FETCH targets\n-----------------------------------\n\nROW type variables are allowed as FETCH targets:\n\nFETCH cur INTO rec;\n\nwhere cur is a CURSOR and rec is a ROW type stored procedure variable.\n\nNote, currently an attempt to use FETCH for a ROW type variable returns this\nerror:\n\nERROR 1328 (HY000): Incorrect number of FETCH variables\n\nFETCH from a cursor cur into a ROW variable rec works as follows:\n\n* The number of fields in cur must match the number of fields in rec.\n Otherwise, an error is reported.\n\n* Assignment is done from left to right. The first cursor field is assigned to\n the first variable field, the second cursor field is assigned to the second\n variable field, etc.\n\n* Field names in rec are not important and can differ from field names\n in cur.\n\nSee FETCH Examples (below) for examples of using this with sql_mode=ORACLE and\nsql_mode=DEFAULT.\n\nROW type variables as SELECT...INTO targets\n-------------------------------------------\n\nROW type variables are allowed as SELECT..INTO targets with some differences\ndepending on which sql_mode is in use.\n\n* When using sql_mode=ORACLE, table%ROWTYPE and cursor%ROWTYPE\n variables can be used as SELECT...INTO targets.\n\n* Using multiple ROW variables in the SELECT..INTO list will report an\n error.\n\n* Using ROW variables with a different column count than in\n the SELECT..INTO list will report an error.\n\nSee SELECT...INTO Examples (below) for examples of using this with\nsql_mode=ORACLE and sql_mode=DEFAULT.\n\nFeatures not implemented\n------------------------\n\nThe following features are planned, but not implemented yet:\n\n* Returning a ROW type expression from a stored function (see MDEV-12252).\nThis will need some grammar change to support field names after parentheses:\n\nSELECT f1().x FROM DUAL;\n\n* Returning a ROW type expression from a built-in hybrid type function, such\nas CASE, IF, etc. \n* ROW of ROWs\n\nExamples\n--------\n\nDeclaring a ROW in a stored procedure\n-------------------------------------\n\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE r ROW (c1 INT, c2 VARCHAR(10));\n SET r.c1= 10;\n SET r.c2= \'test\';\n INSERT INTO t1 VALUES (r.c1, r.c2);\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nFETCH Examples\n--------------\n\nA complete FETCH example for sql_mode=ORACLE:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=oracle;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec ROW(a INT, b VARCHAR(32));\n CURSOR c IS SELECT a,b FROM t1;\nBEGIN\n OPEN c;\n LOOP\n FETCH c INTO rec;\n EXIT WHEN c%NOTFOUND;\n SELECT (\'rec=(\' || rec.a ||\',\'|| rec.b||\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nA complete FETCH example for sql_mode=DEFAULT:\n\nDROP TABLE IF EXISTS t1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nINSERT INTO t1 VALUES (20,\'b20\');\nINSERT INTO t1 VALUES (30,\'b30\');\n\nSET sql_mode=DEFAULT;\nDROP PROCEDURE IF EXISTS p1;\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE done INT DEFAULT FALSE;\n DECLARE rec ROW(a INT, b VARCHAR(32));\n DECLARE c CURSOR FOR SELECT a,b FROM t1;\n DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;\n OPEN c;\nread_loop:\n LOOP\n FETCH c INTO rec;\n IF done THEN\n LEAVE read_loop;\n END IF;\n SELECT CONCAT(\'rec=(\',rec.a,\',\',rec.b,\')\');\n END LOOP;\n CLOSE c;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nSELECT...INTO Examples\n----------------------\n\nA SELECT...INTO example for sql_mode=DEFAULT:\n\nSET sql_mode=DEFAULT;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1()\nBEGIN\n DECLARE rec1 ROW(a INT, b VARCHAR(32));\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nA SELECT...INTO example for sql_mode=ORACLE:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 ROW(a INT, b VARCHAR(32));\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using table%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n rec1 t1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nAn example for sql_mode=ORACLE using cursor%ROWTYPE variables as SELECT..INTO\ntargets:\n\nSET sql_mode=ORACLE;\nDROP TABLE IF EXISTS t1;\nDROP PROCEDURE IF EXISTS p1;\nCREATE TABLE t1 (a INT, b VARCHAR(32));\nINSERT INTO t1 VALUES (10,\'b10\');\nDELIMITER $$\nCREATE PROCEDURE p1 AS\n CURSOR cur1 IS SELECT * FROM t1;\n rec1 cur1%ROWTYPE;\nBEGIN\n SELECT * FROM t1 INTO rec1;\n SELECT rec1.a, rec1.b;\nEND;\n$$\nDELIMITER ;\nCALL p1();\n\nThe above example returns:\n\n+--------+--------+\n| rec1.a | rec1.b |\n+--------+--------+\n| 10 | b10 |\n+--------+--------+\n\nURL: https://mariadb.com/kb/en/row/','','https://mariadb.com/kb/en/row/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (281,23,'TEXT','Syntax\n------\n\nTEXT[(M)] [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 65,535 (216 - 1) characters. The\neffective maximum length is less if the value contains multi-byte characters.\nEach TEXT value is stored using a two-byte length prefix that indicates the\nnumber of bytes in the value. If you need a bigger storage, consider using\nMEDIUMTEXT instead.\n\nAn optional length M can be given for this type. If this is done, MariaDB\ncreates the column as the smallest TEXT type large enough to hold values M\ncharacters long.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat TEXT (as well as VARCHAR and CHAR values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces.\n\nBefore MariaDB 10.2.1, BLOB and TEXT columns could not be assigned a DEFAULT\nvalue. This restriction was lifted in MariaDB 10.2.1.\n\nExamples\n--------\n\nTrailing spaces:\n\nCREATE TABLE strtest (d TEXT(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT d=\'Maria\',d=\'Maria \' FROM strtest;\n+-----------+--------------+\n| d=\'Maria\' | d=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT d LIKE \'Maria\',d LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| d LIKE \'Maria\' | d LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nIndexing\n--------\n\nTEXT columns can only be indexed over a specified length. This means that they\ncannot be used as the primary key of a table norm until MariaDB 10.4, can a\nunique index be created on them.\n\nMariaDB starting with 10.4\n--------------------------\nStarting with MariaDB 10.4, a unique index can be created on a TEXT column.\n\nInternally, this uses hash indexing to quickly check the values and if a hash\ncollision is found, the actual stored values are compared in order to retain\nthe uniqueness.\n\nDifference between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/text/','','https://mariadb.com/kb/en/text/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (282,23,'TINYBLOB','Syntax\n------\n\nTINYBLOB\n\nDescription\n-----------\n\nA BLOB column with a maximum length of 255 (28 - 1) bytes. Each TINYBLOB value\nis stored using a one-byte length prefix that indicates the number of bytes in\nthe value.\n\nURL: https://mariadb.com/kb/en/tinyblob/','','https://mariadb.com/kb/en/tinyblob/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (283,23,'TINYTEXT','Syntax\n------\n\nTINYTEXT [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA TEXT column with a maximum length of 255 (28 - 1) characters. The effective\nmaximum length is less if the value contains multi-byte characters. Each\nTINYTEXT value is stored using a one-byte length prefix that indicates the\nnumber of bytes in the value.\n\nURL: https://mariadb.com/kb/en/tinytext/','','https://mariadb.com/kb/en/tinytext/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (284,23,'VARBINARY','Syntax\n------\n\nVARBINARY(M)\n\nDescription\n-----------\n\nThe VARBINARY type is similar to the VARCHAR type, but stores binary byte\nstrings rather than non-binary character strings. M represents the maximum\ncolumn length in bytes.\n\nIt contains no character set, and comparison and sorting are based on the\nnumeric value of the bytes.\n\nIf the maximum length is exceeded, and SQL strict mode is not enabled , the\nextra characters will be dropped with a warning. If strict mode is enabled, an\nerror will occur.\n\nUnlike BINARY values, VARBINARYs are not right-padded when inserting.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, RAW is a synonym for VARBINARY.\n\nExamples\n--------\n\nInserting too many characters, first with strict mode off, then with it on:\n\nCREATE TABLE varbins (a VARBINARY(10));\n\nINSERT INTO varbins VALUES(\'12345678901\');\nQuery OK, 1 row affected, 1 warning (0.04 sec)\n\nSELECT * FROM varbins;\n+------------+\n| a |\n+------------+\n| 1234567890 |\n+------------+\n\nSET sql_mode=\'STRICT_ALL_TABLES\';\n\nINSERT INTO varbins VALUES(\'12345678901\');\nERROR 1406 (22001): Data too long for column \'a\' at row 1\n\nSorting is performed with the byte value:\n\nTRUNCATE varbins;\n\nINSERT INTO varbins VALUES(\'A\'),(\'B\'),(\'a\'),(\'b\');\n\nSELECT * FROM varbins ORDER BY a;\n+------+\n| a |\n+------+\n| A |\n| B |\n| a |\n| b |\n+------+\n\nUsing CAST to sort as a CHAR instead:\n\nSELECT * FROM varbins ORDER BY CAST(a AS CHAR);\n+------+\n| a |\n+------+\n| a |\n| A |\n| b |\n| B |\n+------+\n\nURL: https://mariadb.com/kb/en/varbinary/','','https://mariadb.com/kb/en/varbinary/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (285,23,'VARCHAR','Syntax\n------\n\n[NATIONAL] VARCHAR(M) [CHARACTER SET charset_name] [COLLATE collation_name]\n\nDescription\n-----------\n\nA variable-length string. M represents the maximum column length in\ncharacters. The range of M is 0 to 65,532. The effective maximum length of a\nVARCHAR is subject to the maximum row size and the character set used. For\nexample, utf8 characters can require up to three bytes per character, so a\nVARCHAR column that uses the utf8 character set can be declared to be a\nmaximum of 21,844 characters.\n\nNote: For the ColumnStore engine, M represents the maximum column length in\nbytes.\n\nMariaDB stores VARCHAR values as a one-byte or two-byte length prefix plus\ndata. The length prefix indicates the number of bytes in the value. A VARCHAR\ncolumn uses one length byte if values require no more than 255 bytes, two\nlength bytes if values may require more than 255 bytes.\n\nMariaDB follows the standard SQL specification, and does not remove trailing\nspaces from VARCHAR values.\n\nVARCHAR(0) columns can contain 2 values: an empty string or NULL. Such columns\ncannot be part of an index. The CONNECT storage engine does not support\nVARCHAR(0).\n\nVARCHAR is shorthand for CHARACTER VARYING. NATIONAL VARCHAR is the standard\nSQL way to define that a VARCHAR column should use some predefined character\nset. MariaDB uses utf8 as this predefined character set, as does MySQL 4.1 and\nup. NVARCHAR is shorthand for NATIONAL VARCHAR.\n\nBefore MariaDB 10.2, all MariaDB collations were of type PADSPACE, meaning\nthat VARCHAR (as well as CHAR and TEXT values) are compared without regard for\ntrailing spaces. This does not apply to the LIKE pattern-matching operator,\nwhich takes into account trailing spaces. From MariaDB 10.2, a number of NO\nPAD collations are available.\n\nIf a unique index consists of a column where trailing pad characters are\nstripped or ignored, inserts into that column where values differ only by the\nnumber of trailing pad characters will result in a duplicate-key error.\n\nExamples\n--------\n\nThe following are equivalent:\n\nVARCHAR(30) CHARACTER SET utf8\nNATIONAL VARCHAR(30)\nNVARCHAR(30)\nNCHAR VARCHAR(30)\nNATIONAL CHARACTER VARYING(30)\nNATIONAL CHAR VARYING(30)\n\nTrailing spaces:\n\nCREATE TABLE strtest (v VARCHAR(10));\nINSERT INTO strtest VALUES(\'Maria \');\n\nSELECT v=\'Maria\',v=\'Maria \' FROM strtest;\n+-----------+--------------+\n| v=\'Maria\' | v=\'Maria \' |\n+-----------+--------------+\n| 1 | 1 |\n+-----------+--------------+\n\nSELECT v LIKE \'Maria\',v LIKE \'Maria \' FROM strtest;\n+----------------+-------------------+\n| v LIKE \'Maria\' | v LIKE \'Maria \' |\n+----------------+-------------------+\n| 0 | 1 |\n+----------------+-------------------+\n\nTruncation\n----------\n\n* Depending on whether or not strict sql mode is set, you will either get a\nwarning or an error if you try to insert a string that is too long into a\nVARCHAR column. If the extra characters are spaces, the spaces that can\'t fit\nwill be removed and you will always get a warning, regardless of the sql mode\nsetting.\n\nDifference Between VARCHAR and TEXT\n-----------------------------------\n\n* VARCHAR columns can be fully indexed. TEXT columns can only be indexed over\na specified length.\n* Using TEXT or BLOB in a SELECT query that uses temporary tables for storing\nintermediate results will force the temporary table to be disk based (using\nthe Aria storage engine instead of the memory storage engine, which is a bit\nslower. This is not that bad as the Aria storage engine caches the rows in\nmemory. To get the benefit of this, one should ensure that the\naria_pagecache_buffer_size variable is big enough to hold most of the row and\nindex data for temporary tables.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, VARCHAR2 is a synonym.\n\nFor Storage Engine Developers\n-----------------------------\n\n* Internally the full length of the VARCHAR column is allocated inside each\nTABLE objects record[] structure. As there are three such buffers, each open\ntable will allocate 3 times max-length-to-store-varchar bytes of memory.\n* TEXT and BLOB columns are stored with a pointer (4 or 8 bytes) + a 1-4 bytes\nlength. The TEXT data is only stored once. This means that internally TEXT\nuses less memory for each open table but instead has the additional overhead\nthat each TEXT object needs to be allocated and freed for each row access\n(with some caching in between).\n\nURL: https://mariadb.com/kb/en/varchar/','','https://mariadb.com/kb/en/varchar/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (286,23,'SET Data Type','Syntax\n------\n\nSET(\'value1\',\'value2\',...) [CHARACTER SET charset_name] [COLLATE\ncollation_name]\n\nDescription\n-----------\n\nA set. A string object that can have zero or more values, each of which must\nbe chosen from the list of values \'value1\', \'value2\', ... A SET column can\nhave a maximum of 64 members. SET values are represented internally as\nintegers.\n\nSET values cannot contain commas.\n\nIf a SET contains duplicate values, an error will be returned if strict mode\nis enabled, or a warning if strict mode is not enabled.\n\nURL: https://mariadb.com/kb/en/set-data-type/','','https://mariadb.com/kb/en/set-data-type/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (287,23,'DATE','Syntax\n------\n\nDATE\n\nDescription\n-----------\n\nA date. The supported range is \'1000-01-01\' to \'9999-12-31\'. MariaDB displays\nDATE values in \'YYYY-MM-DD\' format, but can be assigned dates in looser\nformats, including strings or numbers, as long as they make sense. These\ninclude a short year, YY-MM-DD, no delimiters, YYMMDD, or any other acceptable\ndelimiter, for example YYYY/MM/DD. For details, see date and time literals.\n\n\'0000-00-00\' is a permitted special value (zero-date), unless the NO_ZERO_DATE\nSQL_MODE is used. Also, individual components of a date can be set to 0 (for\nexample: \'2015-00-12\'), unless the NO_ZERO_IN_DATE SQL_MODE is used. In many\ncases, the result of en expression involving a zero-date, or a date with\nzero-parts, is NULL. If the ALLOW_INVALID_DATES SQL_MODE is enabled, if the\nday part is in the range between 1 and 31, the date does not produce any\nerror, even for months that have less than 31 days.\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATE);\n\nINSERT INTO t1 VALUES (\"2010-01-12\"), (\"2011-2-28\"), (\'120314\'),(\'13*04*21\');\n\nSELECT * FROM t1;\n+------------+\n| d |\n+------------+\n| 2010-01-12 |\n| 2011-02-28 |\n| 2012-03-14 |\n| 2013-04-21 |\n+------------+\n\nURL: https://mariadb.com/kb/en/date/','','https://mariadb.com/kb/en/date/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (288,23,'TIME','Syntax\n------\n\nTIME [()]\n\nDescription\n-----------\n\nA time. The range is \'-838:59:59.999999\' to \'838:59:59.999999\'. Microsecond\nprecision can be from 0-6; if not specified 0 is used. Microseconds have been\navailable since MariaDB 5.3.\n\nMariaDB displays TIME values in \'HH:MM:SS.ssssss\' format, but allows\nassignment of times in looser formats, including \'D HH:MM:SS\', \'HH:MM:SS\',\n\'HH:MM\', \'D HH:MM\', \'D HH\', \'SS\', or \'HHMMSS\', as well as permitting dropping\nof any leading zeros when a delimiter is provided, for example \'3:9:10\'. For\ndetails, see date and time literals.\n\nMariaDB starting with 10.1.2\n----------------------------\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store TIMEs using the same low-level format MySQL 5.6\nuses.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a TIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col TIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_time\\G\n*************************** 1. row ***************************\n Table: mariadb5312_time\nCreate Table: CREATE TABLE `mariadb5312_time` (\n `t0` time /* mariadb-5.3 */ DEFAULT NULL,\n `t6` time(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nNote, columns with the current format are not marked with a comment.\n\nExamples\n--------\n\nINSERT INTO time VALUES (\'90:00:00\'), (\'800:00:00\'), (800), (22), (151413),\n(\'9:6:3\'), (\'12 09\');\n\nSELECT * FROM time;\n+-----------+\n| t |\n+-----------+\n| 90:00:00 |\n| 800:00:00 |\n| 00:08:00 |\n| 00:00:22 |\n| 15:14:13 |\n| 09:06:03 |\n| 297:00:00 |\n+-----------+\n\nURL: https://mariadb.com/kb/en/time/','','https://mariadb.com/kb/en/time/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (289,23,'DATETIME','Syntax\n------\n\nDATETIME [(microsecond precision)]\n\nDescription\n-----------\n\nA date and time combination.\n\nMariaDB displays DATETIME values in \'YYYY-MM-DD HH:MM:SS.ffffff\' format, but\nallows assignment of values to DATETIME columns using either strings or\nnumbers. For details, see date and time literals.\n\nDATETIME columns also accept CURRENT_TIMESTAMP as the default value.\n\nMariaDB 10.1.2 introduced the --mysql56-temporal-format option, on by default,\nwhich allows MariaDB to store DATETMEs using the same low-level format MySQL\n5.6 uses. For more information, see Internal Format, below.\n\nFor storage requirements, see Data Type Storage Requirements.\n\nSupported Values\n----------------\n\nMariaDB stores values that use the DATETIME data type in a format that\nsupports values between 1000-01-01 00:00:00.000000 and 9999-12-31\n23:59:59.999999.\n\nMariaDB can also store microseconds with a precision between 0 and 6. If no\nmicrosecond precision is specified, then 0 is used by default.\n\nMariaDB also supports \'0000-00-00\' as a special zero-date value, unless\nNO_ZERO_DATE is specified in the SQL_MODE. Similarly, individual components of\na date can be set to 0 (for example: \'2015-00-12\'), unless NO_ZERO_IN_DATE is\nspecified in the SQL_MODE. In many cases, the result of en expression\ninvolving a zero-date, or a date with zero-parts, is NULL. If the\nALLOW_INVALID_DATES SQL_MODE is enabled, if the day part is in the range\nbetween 1 and 31, the date does not produce any error, even for months that\nhave less than 31 days.\n\nTime Zones\n----------\n\nIf a column uses the DATETIME data type, then any inserted values are stored\nas-is, so no automatic time zone conversions are performed.\n\nMariaDB also does not currently support time zone literals that contain time\nzone identifiers. See MDEV-11829 for more information.\n\nMariaDB validates DATETIME literals against the session\'s time zone. For\nexample, if a specific time range never occurred in a specific time zone due\nto daylight savings time, then DATETIME values within that range would be\ninvalid for that time zone.\n\nFor example, daylight savings time started on March 10, 2019 in the US, so the\ntime range between 02:00:00 and 02:59:59 is invalid for that day in US time\nzones:\n\nSET time_zone = \'America/New_York\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nERROR 1292 (22007): Incorrect datetime value: \'2019-03-10 02:55:05\' for column\n`db1`.`timestamp_test`.`timestamp_test` at row 1\n\nBut that same time range is fine in other time zones, such as Coordinated\nUniversal Time (UTC). For example:\n\nSET time_zone = \'UTC\';\nQuery OK, 0 rows affected (0.000 sec)\n\nINSERT INTO timestamp_test VALUES (\'2019-03-10 02:55:05\');\nQuery OK, 1 row affected (0.002 sec)\n\nOracle Mode\n-----------\n\nMariaDB starting with 10.3\n--------------------------\nIn Oracle mode from MariaDB 10.3, DATE with a time portion is a synonym for\nDATETIME. See also mariadb_schema.\n\nInternal Format\n---------------\n\nIn MariaDB 10.1.2 a new temporal format was introduced from MySQL 5.6 that\nalters how the TIME, DATETIME and TIMESTAMP columns operate at lower levels.\nThese changes allow these temporal data types to have fractional parts and\nnegative values. You can disable this feature using the\nmysql56_temporal_format system variable.\n\nTables that include TIMESTAMP values that were created on an older version of\nMariaDB or that were created while the mysql56_temporal_format system variable\nwas disabled continue to store data using the older data type format.\n\nIn order to update table columns from the older format to the newer format,\nexecute an ALTER TABLE... MODIFY COLUMN statement that changes the column to\nthe *same* data type. This change may be needed if you want to export the\ntable\'s tablespace and import it onto a server that has\nmysql56_temporal_format=ON set (see MDEV-15225).\n\nFor instance, if you have a DATETIME column in your table:\n\nSHOW VARIABLES LIKE \'mysql56_temporal_format\';\n\n+-------------------------+-------+\n| Variable_name | Value |\n+-------------------------+-------+\n| mysql56_temporal_format | ON |\n+-------------------------+-------+\n\nALTER TABLE example_table MODIFY ts_col DATETIME;\n\nWhen MariaDB executes the ALTER TABLE statement, it converts the data from the\nolder temporal format to the newer one.\n\nIn the event that you have several tables and columns using temporal data\ntypes that you want to switch over to the new format, make sure the system\nvariable is enabled, then perform a dump and restore using mysqldump. The\ncolumns using relevant temporal data types are restored using the new temporal\nformat.\n\nStarting from MariaDB 10.5.1 columns with old temporal formats are marked with\na /* mariadb-5.3 */ comment in the output of SHOW CREATE TABLE, SHOW COLUMNS,\nDESCRIBE statements, as well as in the COLUMN_TYPE column of the\nINFORMATION_SCHEMA.COLUMNS Table.\n\nSHOW CREATE TABLE mariadb5312_datetime\\G\n*************************** 1. row ***************************\n Table: mariadb5312_datetime\nCreate Table: CREATE TABLE `mariadb5312_datetime` (\n `dt0` datetime /* mariadb-5.3 */ DEFAULT NULL,\n `dt6` datetime(6) /* mariadb-5.3 */ DEFAULT NULL\n) ENGINE=MyISAM DEFAULT CHARSET=latin1\n\nExamples\n--------\n\nCREATE TABLE t1 (d DATETIME);\n\nINSERT INTO t1 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t1;\n+---------------------+\n| d |\n+---------------------+\n| 2011-03-11 00:00:00 |\n| 2012-04-19 13:08:22 |\n| 2013-07-18 13:44:22 |\n+---------------------+\n\nCREATE TABLE t2 (d DATETIME(6));\n\nINSERT INTO t2 VALUES (\"2011-03-11\"), (\"2012-04-19 13:08:22\"),\n (\"2013-07-18 13:44:22.123456\");\n\nSELECT * FROM t2;\n+----------------------------+\n| d |\n+----------------------------+\n| 2011-03-11 00:00:00.000000 |\n| 2012-04-19 13:08:22.000000 |\n| 2013-07-18 13:44:22.123456 |\n+----------------------------++\n\nStrings used in datetime context are automatically converted to datetime(6).\nIf you want to have a datetime without seconds, you should use\nCONVERT(..,datetime).\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime);\n+-----------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime) |\n+-----------------------------------------+\n| 2007-11-30 10:30:19 |\n+-----------------------------------------+\n\nSELECT CONVERT(\'2007-11-30 10:30:19\',datetime(6));\n+--------------------------------------------+\n| CONVERT(\'2007-11-30 10:30:19\',datetime(6)) |\n+--------------------------------------------+\n| 2007-11-30 10:30:19.000000 |\n+--------------------------------------------+\n\nURL: https://mariadb.com/kb/en/datetime/','','https://mariadb.com/kb/en/datetime/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (290,23,'TIMESTAMP','Syntax\n------\n\nTIMESTAMP [(0) THEN BEGIN NOT ATOMIC SELECT 1; END ; END IF;;\n\nExample of how to use WHILE loop:\n\nDELIMITER |\nBEGIN NOT ATOMIC\n DECLARE x INT DEFAULT 0;\n WHILE x <= 10 DO\n SET x = x + 1;\n SELECT x;\n END WHILE;\nEND|\nDELIMITER ;\n\nURL:\nhttps://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/','','https://mariadb.com/kb/en/using-compound-statements-outside-of-stored-programs/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (294,24,'BEGIN END','Syntax\n------\n\n[begin_label:] BEGIN [NOT ATOMIC]\n [statement_list]\nEND [end_label]\n\nNOT ATOMIC is required when used outside of a stored procedure. Inside stored\nprocedures or within an anonymous block, BEGIN alone starts a new anonymous\nblock.\n\nDescription\n-----------\n\nBEGIN ... END syntax is used for writing compound statements. A compound\nstatement can contain multiple statements, enclosed by the BEGIN and END\nkeywords. statement_list represents a list of one or more statements, each\nterminated by a semicolon (i.e., ;) statement delimiter. statement_list is\noptional, which means that the empty compound statement (BEGIN END) is legal.\n\nNote that END will perform a commit. If you are running in autocommit mode,\nevery statement will be committed separately. If you are not running in\nautocommit mode, you must execute a COMMIT or ROLLBACK after END to get the\ndatabase up to date.\n\nUse of multiple statements requires that a client is able to send statement\nstrings containing the ; statement delimiter. This is handled in the mysql\ncommand-line client with the DELIMITER command. Changing the ;\nend-of-statement delimiter (for example, to //) allows ; to be used in a\nprogram body.\n\nA compound statement within a stored program can be labeled. end_label cannot\nbe given unless begin_label also is present. If both are present, they must be\nthe same.\n\nBEGIN ... END constructs can be nested. Each block can define its own\nvariables, a CONDITION, a HANDLER and a CURSOR, which don\'t exist in the outer\nblocks. The most local declarations override the outer objects which use the\nsame name (see example below).\n\nThe declarations order is the following:\n\n* DECLARE local variables;\n* DECLARE CONDITIONs;\n* DECLARE CURSORs;\n* DECLARE HANDLERs;\n\nNote that DECLARE HANDLER contains another BEGIN ... END construct.\n\nHere is an example of a very simple, anonymous block:\n\nBEGIN NOT ATOMIC\nSET @a=1;\nCREATE TABLE test.t1(a INT);\nEND|\n\nBelow is an example of nested blocks in a stored procedure:\n\nCREATE PROCEDURE t( )\nBEGIN\n DECLARE x TINYINT UNSIGNED DEFAULT 1;\n BEGIN\n DECLARE x CHAR(2) DEFAULT \'02\';\n DECLARE y TINYINT UNSIGNED DEFAULT 10;\n SELECT x, y;\n END;\n SELECT x;\nEND;\n\nIn this example, a TINYINT variable, x is declared in the outter block. But in\nthe inner block x is re-declared as a CHAR and an y variable is declared. The\ninner SELECT shows the \"new\" value of x, and the value of y. But when x is\nselected in the outer block, the \"old\" value is returned. The final SELECT\ndoesn\'t try to read y, because it doesn\'t exist in that context.\n\nURL: https://mariadb.com/kb/en/begin-end/','','https://mariadb.com/kb/en/begin-end/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (295,24,'CASE Statement','Syntax\n------\n\nCASE case_value\n WHEN when_value THEN statement_list\n [WHEN when_value THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nOr:\n\nCASE\n WHEN search_condition THEN statement_list\n [WHEN search_condition THEN statement_list] ...\n [ELSE statement_list]\nEND CASE\n\nDescription\n-----------\n\nThe text on this page describes the CASE statement for stored programs. See\nthe CASE OPERATOR for details on the CASE operator outside of stored programs.\n\nThe CASE statement for stored programs implements a complex conditional\nconstruct. If a search_condition evaluates to true, the corresponding SQL\nstatement list is executed. If no search condition matches, the statement list\nin the ELSE clause is executed. Each statement_list consists of one or more\nstatements.\n\nThe CASE statement cannot have an ELSE NULL clause, and it is terminated with\nEND CASE instead of END. implements a complex conditional construct. If a\nsearch_condition evaluates to true, the corresponding SQL statement list is\nexecuted. If no search condition matches, the statement list in the ELSE\nclause is executed. Each statement_list consists of one or more statements.\n\nIf no when_value or search_condition matches the value tested and the CASE\nstatement contains no ELSE clause, a Case not found for CASE statement error\nresults.\n\nEach statement_list consists of one or more statements; an empty\nstatement_list is not allowed. To handle situations where no value is matched\nby any WHEN clause, use an ELSE containing an empty BEGIN ... END block, as\nshown in this example:\n\nDELIMITER |\nCREATE PROCEDURE p()\nBEGIN\n DECLARE v INT DEFAULT 1;\n CASE v\n WHEN 2 THEN SELECT v;\n WHEN 3 THEN SELECT 0;\n ELSE BEGIN END;\n END CASE;\nEND;\n|\n\nThe indentation used here in the ELSE clause is for purposes of clarity only,\nand is not otherwise significant. See Delimiters in the mysql client for more\non the use of the delimiter command.\n\nNote: The syntax of the CASE statement used inside stored programs differs\nslightly from that of the SQL CASE expression described in CASE OPERATOR. The\nCASE statement cannot have an ELSE NULL clause, and it is terminated with END\nCASE instead of END.\n\nURL: https://mariadb.com/kb/en/case-statement/','','https://mariadb.com/kb/en/case-statement/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (296,24,'DECLARE CONDITION','Syntax\n------\n\nDECLARE condition_name CONDITION FOR condition_value\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | mysql_error_code\n\nDescription\n-----------\n\nThe DECLARE ... CONDITION statement defines a named error condition. It\nspecifies a condition that needs specific handling and associates a name with\nthat condition. Later, the name can be used in a DECLARE ... HANDLER, SIGNAL\nor RESIGNAL statement (as long as the statement is located in the same BEGIN\n... END block).\n\nConditions must be declared after local variables, but before CURSORs and\nHANDLERs.\n\nA condition_value for DECLARE ... CONDITION can be an SQLSTATE value (a\n5-character string literal) or a MySQL error code (a number). You should not\nuse SQLSTATE value \'00000\' or MySQL error code 0, because those indicate\nsucess rather than an error condition. If you try, or if you specify an\ninvalid SQLSTATE value, an error like this is produced:\n\nERROR 1407 (42000): Bad SQLSTATE: \'00000\'\n\nFor a list of SQLSTATE values and MariaDB error codes, see MariaDB Error Codes.\n\nURL: https://mariadb.com/kb/en/declare-condition/','','https://mariadb.com/kb/en/declare-condition/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (297,24,'DECLARE HANDLER','Syntax\n------\n\nDECLARE handler_type HANDLER\n FOR condition_value [, condition_value] ...\n statement\n\nhandler_type:\n CONTINUE\n | EXIT\n | UNDO\n\ncondition_value:\n SQLSTATE [VALUE] sqlstate_value\n | condition_name\n | SQLWARNING\n | NOT FOUND\n | SQLEXCEPTION\n | mariadb_error_code\n\nDescription\n-----------\n\nThe DECLARE ... HANDLER statement specifies handlers that each may deal with\none or more conditions. If one of these conditions occurs, the specified\nstatement is executed. statement can be a simple statement (for example, SET\nvar_name = value), or it can be a compound statement written using BEGIN and\nEND.\n\nHandlers must be declared after local variables, a CONDITION and a CURSOR.\n\nFor a CONTINUE handler, execution of the current program continues after\nexecution of the handler statement. For an EXIT handler, execution terminates\nfor the BEGIN ... END compound statement in which the handler is declared.\n(This is true even if the condition occurs in an inner block.) The UNDO\nhandler type statement is not supported.\n\nIf a condition occurs for which no handler has been declared, the default\naction is EXIT.\n\nA condition_value for DECLARE ... HANDLER can be any of the following values:\n\n* An SQLSTATE value (a 5-character string literal) or a MariaDB error\ncode (a number). You should not use SQLSTATE value \'00000\' or MariaDB\nerror code 0, because those indicate sucess rather than an error\ncondition. For a list of SQLSTATE values and MariaDB error codes, see\nMariaDB Error Codes.\n* A condition name previously specified with DECLARE ... CONDITION. It must be\nin the same stored program. See DECLARE CONDITION.\n* SQLWARNING is shorthand for the class of SQLSTATE values that begin\nwith \'01\'.\n* NOT FOUND is shorthand for the class of SQLSTATE values that begin\nwith \'02\'. This is relevant only the context of cursors and is used to\ncontrol what happens when a cursor reaches the end of a data set. If\nno more rows are available, a No Data condition occurs with SQLSTATE\nvalue 02000. To detect this condition, you can set up a handler for it\n(or for a NOT FOUND condition). An example is shown in Cursor Overview. This\ncondition also occurs for SELECT ... INTO var_list statements that retrieve no\nrows.\n* SQLEXCEPTION is shorthand for the class of SQLSTATE values that do\nnot begin with \'00\', \'01\', or \'02\'.\n\nWhen an error raises, in some cases it could be handled by multiple HANDLERs.\nFor example, there may be an handler for 1050 error, a separate handler for\nthe 42S01 SQLSTATE, and another separate handler for the SQLEXCEPTION class:\nin theory all occurrences of HANDLER may catch the 1050 error, but MariaDB\nchooses the HANDLER with the highest precedence. Here are the precedence rules:\n\n* Handlers which refer to an error code have the highest precedence.\n* Handlers which refer to a SQLSTATE come next.\n* Handlers which refer to an error class have the lowest precedence.\n\nIn some cases, a statement could produce multiple errors. If this happens, in\nsome cases multiple handlers could have the highest precedence. In such cases,\nthe choice of the handler is indeterminate.\n\nNote that if an error occurs within a CONTINUE HANDLER block, it can be\nhandled by another HANDLER. However, a HANDLER which is already in the stack\n(that is, it has been called to handle an error and its execution didn\'t\nfinish yet) cannot handle new errors—this prevents endless loops. For example,\nsuppose that a stored procedure contains a CONTINUE HANDLER for SQLWARNING and\nanother CONTINUE HANDLER for NOT FOUND. At some point, a NOT FOUND error\noccurs, and the execution enters the NOT FOUND HANDLER. But within that\nhandler, a warning occurs, and the execution enters the SQLWARNING HANDLER. If\nanother NOT FOUND error occurs, it cannot be handled again by the NOT FOUND\nHANDLER, because its execution is not finished.\n\nWhen a DECLARE HANDLER block can handle more than one error condition, it may\nbe useful to know which errors occurred. To do so, you can use the GET\nDIAGNOSTICS statement.\n\nAn error that is handled by a DECLARE HANDLER construct can be issued again\nusing the RESIGNAL statement.\n\nBelow is an example using DECLARE HANDLER:\n\nCREATE TABLE test.t (s1 INT, PRIMARY KEY (s1));\n\nDELIMITER //\n\nCREATE PROCEDURE handlerdemo ( )\n BEGIN\n DECLARE CONTINUE HANDLER FOR SQLSTATE \'23000\' SET @x2 = 1;\n SET @x = 1;\n INSERT INTO test.t VALUES (1);\n SET @x = 2;\n INSERT INTO test.t VALUES (1);\n SET @x = 3;\n END;\n //\n\nDELIMITER ;\n\nCALL handlerdemo( );\n\nSELECT @x;\n+------+\n| @x |\n+------+\n| 3 |\n+------+\n\nURL: https://mariadb.com/kb/en/declare-handler/','','https://mariadb.com/kb/en/declare-handler/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (298,24,'DECLARE Variable','Syntax\n------\n\nDECLARE var_name [, var_name] ... [[ROW] TYPE OF]] type [DEFAULT value]\n\nDescription\n-----------\n\nThis statement is used to declare local variables within stored programs. To\nprovide a default value for the variable, include a DEFAULT clause. The value\ncan be specified as an expression (even subqueries are permitted); it need not\nbe a constant. If the DEFAULT clause is missing, the initial value is NULL.\n\nLocal variables are treated like stored routine parameters with respect to\ndata type and overflow checking. See CREATE PROCEDURE.\n\nLocal variables must be declared before CONDITIONs, CURSORs and HANDLERs.\n\nLocal variable names are not case sensitive.\n\nThe scope of a local variable is within the BEGIN ... END block where it is\ndeclared. The variable can be referred to in blocks nested within the\ndeclaring block, except those blocks that declare a variable with the same\nname.\n\nTYPE OF / ROW TYPE OF\n---------------------\n\nMariaDB starting with 10.3\n--------------------------\nTYPE OF and ROW TYPE OF anchored data types for stored routines were\nintroduced in MariaDB 10.3.\n\nAnchored data types allow a data type to be defined based on another object,\nsuch as a table row, rather than specifically set in the declaration. If the\nanchor object changes, so will the anchored data type. This can lead to\nroutines being easier to maintain, so that if the data type in the table is\nchanged, it will automatically be changed in the routine as well.\n\nVariables declared with ROW TYPE OF will have the same features as implicit\nROW variables. It is not possible to use ROW TYPE OF variables in a LIMIT\nclause.\n\nThe real data type of TYPE OF and ROW TYPE OF table_name will become known at\nthe very beginning of the stored routine call. ALTER TABLE or DROP TABLE\nstatements performed inside the current routine on the tables that appear in\nanchors won\'t affect the data type of the anchored variables, even if the\nvariable is declared after an ALTER TABLE or DROP TABLE statement.\n\nThe real data type of a ROW TYPE OF cursor_name variable will become known\nwhen execution enters into the block where the variable is declared. Data type\ninstantiation will happen only once. In a cursor ROW TYPE OF variable that is\ndeclared inside a loop, its data type will become known on the very first\niteration and won\'t change on further loop iterations.\n\nThe tables referenced in TYPE OF and ROW TYPE OF declarations will be checked\nfor existence at the beginning of the stored routine call. CREATE PROCEDURE or\nCREATE FUNCTION will not check the referenced tables for existence.\n\nExamples\n--------\n\nTYPE OF and ROW TYPE OF from MariaDB 10.3:\n\nDECLARE tmp TYPE OF t1.a; -- Get the data type from the column {{a}} in the\ntable {{t1}}\n\nDECLARE rec1 ROW TYPE OF t1; -- Get the row data type from the table {{t1}}\n\nDECLARE rec2 ROW TYPE OF cur1; -- Get the row data type from the cursor\n{{cur1}}\n\nURL: https://mariadb.com/kb/en/declare-variable/','','https://mariadb.com/kb/en/declare-variable/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (299,24,'FOR','MariaDB starting with 10.3\n--------------------------\nFOR loops were introduced in MariaDB 10.3.\n\nSyntax\n------\n\nInteger range FOR loop:\n\n[begin_label:]\nFOR var_name IN [ REVERSE ] lower_bound .. upper_bound\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nDO statement_list\nEND FOR [ end_label ]\n\nExplicit cursor FOR loop (Oracle mode)\n\n[begin_label:]\nFOR record_name IN cursor_name [ ( cursor_actual_parameter_list)]\nLOOP\n statement_list\nEND LOOP [ end_label ]\n\nImplicit cursor FOR loop\n\n[begin_label:]\nFOR record_name IN ( select_statement )\nDO statement_list\nEND FOR [ end_label ]\n\nDescription\n-----------\n\nFOR loops allow code to be executed a fixed number of times.\n\nIn an integer range FOR loop, MariaDB will compare the lower bound and upper\nbound values, and assign the lower bound value to a counter. If REVERSE is not\nspecified, and the upper bound value is greater than or equal to the counter,\nthe counter will be incremented and the statement will continue, after which\nthe loop is entered again. If the upper bound value is greater than the\ncounter, the loop will be exited.\n\nIf REVERSE is specified, the counter is decremented, and the upper bound value\nneeds to be less than or equal for the loop to continue.\n\nExamples\n--------\n\nIntger range FOR loop:\n\nCREATE TABLE t1 (a INT);\n\nDELIMITER //\n\nFOR i IN 1..3\nDO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 1 |\n| 2 |\n| 3 |\n+------+\n\nREVERSE integer range FOR loop:\n\nCREATE OR REPLACE TABLE t1 (a INT);\n\nDELIMITER //\nFOR i IN REVERSE 4..12\n DO\n INSERT INTO t1 VALUES (i);\nEND FOR;\n//\nQuery OK, 9 rows affected (0.422 sec)\n\nDELIMITER ;\n\nSELECT * FROM t1;\n+------+\n| a |\n+------+\n| 12 |\n| 11 |\n| 10 |\n| 9 |\n| 8 |\n| 7 |\n| 6 |\n| 5 |\n| 4 |\n+------+\n\nExplicit cursor in Oracle mode:\n\nSET sql_mode=ORACLE;\n\nCREATE OR REPLACE TABLE t1 (a INT, b VARCHAR(32));\n\nINSERT INTO t1 VALUES (10,\'b0\');\nINSERT INTO t1 VALUES (11,\'b1\');\nINSERT INTO t1 VALUES (12,\'b2\');\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1(pa INT) AS \n CURSOR cur(va INT) IS\n SELECT a, b FROM t1 WHERE a=va;\nBEGIN\n FOR rec IN cur(pa)\n LOOP\n SELECT rec.a, rec.b;\n END LOOP;\nEND;\n//\n\nDELIMITER ;\n\nCALL p1(10);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 10 | b0 |\n+-------+-------+\n\nCALL p1(11);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 11 | b1 |\n+-------+-------+\n\nCALL p1(12);\n+-------+-------+\n| rec.a | rec.b |\n+-------+-------+\n| 12 | b2 |\n+-------+-------+\n\nCALL p1(13);\nQuery OK, 0 rows affected (0.000 sec)\n\nURL: https://mariadb.com/kb/en/for/','','https://mariadb.com/kb/en/for/'); insert into help_topic (help_topic_id,help_category_id,name,description,example,url) values (300,24,'GOTO','MariaDB starting with 10.3\n--------------------------\nThe GOTO statement was introduced in MariaDB 10.3 for Oracle compatibility.\n\nSyntax\n------\n\nGOTO label\n\nDescription\n-----------\n\nThe GOTO statement causes the code to jump to the specified label, and\ncontinue operating from there. It is only accepted when in Oracle mode.\n\nExample\n-------\n\nSET sql_mode=ORACLE;\n\nDELIMITER //\n\nCREATE OR REPLACE PROCEDURE p1 AS\n\nBEGIN\n\nSELECT 1;\n GOTO label;\n SELECT 2;\n <