- 10.1.9.1 The utf8 Character Set (3-Byte UTF-8 Unicode Encoding)
- 10.1.9.2 The utf8mb3 Character Set (Alias for utf8)
- 10.1.9.3 The utf8mb4 Character Set (4-Byte UTF-8 Unicode Encoding)
- 10.1.9.4 The ucs2 Character Set (UCS-2 Unicode Encoding)
- 10.1.9.5 The utf16 Character Set (UTF-16 Unicode Encoding)
- 10.1.9.6 The utf16le Character Set (UTF-16LE Unicode Encoding)
- 10.1.9.7 The utf32 Character Set (UTF-32 Unicode Encoding)
- 10.1.9.8 Converting Between 3-Byte and 4-Byte Unicode Character Sets
The Unicode Standard includes characters from the Basic Multilingual Plane (BMP) and supplementary characters that lie outside the BMP. This section describes support for Unicode in MySQL. For information about the Unicode Standard itself, visit the Unicode Consortium Web site.
BMP characters have these characteristics:
Their code point values are between 0 and 65535 (or
They can be encoded in a variable-length encoding using 8, 16, or 24 bits (1 to 3 bytes).
They can be encoded in a fixed-length encoding using 16 bits (2 bytes).
They are sufficient for almost all characters in major languages.
Supplementary characters lie outside the BMP. Their code point
values are between
U+10FFFF). Unicode support for supplementary
characters requires character sets that have a range outside BMP
characters and therefore take more space than BMP characters.
MySQL supports these Unicode character sets:
utf8, a UTF-8 encoding of the Unicode character set using one to three bytes per character.
ucs2, the UCS-2 encoding of the Unicode character set using two bytes per character.
utf8mb4, a UTF-8 encoding of the Unicode character set using one to four bytes per character.
utf16, the UTF-16 encoding for the Unicode character set using two or four bytes per character. Like
ucs2but with an extension for supplementary characters.
utf16le, the UTF-16LE encoding for the Unicode character set. Like
utf16but little-endian rather than big-endian.
utf32, the UTF-32 encoding for the Unicode character set using four bytes per character.
Table 10.2, “Unicode Character Set General Characteristics”, summarizes the general characteristics of Unicode character sets supported by MySQL.
Table 10.2 Unicode Character Set General Characteristics
|Character Set||Supported Characters||Required Storage Per Character|
||BMP only||1, 2, or 3 bytes|
||BMP only||2 bytes|
||BMP and supplementary||1, 2, 3, or 4 bytes|
||BMP and supplementary||2 or 4 bytes|
||BMP and supplementary||2 or 4 bytes|
||BMP and supplementary||4 bytes|
Characters outside the BMP compare as REPLACEMENT CHARACTER and
'?' when converted to a Unicode
character set that supports only BMP characters
If you use character sets that support supplementary characters
and thus are “wider” than the BMP-only
sets, there are potential incompatibility issues for your
applications; see Section 10.1.9.8, “Converting Between 3-Byte and 4-Byte Unicode Character Sets”.
That section also describes how to convert tables from
utf8 to the (4-byte)
utf8mb4 character set, and what constraints
may apply in doing so.
A similar set of collations is available for most Unicode
character sets. For example, each has a Danish collation, the
names of which are
utf8mb4_danish_ci. The exception is
utf16le, which has only two collations. For
information about Unicode collations and their differentiating
properties, including collation properties for supplementary
characters, see Section 10.1.10.1, “Unicode Character Sets”.
The MySQL implementation of UCS-2, UTF-16, and UTF-32 stores characters in big-endian byte order and does not use a byte order mark (BOM) at the beginning of values. Other database systems might use little-endian byte order or a BOM. In such cases, conversion of values will need to be performed when transferring data between those systems and MySQL. The implementation of UTF-16LE is little-endian.
MySQL uses no BOM for UTF-8 values.
Client applications that communicate with the server using
Unicode should set the client character set accordingly; for
example, by issuing a
SET NAMES 'utf8'
be used as a client character set, which means that they do not
SET NAMES or
SET CHARACTER SET. (See
Section 10.1.4, “Connection Character Sets and Collations”.)
The following sections provide additional detail on the Unicode character sets in MySQL.