摘要:在本教程中,您将了解MySQL 字符集。学习完本教程后,您将了解如何获取 MySQL 中的所有字符集、如何在字符集之间转换字符串以及如何为客户端连接配置正确的字符集。
MySQL字符集简介
MySQL 字符集是字符串中合法的字符集。例如,我们有一个包含从a
到z 的字母的字母表。我们为每个字母分配一个数字,例如a = 1
, b = 2
等。字母a
是一个符号,与字母a
关联的数字1
是编码。从a到z的所有字母及其对应的编码的组合就是字符集。
每个字符集都有一个或多个排序规则,这些排序规则定义了一组用于比较字符集中的字符的规则。查看MySQL 排序规则教程以了解 MySQL 中的排序规则。
MySQL 支持各种字符集,允许您存储字符串中的几乎所有字符。要获取 MySQL 数据库服务器中的所有可用字符集,请使用SHOW CHARACTER SET
语句,如下所示:
SHOW CHARACTER SET;
Code language: SQL (Structured Query Language) (sql)
MySQL 中的默认字符集是latin1
。如果要在单个列中存储多种语言的字符,可以使用 Unicode 字符集,即utf8
或ucs2
。
Maxlen
列中的值指定字符集中的字符所包含的字节数。某些字符集包含单字节字符,例如latin1
、 latin2
、 cp850
等,而其他字符集包含多字节字符。
MySQL 提供了LENGTH
函数来获取字符串的字节长度,以及CHAR_LENGTH
函数来获取字符串的字符长度。如果字符串包含多字节字符,则LENGTH
函数的结果大于CHAR_LENGTH()
函数的结果。请参见以下示例:
SET @str = CONVERT('MySQL Character Set' USING ucs2);
SELECT LENGTH(@str), CHAR_LENGTH(@str);
Code language: SQL (Structured Query Language) (sql)
CONVERT
函数将字符串转换为特定的字符集。在此示例中,它将MySQL Character Set
字符串的字符集转换为ucs2
。由于ucs2
字符集包含 2 字节字符,因此@str
字符串的字节长度大于其字符长度。
请注意,某些字符集包含多字节字符,但它们的字符串可能仅包含单字节字符,例如utf8
,如以下语句所示:
SET @str = CONVERT('MySQL Character Set' USING utf8);
SELECT LENGTH(@str), CHAR_LENGTH(@str);
Code language: SQL (Structured Query Language) (sql)
但是,如果utf8
字符串包含特殊字符,例如pingüino
字符串中的ü
;它的字节长度不同,请参见以下示例:
SET @str = CONVERT('pingüino' USING utf8);
SELECT LENGTH(@str), CHAR_LENGTH(@str);
Code language: SQL (Structured Query Language) (sql)
不同字符集之间的转换
MySQL 提供了两个函数,允许您在不同字符集之间转换字符串: CONVERT
和CAST
。在上面的示例中我们多次使用了CONVERT
函数。
CONVERT
函数的语法如下:
CONVERT(expression USING character_set_name)
Code language: SQL (Structured Query Language) (sql)
CAST
函数与CONVERT
函数类似。它将字符串转换为不同的字符集:
CAST(string AS character_type CHARACTER SET character_set_name)
Code language: SQL (Structured Query Language) (sql)
看一下下面使用CAST
函数的示例:
SELECT CAST(_latin1'MySQL character set' AS CHAR CHARACTER SET utf8);
Code language: SQL (Structured Query Language) (sql)
设置客户端连接的字符集
当应用程序与 MySQL 数据库服务器交换数据时,默认字符集是latin1
。但是,如果数据库以utf8
字符集存储 Unicode 字符串,则在应用程序中使用latin1
字符集是不够的。因此,应用程序在连接MySQL数据库服务器时需要指定合适的字符集。
要为客户端连接配置字符集,您可以执行以下操作之一:
- 在客户端连接到 MySQL 数据库服务器后发出
SET NAME
语句。例如,要设置 Unicode 字符集utf8
,请使用以下语句:
SET NAMES 'utf8';
Code language: SQL (Structured Query Language) (sql)
- 如果应用程序支持
--default-character-set
选项,您可以使用它来设置字符集。例如mysql客户端工具支持--default-character-set
,你可以在配置文件中设置,如下:
[mysql]
default-character-set=utf8
Code language: JavaScript (javascript)
- 一些MySQL连接器允许您设置字符集,例如,如果您使用PHP PDO,您可以在数据源名称中设置字符集,如下所示:
$dsn ="mysql:host=$host;dbname=$db;charset=utf8";
Code language: PHP (php)
无论使用哪种方式,请确保应用程序使用的字符集与MySQL数据库服务器中存储的字符集匹配。
在本教程中,您了解了 MySQL 字符集、如何在字符集之间转换字符串以及如何为客户端连接配置正确的字符集。