For applications that store data using the default MySQL character set and collation ('latin1', 'latin1_swedish_ci'), no special configuration should be needed. If applications require data storage using a different character set or collation, you can configure character set information several ways:
Specify character settings per database. For example, applications that use one database might use the default of 'latin1', whereas applications that use another database might use 'sjis'.
Specify character settings at server startup. This causes the server to use the given settings for all applications that do not make other arrangements.
Specify character settings at configuration time, if you build MySQL from source. This causes the server to use the given settings as the defaults for all applications, without having to specify them at server startup.
When different applications require different character settings, the per-database technique provides a good deal of flexibility. If most or all applications use the same character set, specifying character settings at server startup or configuration time may be most convenient.
For the per-database or server-startup techniques, the settings control the character set for data storage. Applications must also tell the server which character set to use for client/server communications, as described in the following instructions.
The examples shown here assume use of the 'utf8' character set and 'utf8_general_ci' collation in particular contexts as an alternative to the defaults of 'latin1' and 'latin1_swedish_ci'.
Specify character settings per database
To create a database such that its tables use a given default character set and collation for data storage, use a *note 'CREATE DATABASE': create-database. statement like this:
CREATE DATABASE mydb
CHARACTER SET utf8
COLLATE utf8_general_ci;
Tables created in the database use 'utf8' and 'utf8_general_ci' by default for any character columns.
Applications that use the database should also configure their connection to the server each time they connect. This can be done by executing a 'SET NAMES 'utf8'' statement after connecting. The statement can be used regardless of connection method (the *note 'mysql': mysql. client, PHP scripts, and so forth).
In some cases, it may be possible to configure the connection to use the desired character set some other way. For example, to connect using *note 'mysql': mysql, you can specify the '--default-character-set=utf8' command-line option to achieve the same effect as 'SET NAMES 'utf8''.
For more information about configuring client connections, see *note charset-connection::.
Note:
If you use note 'ALTER DATABASE': alter-database. to change the database default character set or collation, existing stored routines in the database that use those defaults must be dropped and recreated so that they use the new defaults. (In a stored routine, variables with character data types use the database defaults if the character set or collation are not specified explicitly. See note create-procedure::.)
Specify character settings at server startup
To select a character set and collation at server startup, use the '--character-set-server' and '--collation-server' options. For example, to specify the options in an option file, include these lines:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
These settings apply server-wide and apply as the defaults for databases created by any application, and for tables created in those databases.
It is still necessary for applications to configure their connection using note 'SET NAMES': set-names. or equivalent after they connect, as described previously. You might be tempted to start the server with the '--init_connect="SET NAMES 'utf8'"' option to cause note 'SET NAMES': set-names. to be executed automatically for each client that connects. However, this may yield inconsistent results because the 'init_connect' value is not executed for users who have the 'SUPER' privilege.
Specify character settings at MySQL configuration time
To select a character set and collation if you configure and build MySQL from source, use the 'DEFAULT_CHARSET' and 'DEFAULT_COLLATION' 'CMake' options:
cmake . -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
The resulting server uses 'utf8' and 'utf8_general_ci' as the default for databases and tables and for client connections. It is unnecessary to use '--character-set-server' and '--collation-server' to specify those defaults at server startup. It is also unnecessary for applications to configure their connection using *note 'SET NAMES': set-names. or equivalent after they connect to the server.
' element:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
File: manual.info.tmp, Node: charset-errors, Next: charset-conversion, Prev: charset-applications, Up: charset