mysqld can issue error messages in the following languages: Czech,
Dutch, English (the default), Estonia, French, German, Hungarian, Italian,
Norwegian, Norwegian-ny, Polish, Portuguese, Spanish and Swedish.
mysqld with a particular language, use either the
-L lang options. For example:
shell> mysqld --language=swedish
shell> mysqld --language=/usr/local/share/swedish
Note that all language names are specified in lowercase.
The language files are located (by default) in `mysql_base_dir/share/LANGUAGE/'.
To update the error message file, you should edit the `errmsg.txt' file and execute the following command to generate the `errmsg.sys' file:
shell> comp_err errmsg.txt errmsg.sys
If you upgrade to a newer version of MySQL, remember to repeat your changes with the new `errmsg.txt' file.
By default, MySQL uses the ISO-8859-1 (Latin1) character set. This is the character set used in the USA and western Europe.
The character set determines what characters are allowed in names and how
things are sorted by the
ORDER BY and
GROUP BY clauses of
You can change the character set at compile time by using the
--with-charset=charset option to
See section 4.7.1 Quick installation overview.
To add another character set to MySQL, use the following procedure:
to_lower_MYSETand so on.
to_upperare simple arrays that hold the lowercase and uppercase characters corresponding to each member of the character set. For example:
to_lower['A'] should contain 'a' to_upper['a'] should contain 'A'
sort_orderis a map indicating how characters should be ordered for comparison and sorting purposes. For many character sets, this is the same as
to_upper(which means sorting will be case insensitive). MySQL will sort characters based on the value of
ctypeis an array of bit values, with one element for one character. (Note that
sort_orderare indexed by character value, but
ctypeis indexed by character value + 1. This is an old legacy to be able to handle EOF.) You can find the following bitmask definitions in `m_ctype.h':
#define _U 01 /* Upper case */ #define _L 02 /* Lower case */ #define _N 04 /* Numeral (digit) */ #define _S 010 /* Spacing character */ #define _P 020 /* Punctuation */ #define _C 040 /* Control character */ #define _B 0100 /* Blank */ #define _X 0200 /* heXadecimal digit */The
ctypeentry for each character should be the union of the applicable bitmask values that describe the character. For example,
'A'is an uppercase character (
_U) as well as a hexadecimal digit (
ctype['A'+1]should contain the value:
_U + _X = 01 + 0200 = 0201
If you are creating a multi-byte character set, you can use the
_MB macros. In `include/m_ctype.h.in', add:
#define MY_CHARSET_MYSET X #if MY_CHARSET_CURRENT == MY_CHARSET_MYSET #define USE_MB #define USE_MB_IDENT #define ismbchar(p, end) (...) #define ismbhead(c) (...) #define mbcharlen(c) (...) #define MBMAXLEN N #endif
|A unique character set value.|
| This character set has multi-byte
characters, handled by |
|(optional) If defined, you can use table and column names that use multi-byte characters|
| return 0 if |
| True if |
| Size of a multi-byte character string if
|Size in bytes of the largest character in the set|
When started with the
writes a log file containing all SQL commands that update data. The file is
written in the data directory and has a name of
# is a number that is incremented each time you execute
mysqladmin refresh or
mysqladmin flush-logs, the
LOGS statement, or restart the
If you use the
mysqld writes a
general log with a filename of `hostname.log', and restarts and
refreshes do not cause a new log file to be generated (although it is closed
and reopened). By default, the
mysql.server script starts the
MySQL server with the
-l option. If you need better
performance when you start using MySQL in a production environment,
you can remove the
-l option from
Update logging is smart since it logs only statements that really update
data. So an
UPDATE or a
DELETE with a
WHERE that finds no
rows is not written to the log. It even skips
UPDATE statements that
set a column to the value it already has.
If you want to update a database from update log files, you could do the following (assuming your update logs have names of the form `file_name.#'):
shell> ls -1 -t -r file_name.[0-9]* | xargs cat | mysql
ls is used to get all the log files in the right order.
This can be useful if you have to revert to backup files after a crash and you want to redo the updates that occurred between the time of the backup and the crash.
You can also use the update logs when you have a mirrored database on another host and you want to replicate the changes that have been made to the master database.
MySQL 3.22 has a 4G limit on table size. With the new MyISAM in MySQL 3.23 the maximum table size is pushed up to 8 million terabytes (2 ^ 63 bytes).
Note however that operating systems have their own file size limits. On Linux, the current limit is 2G; on Solaris 2.5.1, the limit is 4G; on Solaris 2.6, the limit is 1000G. This means that the table size for MySQL is normally limited by the operating system.
By default, MySQL tables have a maximum size of about 4G. You can
check the maximum table size for a table with the
SHOW TABLE STATUS
command or with the
myisamchk -dv table_name.
See section 7.21
SHOW syntax (Get information about tables, columns,...).
If you need bigger tables than 4G (and your operating system supports
this), you should set the
parameter when you create your table. See section 7.7
CREATE TABLE syntax. You can
also set these later with
ALTER TABLE. See section 7.8
ALTER TABLE syntax.
If your big table is going to be read-only, you could use
myisampack to merge and compress many tables to one.
myisampack usually compresses a table by at least 50%, so you can
have, in effect, much bigger tables. See section 12.7 The MySQL compressed read-only table generator.
Another solution can be the included MERGE library, which allows you to handle a collection of identical tables as one. (Identical in this case means that all tables are created with identical column information.) Currently MERGE can only be used to scan a collection of tables because it doesn't support indexes. We will add indexes to this in the near future.
With MySQL you can currently (version 3.23.6) choose between three basic
table formats. When you create a new table, you can tell MySQL
which table type it should use for the table. MySQL will
always create a
.frm file to hold the table and column
definitions. Depending on the table type the index and data will be
stored in other files.
You can convert tables between different types with the
TABLE statement. See section 7.8
ALTER TABLE syntax.
MyISAMis the default table type in MySQL 3.23. It's based on the
ISAMcode and has a lot of useful extensions. The index is stored in a file with the
.MYI(MYindex) extension and the data is stored in file with the
.MYD(MYData) extension. You can check/repair
MyISAMtables with the
myisamchkutility. See section 13.4 Using
myisamchkfor crash recovery. The following is new in
INSERTnew rows in a table without deleted rows, at the same times as other threads are reading from the table.
MyISAMwill automatically update this on
AUTO_INCREMENTvalue can be reset with
myisamchk. This will make
AUTO_INCREMENTcolumns faster and old numbers will not be reused as with the old ISAM. Note that when a
AUTO_INCREMENTis defined on the end of a multi-part-key the old behavior is still present.
TEXTcolumns can be indexed.
NULLvalues are allowed in indexed columns. This takes 0-1 bytes/key.
MyISAMfile that indicates whether or not the table was closed correctly. This will soon be used for automatic repair in the MySQL server.
myisamchkwill now mark tables as checked.
myisamchk --fastwill only check those tables that don't have this mark.
myisamchk -astores statistics for key parts (and not only for whole keys as in
MyISAMalso supports the following things, which MySQL will be able to use in the near future.
VARCHARcolumn starts with a length stored in 2 bytes.
VARCHARmay have fixed or dynamic record length.
CHARmay be up to 64K. All key segments have their own language definition. This will enable MySQL to have different language definitions per column.
UNIQUE; This will allow you to have
UNIQUEon any combination of columns in a table. (You can't search on a
UNIQUEcomputed index, however.)
MyISAMis a better implementation of the same thing. ISAM uses a
B-treeindex. The index is stored in a file with the
.ISMextension and the data is stored in file with the
.ISDextension. You can check/repair ISAM tables with the
isamchkutility. See section 13.4 Using
myisamchkfor crash recovery. ISAM tables are not binary portable across OS/Platforms.
ISAMhas the following features/properties:
HEAPtables use a hashed index and are stored in memory. This makes them very fast, but if MySQL crashes you will lose all data stored in them.
HEAPis very usable as temporary tables!
CREATE TABLE test TYPE=HEAP SELECT ip,SUM(downloads) as down FROM log_table GROUP BY ip; SELECT COUNT(ip),AVG(down) FROM test; DROP TABLE test;Here are some things you should consider when you use
CREATEstatement to ensure that you accidently do not use all memory.
<=>(but are VERY fast).
HEAPtables uses a fixed record length format.
HEAPdoesn't support an index on a
HEAPtable (not that normal with hashed tables).
HEAPtables are shared between all clients (just like any other table).
HEAPtables are allocated in small blocks. The tables are 100% dynamic (on inserting). No overflow areas and no extra key space is needed. Deleted rows are put in a linked list and will be reused when you insert new data into the table.
DELETE FROM heap_tableor
DROP TABLE heap_table.
HEAPtables bigger than
Go to the first, previous, next, last section, table of contents.