C++ CSS HTML Java JavaScript MySQL Oracle PERL PHP SQL Unix VBScript XHTML XML Сети
Operations Affected by Character Set Support (MySQL 4.0)
 
Operations Affected by Character Set Support
============================================

This section describes operations that take character set information
into account now.

Result Strings
--------------

MySQL has many operators and functions that return a string.  This
section answers the question: What is the character set and collation
of such a string?

For simple functions that take a string input and return a string
result as output, the output's character set and collation are the same
as the principal input's. For example, `UPPER(X)' returns a string
whose character string and collation are the same as that of `X'.  The
same applies for: `INSTR()', `LCASE()', `LOWER()', `LTRIM()', `MID()',
`REPEAT()', `REPLACE()', `REVERSE()', `RIGHT()', `RPAD()', `RTRIM()',
`SOUNDEX()', `SUBSTRING()', `TRIM()', `UCASE()', `UPPER()'.  (Also
note: the `REPLACE()' function, unlike all other functions, ignores the
collation of the string input and performs a case-insensitive
comparison every time.)

For operations that combine multiple string inputs and return a single
string output, SQL-99's "aggregation rules" apply.  They are:

   * If explicit `COLLATE X' occurs, then use `X'

   * If explicit `COLLATE X' and `COLLATE Y' occur, then error

   * Otherwise, if all collations are `X', then use `X'

   * Otherwise, the result has no collation


For example, with `CASE ... WHEN a THEN b WHEN b THEN c COLLATE X END',
the resultant collation is `X'. The same applies for: `CONCAT()',
`GREATEST()', `IF()', `LEAST()', `CASE', `UNION', `||', `ELT()'.

For operations that convert to character data, the result string's
character set and collation are in the connection/literals character
set and have the connection/literals collation.  This applies for:
`CHAR()', `CAST()', `CONV()', `FORMAT()'.  `HEX()', `SPACE()'.

`CONVERT()'
-----------

`CONVERT()' provides a way to convert data between different character
sets. The syntax is:

     CONVERT(expr USING transcoding_name)

In MySQL, transcoding names are the same as the corresponding character
set names.

Examples:

     SELECT CONVERT(_latin1'Mu"ller' USING utf8);
     INSERT INTO utf8table (utf8column)
        SELECT CONVERT(latin1field USING utf8) FROM latin1table;

`CONVERT(... USING ...)' is implemented according to the SQL-99
specification.

`CAST()'
--------

You may also use `CAST()' to convert a string to a different character
set. The new format is:

     CAST ( character_string AS character_data_type
         CHARACTER SET character_set_name )

Example:

     SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8);

You may not use a `COLLATE' clause inside a `CAST()', but you may use
it outside, that is, `CAST(... COLLATE ...)' is illegal but `CAST(...)
COLLATE ...' is legal.

Example:

     SELECT CAST(_latin1'test' AS CHAR CHARACTER SET utf8) COLLATE utf8_bin;

 SET X', then the resulting character set is `X' and the
resulting collation is `X''s default collation.

`SHOW CHARACTER SET'
--------------------

The `SHOW CHARACTER SET' command shows all available character sets.
It takes an optional `LIKE' clause that indicates which character set
names to match.

For example:

     mysql>
     | latin1  | ISO 8859-1 West European    | latin1_swedish_ci |      1 |
     | latin2  | ISO 8859-2 Central European | latin2_general_ci |      1 |
     | latin5  | ISO 8859-9 Turkish          | latin5_turkish_ci |      1 |
     | latin7  | ISO 8859-13 Baltic          | latin7_general_ci |      1 |
     +---------+-----------------------------+-------------------+--------+
     4 rows in set (0.00 sec)

Notes about the preceding listing:

   * The `Maxlen' column shows the maximum number of bytes used to
     store one character.


`SHOW COLLATION'
----------------

The output from `SHOW COLLATION' includes all available character sets.
It takes an optional `LIKE' clause that indicates which collation names
to match.

     mysql>
     | latin1_german1_ci | latin1  |  5 |         |          |       0 |
     | latin1_swedish_ci | latin1  |  8 | Yes     | Yes      |       0 |
     | latin1_danish_ci  | latin1  | 15 |         |          |       0 |
     | latin1_german2_ci | latin1  | 31 |         | Yes      |       2 |
     | latin1_bin        | latin1  | 47 |         | Yes      |       0 |
     | latin1_general_ci | latin1  | 48 |         |          |       0 |
     | latin1_general_cs | latin1  | 49 |         |          |       0 |
     +-------------------+---------+----+---------+----------+---------+
     7 rows in set (0.00 sec)

 amount of
memory required to sort strings expressed in the character set.

`SHOW CREATE DATABASE'
----------------------

The following query shows a `CREATE DATABASE' statement that will
create the given database. The result includes all database options.
`DEFAULT CHARACTER SET' and `COLLATE' are supported. All database
options are stored in a text file that can be found in the database
directory.

     mysql>
     | a        | CREATE DATABASE `a` /*!40100 DEFAULT CHARACTER SET macce
     COLLATE macce_ci_ai */ |
     +----------+---------------------------------------------------------------------------------+
     1 row in set (0.00 sec)

`SHOW FULL COLUMNS'
-------------------

The `SHOW COLUMNS' statement now displays the collations of a table's
columns, when invoked as `SHOW FULL COLUMNS'.  Columns with `CHAR',
`VARCHAR', or `TEXT' datatypes have non-`NULL' collations. Numeric and
other non-character types have `NULL' collations. For example:

     mysql> SHOW FULL COLUMNS FROM a;
     +-------+---------+-------------------+------+-----+---------+-------+
     | Field | Type    | Collation         | Null | Key | Default | Extra |
     +-------+---------+-------------------+------+-----+---------+-------+
     | a     | char(1) | latin1_swedish_ci | YES  |     | NULL    |       |
     | b     | int(11) | NULL              | YES  |     | NULL    |       |
     +-------+---------+-------------------+------+-----+---------+-------+
     2 rows in set (0.02 sec)

The character set is not part of the display.

[Назад] [Содержание] [Вперед]

Главная