MySQL Protocol

This document descibes the MySQL network protocol version 10, as of February 2005 (MySQL 4.1.9). It has been produced by reading mysql_com.h, libmysql.c, net.c, sql_parse.cc and sql_show.cc in the MySQL source.

History

Protocol version 9 was used by MySQL clients and servers before version 3.21. It is unlikely to still be in use, as modern clients cannot connect to version 9 servers. The primary difference between protocol 9 and 10 is in the password algorithm.

Protocol 10 is used by MySQL 3.22 and later. MySQL 4.0 brought in replication, and MySQL 4.1 brought in a new password algorithm, together with a number of protocol extensions, such as multi-statements. It is thus hard for older clients to interoperate properly with a new server, even if the server has been setup with pre-4.1 passwords.

This document describes the 4.1.x protocol only; the previous document can be used to determine the changes for older versions.

Protocol Basics

The protocol requires first that a client and server negotiate a connection, including agreeing about protocol features and authentication. This is followed by a series of requests from the client and reponses from the server, until either the client issues a QUIT request or the connection is broken.

MySQL uses either a Unix domain socket (usually /tmp/mysql.sock or /var/run/mysqld/mysql.sock), an MS Windows named pipe (usually \\hostname\pipe\mysql), shared memory or a TCP port (usually 3306). It treats all communications methods identically.

Each client message is sent as a single MySQL 'packet'; a server response may consist of many packets. These packets are not related to the underlying network layer packets, and indeed many response packets may be contained in a single IP datagram.

Each packet begins with a 4-byte header. The first three header bytes give the body length as a Little-Endian integer (all MySQL integers are Little-Endian unless described otherwise). The fourth gives a packet number for this transaction, starting from 0, and including both client and server messages. The body of the message then follows.

All example packets are taken from a real system.

Connection

Once the transport-level connection is established, the connection negotiation starts with the server identifying itself.

Server greeting

The host sends an initial greeting similar to:

37 00 00 00 Body Length=55, packet=0
0aProtocol=10
34 2e 31 2e 39 2d 6c 6f 67 00 Version="4.1.9-log"
07 00 00 00 Thread ID=7
79 46 2f 57 48 43 57 6a 00Salt="yF/WHCWj"
2c a2 Caps=LONG_FLAG | CONNECT_WITH_DB | COMPRESS | TRANSACTIONS | PROTOCOL_41 | SECURE_CONNECTION
08Charset=Latin-1
02 00Status=AUTOCOMMIT
00 00 00 00 00 00 00 00 00 00 00 00 00 13 bytes unused
47 5b 72 4e 6c 58 52 72 66 2b 3f 3a 00 Rest of Salt="G[rNl XRrf+?:"

The first byte of the message body is the protocol version, currently 10. The protocol version is followed by a version string for the server, null-terminated - the -log suffix means logging is enabled. Following this is a 4-byte integer giving the thread ID of the server thread handling the request. Next come the first 8 bytes of a 'scramble string' salt for encryption, again null-terminated.

This is followed by a 2-byte integer describing the server's capabilities - this server can do LONG_FLAG and CONNECT_WITH_DB, as well as the more recent COMPRESS, TRANSACTIONS and SSL, and, as it's a 4.1.x server, PROTOCOL_41 and SECURE_CONNECTION. There follow 16 bytes of server characteristics: first a single byte giving the server character set and two bytes describing the server status; the rest is currently padded with NUL.

Finally, the remaining 12 bytes of the 'scramble string' are written if long 20-bytes scrambles are being used (as will usually be the case with 4.1.x servers that are not upgrades of previous servers).

Client authentication

The client now sends a request to the server, similar to:

3e 00 00 01 Body Length=62, packet=1
85 A6 03 00 Caps=LONG_PASSWORD | LONG_FLAG | TRANSACTIONS | INTERACTIVE | LOCAL_FILES | PROTOCOL_41 | SECURE_CONNECTION | MULTI_STATEMENTS | MULTI_RESULTS
00 00 00 01Max packet=224 bytes
08Charset = Latin-1
00 x 23For future expansion
72 65 64 66 65 72 6e 69 00User = "redferni"
14 ?? x 20Password = 20 bytes

This is the client's turn to send its capabilities in two bytes. These will always include LONG_PASSWORD, LONG_FLAG, TRANSACTIONS, PROTOCOL_41 and SECURE_CONNECTION for 4.1.x clients, and in this case include INTERACTIVE, LOCAL_FILES, MULTI_STATEMENTS and MULTI_RESULTS as well, as this is the standard MySQL command-line client.

This is followed by the maxiumum packet size (usually 16MB) and the client's character set, then 23 bytes of padding.

At this point the client will switch to SSL on the communications channel if it has set the SSL capability bit - which it will not do if the server has not also set that bit.

This is followed by the username, null-terminated, and the scrambled password (the example given here is not a real password) if a password is provided, preceded with a single byte giving its scrambled length (usually 20). If no password is provided, a single NUL is sent and no scramble is added.

If the client is trying to connect to a particular database and the server is capable of CONNECT_WITH_DB, it will add the database name as a null-terminated string (in UTF-8).

The client will now expect the server to send an OK simple response or an error. After an OK response, the flow of client commands can begin; after an error response the client closes the connection.

Under the very special circumstance that the server and client are use 4.1 extensions but the server still has an old password table, it will tell the client to resend the password using the old password protocol 10 algorithm by sending an end of data packet (the single byte 0xfe).

If the client and server are both capable of compression, and the client wants to use it (it usually has to be explicitly enabled), the client will now switch to using it. It follows the standard packet header with a three-byte compressed length. The compression mechanism used is standard zlib.

The client may (if it is the 'commercial', rather than free client) now check the server's licence by issuing a SELECT @@license statement and abort the connection if the server's licence does not match the client's.

Field-length encoding

When data is sent in tabular form, each field is preceded by its field length, encoded in the following manner:

ByteMeaning
0-250Same as byte
251NULL field
252Value in following 2 bytes
253Value in following 4 bytes
254Value in following 8 bytes

This mechanism is also used for encoding other integers efficiently.

Fields sent in this manner are marked (FLE).

Simple response

Most commands produce a simple 'OK' response. This will usually be of the form:

07 00 00 01 Body Length=7, packet=1
00Field count = 0 (FLE)
00Affected rows = 0 (FLE)
00Insert ID = 0 (FLE)
02 00Server status = AUTOCOMMIT
00 00Warning count = 0

In the case of an OK response to the initial authentication, of course, the packet number will be 2. It is possible that additional information may follow in FLE.

For an error, the response will be more like the following:

27 00 00 01 Body Length=39, packet=1
ffError
7a 04Error code=NO_SUCH_TABLE (1146)
54 61 62 6c 65 20 27 72 65 64 66 65 72 6e 69 2e 73 61 6d 70 6c 65 27 20 64 6f 65 73 6e 27 74 20 65 78 69 73 74 Error message="Table 'redferni.sample' doesn't exist"

The first byte of the error response body is set to 255.

If the body length is at least 4, then the packet contains a 2-byte error code, followed by the error message, of up to 200 characters.

There are 303 error codes, ranging from HASHCHK (1000) to CONFLICTING_DECLARATIONS (1302).

Commands

A simple command is sent in the form:

0f 00 00 00 Body Length=15, packet=0
03Command=QUERY
73 68 6f 77 20 64 61 74 61 62 61 73 65 73Arg="show databases"

The first byte is the command code, followed by an optional argument. Any command not explicitly listed, including any SQL command, is sent as QUERY, as in the example.

Disconnection

When the client wishes to disconnect, it sends a QUIT simple command and closes its end of the connection, as follows
01 00 00 00 Body Length=1, packet=0
01Command=QUIT

The server will close its end of the connection without further response.

Tabular response

When returning data as a table, as a response to a QUERY, FIELD_LIST or PROCESS_INFO command, MySQL first describes the fields in each row, then sends the rows.

The first packet contains the (non-zero) number of fields, and possibly the number of records.

01 00 00 01 Body Length=1, packet=1
01Number of fields = 1 (FLE)

This is followed by the field descriptions.

1e 00 00 02 Body Length=20, packet=2
03 64 65 66Catalogue = "def"
00DB = ""
00Table = ""
00Org table = ""
08 44 61 74 61 62 61 73 65Name = "Database"
00Org name = ""
0cFixed length part = 12 (FLE)
08 00Char set = Latin-1
40 00 00 00Length = 64
feType = STRING
01 00Flags = NOT_NULL
1fDecimals = 31
00 00Padding

There is one logical packet per field description. Each field description contains seven or eight parts, each preceded by their length in FLE: the catalogue, database, table, org table, field and org field names, a 12 byte fixed length set of field metadata, and an optional default value.

The metadata gives the field character set, type, flags and number of decimal places.

01 00 00 03 Body Length=1, packet=3
feEnd of field list

After all the field description packets, a packet with just a single byte of value 254 indicates the start of the rows.

09 00 00 04 Body Length=9, packet=4
06 41 73 68 6c 65 79Row 1 Col 1="Ashley"
01 31Row 1 Col 2=1

Each row is in a separate packet, with the field values preceded by a field length. All non-binary fields values are sent as text - in particular, all numeric fields appear as ASCII, and timestamps as YYYY-MM-DD HH:MM:SS.µµµµµµ. Trailing spaces are removed from char and varchar fields.

05 00 00 06 Body Length=5, packet=6
feEnd of row list
00 00Warning count = 0
02 00Server status = AUTOCOMMIT

After the last row, another packet holding the byte 254, but with length less than 8 indicates the end of the data. It is followed by two fields for warning count and server status - for some reason, these are the opposite way round to a simple response.

File upload

If a file is to be sent to the server, the following response is generated:

01 00 00 01 Body Length=1, packet=1
fb251 = Upload file

The file is sent by the client as a series of ordinary packets, with the final packet empty.

The server will respond, usually with a simple response.

Complex Responses

There are four commands that can return complex responses.

STATISTICS

The STATISTICS command response is simply a string describing the current server statistics.

FIELD_LIST

The FIELD_LIST command response is the same as the first part of a tabular response (the field descriptions) - with the exception that a default value may be attached to each field description.

PROCESS_INFO

The PROCESS_INFO command response is first a packet containing a field count, in FLE, followed by a tabular response.

QUERY

The QUERY command handles all SQL commands, as well as almost all client commands.

The first part of any response is a number of fields in FLE. A zero value indicates a simple response; a NULL value indicates a file upload and any other value indicates a tabular response.

Semantics

Many MySQL clients and drivers expect certain behaviour from the server, and perform queries behind the scenes. The important responses are shown below.

Getting current database and user

The mysql command-line client issues the request
select DATABASE(),USER()
when the user asks for the current status. It will expect the following response:

DATABASE()USER()
VARCHAR(34) NOT NULLVARCHAR(77) NOT NULL

The DATABASE() field may be empty. The USER() field is of the form user@host.

Status enquiry

The current status response is similar to:

Uptime: 129  Threads: 1  Questions: 6  Slow queries: 0  
Opens: 6  Flush tables: 1  Open tables: 0 Queries per second avg: 0.047

The mysql client assumes the number following the first space is a time and formats it appropriately.

Show status

Variable_nameValue
CHAR(30) NOT NULLCHAR(256) NOT NULL

Show databases

Database
CHAR(64) NOT NULL

Show tables

Tables_in_db
CHAR(64) NOT NULL

Show fields

FieldTypeNullKeyDefaultExtra
CHAR(64) NOT NULLCHAR(40) NOT NULLCHAR(1) NOT NULLCHAR(3) NOT NULLCHAR(64)CHAR(20) NOT NULL

The Null field takes values '' or 'YES' - this is presumably a bug. The Key field is 'PRI', 'UNI', 'MUL'or ''.

The same output is produced by show columns, desc or describe.

Show processlist

IdUserHostdbCommandTimeStateInfo
IntCHAR(16) NOT NULLCHAR(64) NOT NULLCHAR(64)CHAR(16) NOT NULLCHAR(7) NOT NULLCHAR(30)CHAR(100)

Show processlist full removes the size limit on the Info column.

Password algorithm

The new MySQL 4.1.x password algorithm is more complex and probably more secure than the older algorithms.

The client uses the salt sent by the server and its own knowledge of the password to produce a scrambled password that it sends to the server. The server does a similar calculation.

The hashing algorithm used is SHA1 - see RFC 2289, 3174

Scrambling operations

The client first calculates hash1 = SHA1(password), then hash2 = SHA1(hash1). The server already knows this, as that is what is held in its password table (preceded with a *).

It then appends hash2 to the salt sent by the server and hashes that, and finally exclusive ors the result with hash1.

So it sends to the server SHA1(password) XOR SHA1(salt.SHA1(SHA1(password)).

The server does effectively the same calculation and checks the result (though for some reason it prefers to undo the Exclusive-OR and compare with hash1).

Magic numbers

MySQL uses the following codes:

Capability nameValueMeaning
LONG_PASSWORD1New more secure passwords
FOUND_ROWS 2Found instead of affected rows
LONG_FLAG4Get all column flags
CONNECT_WITH_DB8One can specify db on connect
NO_SCHEMA16Don't allow database.table.column
COMPRESS 32Can use compression protocol
ODBC 64ODBC client
LOCAL_FILES128Can use LOAD DATA LOCAL
IGNORE_SPACE 256Ignore spaces before '('
PROTOCOL_41512Support the 4.1 protocol
INTERACTIVE1024This is an interactive client
SSL2048Switch to SSL after handshake
IGNORE_SIGPIPE 4096IGNORE sigpipes
TRANSACTIONS8192Client knows about transactions
SECURE_CONNECTION32768New 4.1 authentication
MULTI_STATEMENTS65536Multi-statement support
MULTI_RESULTS131072Multi-results
Capabilities

CommandCodeArgumentsAllowed from client
SLEEP0No
QUIT1""
INIT_DB2db
QUERY3query
FIELD_LIST4table
CREATE_DB5db
DROP_DB6db
REFRESH7option bits
SHUTDOWN8level (optional)
STATISTICS9
PROCESS_INFO10
CONNECT11No
PROCESS_KILL124-byte pid
DEBUG13
PING14
TIME15No
DELAYED_INSERT16No
CHANGE_USER17user
BINLOG_DUMP18
TABLE_DUMP19
CONNECT_OUT20No
REGISTER_SLAVE21No
PREPARE22query
EXECUTE23statement; params
LONG_DATA24statement; parameter; data
CLOSE_STMT25statement
RESET_STMT26statement
SET_OPTION272 byte flags
Commands

TypeCodeTypeCode
DECIMAL0ENUM247
TINY1SET248
SHORT2TINY_BLOB249
LONG3MEDIUM_BLOB250
FLOAT4LONG_BLOB251
DOUBLE5BLOB252
NULL6VAR_STRING253
TIMESTAMP7STRING254
LONGLONG8GEOMETRY255
INT249
DATE10
TIME11
DATETIME12
YEAR13
NEWDATE14
Field types

StatusCode
IN_TRANS1
AUTOCOMMIT2
MORE_RESULTS4
MORE_RESULTS_EXISTS8
QUERY_NO_GOOD_INDEX_USED16
QUERY_NO_INDEX_USED32
Status codes

CharsetCodeCharsetCode
big5_chinese_ci1latin1_general_cs49
latin2_czech_cs2cp1251_bin50
dec8_swedish_ci3cp1251_general_ci51
cp850_general_ci4cp1251_general_cs52
latin1_german1_ci5macroman_bin53
hp8_english_ci6macroman_ci54
koi8r_general_ci7macroman_ci_ai55
latin1_swedish_ci8macroman_cs56
latin2_general_ci9cp1256_general_ci57
swe7_swedish_ci10cp1257_bin58
ascii_general_ci11cp1257_general_ci59
ujis_japanese_ci12cp1257_ci60
sjis_japanese_ci13cp1257_cs61
cp1251_bulgarian_ci14binary63
latin1_danish_ci15armscii8_bin64
hebrew_general_ci16ascii_bin65
tis620_thai_ci18cp1250_bin66
euckr_korean_ci19cp1256_bin67
latin7_estonian_cs20cp866_bin68
latin2_hungarian_ci21dec8_bin69
koi8u_general_ci22greek_bin70
cp1251_ukrainian_ci23hebrew_bin71
gb2312_chinese_ci24hp8_bin72
greek_general_ci25keybcs2_bin73
cp1250_general_ci26koi8r_bin74
latin2_croatian_ci27koi8u_bin75
gbk_chinese_ci28latin2_bin77
cp1257_lithuanian_ci29latin5_bin78
latin5_turkish_ci30latin7_bin79
latin1_german2_ci31cp850_bin80
armscii8_general_ci32cp852_bin81
utf8_general_ci33swe7_bin82
cp1250_czech_cs34utf8_bin83
ucs2_general_ci35big5_bin84
cp866_general_ci36euckr_bin85
keybcs2_general_ci37gb231286
macce_general_ci38gbk_bin87
macroman_general_ci39sjis_bin88
cp852_general_ci40tis620_bin89
latin7_general_ci41ucs2_bin90
latin7_general_cs42ujis_bin91
macce_bin43geostd8_general_ci92
latin1_bin47geostd8_bin93
latin1_general_ci48latin1_spanish_ci94
Character sets

Field FlagValueMeaning
NOT_NULL1Field can't be NULL
PRI_KEY2Field is part of a primary key
UNIQUE_KEY4Field is part of a unique key
MULTIPLE_KEY8Field is part of a key
BLOB16Field is a blob
UNSIGNED32Field is unsigned
ZEROFILL64Field is zerofill
BINARY128Field is binary
ENUM256Field is an enum
AUTO_INCREMENT512Field is an autoincrement field
TIMESTAMP1024Field is a timestamp
SET2048Field is a set
NUM32768Field is num (for clients)
Field flags
ErrorValueErrorValue
HASHCHK1000ABORTING_CONNECTION1152
NISAMCHK1001NET_PACKET_TOO_LARGE1153
NO1002NET_READ_ERROR_FROM_PIPE1154
YES1003NET_FCNTL_ERROR1155
CANT_CREATE_FILE1004NET_PACKETS_OUT_OF_ORDER1156
CANT_CREATE_TABLE1005NET_UNCOMPRESS_ERROR1157
CANT_CREATE_DB1006NET_READ_ERROR1158
DB_CREATE_EXISTS1007NET_READ_INTERRUPTED1159
DB_DROP_EXISTS1008NET_ERROR_ON_WRITE1160
DB_DROP_DELETE1009NET_WRITE_INTERRUPTED1161
DB_DROP_RMDIR1010TOO_LONG_STRING1162
CANT_DELETE_FILE1011TABLE_CANT_HANDLE_BLOB1163
CANT_FIND_SYSTEM_REC1012TABLE_CANT_HANDLE_AUTO_INCREMENT1164
CANT_GET_STAT1013DELAYED_INSERT_TABLE_LOCKED1165
CANT_GET_WD1014WRONG_COLUMN_NAME1166
CANT_LOCK1015WRONG_KEY_COLUMN1167
CANT_OPEN_FILE1016WRONG_MRG_TABLE1168
FILE_NOT_FOUND1017DUP_UNIQUE1169
CANT_READ_DIR1018BLOB_KEY_WITHOUT_LENGTH1170
CANT_SET_WD1019PRIMARY_CANT_HAVE_NULL1171
CHECKREAD1020TOO_MANY_ROWS1172
DISK_FULL1021REQUIRES_PRIMARY_KEY1173
DUP_KEY1022NO_RAID_COMPILED1174
ERROR_ON_CLOSE1023UPDATE_WITHOUT_KEY_IN_SAFE_MODE1175
ERROR_ON_READ1024KEY_DOES_NOT_EXITS1176
ERROR_ON_RENAME1025CHECK_NO_SUCH_TABLE1177
ERROR_ON_WRITE1026CHECK_NOT_IMPLEMENTED1178
FILE_USED1027CANT_DO_THIS_DURING_AN_TRANSACTION1179
FILSORT_ABORT1028ERROR_DURING_COMMIT1180
FORM_NOT_FOUND1029ERROR_DURING_ROLLBACK1181
GET_ERRNO1030ERROR_DURING_FLUSH_LOGS1182
ILLEGAL_HA1031ERROR_DURING_CHECKPOINT1183
KEY_NOT_FOUND1032NEW_ABORTING_CONNECTION1184
NOT_FORM_FILE1033DUMP_NOT_IMPLEMENTED1185
NOT_KEYFILE1034FLUSH_MASTER_BINLOG_CLOSED1186
OLD_KEYFILE1035INDEX_REBUILD1187
OPEN_AS_READONLY1036MASTER1188
OUTOFMEMORY1037MASTER_NET_READ1189
OUT_OF_SORTMEMORY1038MASTER_NET_WRITE1190
UNEXPECTED_EOF1039FT_MATCHING_KEY_NOT_FOUND1191
CON_COUNT_ERROR1040LOCK_OR_ACTIVE_TRANSACTION1192
OUT_OF_RESOURCES1041UNKNOWN_SYSTEM_VARIABLE1193
BAD_HOST_ERROR1042CRASHED_ON_USAGE1194
HANDSHAKE_ERROR1043CRASHED_ON_REPAIR1195
DBACCESS_DENIED_ERROR1044WARNING_NOT_COMPLETE_ROLLBACK1196
ACCESS_DENIED_ERROR1045TRANS_CACHE_FULL1197
NO_DB_ERROR1046SLAVE_MUST_STOP1198
UNKNOWN_COM_ERROR1047SLAVE_NOT_RUNNING1199
BAD_NULL_ERROR1048BAD_SLAVE1200
BAD_DB_ERROR1049MASTER_INFO1201
TABLE_EXISTS_ERROR1050SLAVE_THREAD1202
BAD_TABLE_ERROR1051TOO_MANY_USER_CONNECTIONS1203
NON_UNIQ_ERROR1052SET_CONSTANTS_ONLY1204
SERVER_SHUTDOWN1053LOCK_WAIT_TIMEOUT1205
BAD_FIELD_ERROR1054LOCK_TABLE_FULL1206
WRONG_FIELD_WITH_GROUP1055READ_ONLY_TRANSACTION1207
WRONG_GROUP_FIELD1056DROP_DB_WITH_READ_LOCK1208
WRONG_SUM_SELECT1057CREATE_DB_WITH_READ_LOCK1209
WRONG_VALUE_COUNT1058WRONG_ARGUMENTS1210
TOO_LONG_IDENT1059NO_PERMISSION_TO_CREATE_USER1211
DUP_FIELDNAME1060UNION_TABLES_IN_DIFFERENT_DIR1212
DUP_KEYNAME1061LOCK_DEADLOCK1213
DUP_ENTRY1062TABLE_CANT_HANDLE_FT1214
WRONG_FIELD_SPEC1063CANNOT_ADD_FOREIGN1215
PARSE_ERROR1064NO_REFERENCED_ROW1216
EMPTY_QUERY1065ROW_IS_REFERENCED1217
NONUNIQ_TABLE1066CONNECT_TO_MASTER1218
INVALID_DEFAULT1067QUERY_ON_MASTER1219
MULTIPLE_PRI_KEY1068ERROR_WHEN_EXECUTING_COMMAND1220
TOO_MANY_KEYS1069WRONG_USAGE1221
TOO_MANY_KEY_PARTS1070WRONG_NUMBER_OF_COLUMNS_IN_SELECT1222
TOO_LONG_KEY1071CANT_UPDATE_WITH_READLOCK1223
KEY_COLUMN_DOES_NOT_EXITS1072MIXING_NOT_ALLOWED1224
BLOB_USED_AS_KEY1073DUP_ARGUMENT1225
TOO_BIG_FIELDLENGTH1074USER_LIMIT_REACHED1226
WRONG_AUTO_KEY1075SPECIFIC_ACCESS_DENIED_ERROR1227
READY1076LOCAL_VARIABLE1228
NORMAL_SHUTDOWN1077GLOBAL_VARIABLE1229
GOT_SIGNAL1078NO_DEFAULT1230
SHUTDOWN_COMPLETE1079WRONG_VALUE_FOR_VAR1231
FORCING_CLOSE1080WRONG_TYPE_FOR_VAR1232
IPSOCK_ERROR1081VAR_CANT_BE_READ1233
NO_SUCH_INDEX1082CANT_USE_OPTION_HERE1234
WRONG_FIELD_TERMINATORS1083NOT_SUPPORTED_YET1235
BLOBS_AND_NO_TERMINATED1084MASTER_FATAL_ERROR_READING_BINLOG1236
TEXTFILE_NOT_READABLE1085SLAVE_IGNORED_TABLE1237
FILE_EXISTS_ERROR1086INCORRECT_GLOBAL_LOCAL_VAR1238
LOAD_INFO1087WRONG_FK_DEF1239
ALTER_INFO1088KEY_REF_DO_NOT_MATCH_TABLE_REF1240
WRONG_SUB_KEY1089OPERAND_COLUMNS1241
CANT_REMOVE_ALL_FIELDS1090SUBQUERY_NO_1_ROW1242
CANT_DROP_FIELD_OR_KEY1091UNKNOWN_STMT_HANDLER1243
INSERT_INFO1092CORRUPT_HELP_DB1244
UPDATE_TABLE_USED1093CYCLIC_REFERENCE1245
NO_SUCH_THREAD1094AUTO_CONVERT1246
KILL_DENIED_ERROR1095ILLEGAL_REFERENCE1247
NO_TABLES_USED1096DERIVED_MUST_HAVE_ALIAS1248
TOO_BIG_SET1097SELECT_REDUCED1249
NO_UNIQUE_LOGFILE1098TABLENAME_NOT_ALLOWED_HERE1250
TABLE_NOT_LOCKED_FOR_WRITE1099NOT_SUPPORTED_AUTH_MODE1251
TABLE_NOT_LOCKED1100SPATIAL_CANT_HAVE_NULL1252
BLOB_CANT_HAVE_DEFAULT1101COLLATION_CHARSET_MISMATCH1253
WRONG_DB_NAME1102SLAVE_WAS_RUNNING1254
WRONG_TABLE_NAME1103SLAVE_WAS_NOT_RUNNING1255
TOO_BIG_SELECT1104TOO_BIG_FOR_UNCOMPRESS1256
UNKNOWN_ERROR1105ZLIB_Z_MEM_ERROR1257
UNKNOWN_PROCEDURE1106ZLIB_Z_BUF_ERROR1258
WRONG_PARAMCOUNT_TO_PROCEDURE1107ZLIB_Z_DATA_ERROR1259
WRONG_PARAMETERS_TO_PROCEDURE1108CUT_VALUE_GROUP_CONCAT1260
UNKNOWN_TABLE1109WARN_TOO_FEW_RECORDS1261
FIELD_SPECIFIED_TWICE1110WARN_TOO_MANY_RECORDS1262
INVALID_GROUP_FUNC_USE1111WARN_NULL_TO_NOTNULL1263
UNSUPPORTED_EXTENSION1112WARN_DATA_OUT_OF_RANGE1264
TABLE_MUST_HAVE_COLUMNS1113WARN_DATA_TRUNCATED1265
RECORD_FILE_FULL1114WARN_USING_OTHER_HANDLER1266
UNKNOWN_CHARACTER_SET1115CANT_AGGREGATE_2COLLATIONS1267
TOO_MANY_TABLES1116DROP_USER1268
TOO_MANY_FIELDS1117REVOKE_GRANTS1269
TOO_BIG_ROWSIZE1118CANT_AGGREGATE_3COLLATIONS1270
STACK_OVERRUN1119CANT_AGGREGATE_NCOLLATIONS1271
WRONG_OUTER_JOIN1120VARIABLE_IS_NOT_STRUCT1272
NULL_COLUMN_IN_INDEX1121UNKNOWN_COLLATION1273
CANT_FIND_UDF1122SLAVE_IGNORED_SSL_PARAMS1274
CANT_INITIALIZE_UDF1123SERVER_IS_IN_SECURE_AUTH_MODE1275
UDF_NO_PATHS1124WARN_FIELD_RESOLVED1276
UDF_EXISTS1125BAD_SLAVE_UNTIL_COND1277
CANT_OPEN_LIBRARY1126MISSING_SKIP_SLAVE1278
CANT_FIND_DL_ENTRY1127UNTIL_COND_IGNORED1279
FUNCTION_NOT_DEFINED1128WRONG_NAME_FOR_INDEX1280
HOST_IS_BLOCKED1129WRONG_NAME_FOR_CATALOG1281
HOST_NOT_PRIVILEGED1130WARN_QC_RESIZE1282
PASSWORD_ANONYMOUS_USER1131BAD_FT_COLUMN1283
PASSWORD_NOT_ALLOWED1132UNKNOWN_KEY_CACHE1284
PASSWORD_NO_MATCH1133WARN_HOSTNAME_WONT_WORK1285
UPDATE_INFO1134UNKNOWN_STORAGE_ENGINE1286
CANT_CREATE_THREAD1135WARN_DEPRECATED_SYNTAX1287
WRONG_VALUE_COUNT_ON_ROW1136NON_UPDATABLE_TABLE1288
CANT_REOPEN_TABLE1137FEATURE_DISABLED1289
INVALID_USE_OF_NULL1138OPTION_PREVENTS_STATEMENT1290
REGEXP_ERROR1139DUPLICATED_VALUE_IN_TYPE1291
MIX_OF_GROUP_FUNC_AND_FIELDS1140TRUNCATED_WRONG_VALUE1292
NONEXISTING_GRANT1141TOO_MUCH_AUTO_TIMESTAMP_COLS1293
TABLEACCESS_DENIED_ERROR1142INVALID_ON_UPDATE1294
COLUMNACCESS_DENIED_ERROR1143UNSUPPORTED_PS1295
ILLEGAL_GRANT_FOR_TABLE1144GET_ERRMSG1296
GRANT_WRONG_HOST_OR_USER1145GET_TEMPORARY_ERRMSG1297
NO_SUCH_TABLE1146UNKNOWN_TIME_ZONE1298
NONEXISTING_TABLE_GRANT1147WARN_INVALID_TIMESTAMP1299
NOT_ALLOWED_COMMAND1148INVALID_CHARACTER_STRING1300
SYNTAX_ERROR1149WARN_ALLOWED_PACKET_OVERFLOWED1301
DELAYED_CANT_CHANGE_LOCK1150CONFLICTING_DECLARATIONS1302
TOO_MANY_DELAYED_THREADS1151
Errors

$Rev: 189 $ $Date: 2006-12-20 21:20:56 +0000 (Wed, 20 Dec 2006) $
Ian Redfern (mysql(at)redferni.uklinux.net)

This document is in the public domain, and you may do anything with it you wish. The author takes no responsibility for the accuracy of its contents. Some of the terms in this document are trademarks of MySQL AB and other companies. No trade secrets or other privileged information has been used in its compilation, and the author has no relationship with MySQL.