Skip to main content

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;

mysql character set

MySQL中的默认字符集是latin1。如果要在一列中存储来自多种语言的字符,可以使用Unicode字符集,即utf8或ucs2。

Maxlen列中的值指定字符集中字符所包含的字节数。一些字符集包含单字节字符,例如拉丁1、拉丁2、cp850等,而其他字符集包含多字节字符。

MySQL提供了长度函数来获取以字节为单位的字符串长度,以及CHAR_LENGTH函数来获取以字符为单位的字符串长度。如果字符串包含多字节字符,则LENGTH函数的结果大于CHAR_LENGTH()函数的结果。请参见以下示例:

SET @str = CONVERT('MySQL Character Set' USING ucs2);
SELECT LENGTH(@str), CHAR_LENGTH(@str);

mysql convert character set

CONVERT函数将字符串转换为特定的字符集。在本例中,它将MySQL字符集字符串的字符集转换为ucs2。由于ucs2字符集包含2字节字符,因此@str字符串的字节长度大于其字符长度。

请注意,一些字符集包含多字节字符,但它们的字符串可能只包含单字节字符,例如utf8,如以下语句所示:

SET @str = CONVERT('MySQL Character Set' USING utf8);
SELECT LENGTH(@str), CHAR_LENGTH(@str);

single-byte character set

但是,如果utf8字符串包含特殊字符,例如pingüino字符串中的ü;其字节长度不同,请参见以下示例:

SET @str = CONVERT('pingüino' USING utf8);
SELECT LENGTH(@str), CHAR_LENGTH(@str);

<img class=“alignnone size full wp-image-2339”src=”https://www.mysqltutorial.org/wp-content/uploads/2013/05/unicode-character-set.png“alt=“unicode字符集”width=“268”height=“40”>

在不同字符集之间转换

MySQL提供了两个函数,允许您在不同的字符集之间转换字符串:convert和CAST。在上面的例子中,我们已经多次使用CONVERT函数。

CONVERT函数的语法如下所示:

CONVERT(expression USING character_set_name)

CAST函数与CONVERT函数类似。它将字符串转换为不同的字符集:

CAST(string AS character_type CHARACTER SET character_set_name)

请看以下使用CAST函数的示例:

SELECT CAST(_latin1'MySQL character set' AS CHAR CHARACTER SET utf8);

为客户端连接设置字符集

当应用程序与MySQL数据库服务器交换数据时,默认字符集为latin1。但是,如果数据库在utf8字符集中存储Unicode字符串,那么在应用程序中使用拉丁字符集是不够的。因此,应用程序在连接到MySQL数据库服务器时需要指定适当的字符集。

要为客户端连接配置字符集,可以使用以下方法之一:

SET NAMES 'utf8';
[mysql]
default-character-set=utf8
$dsn ="mysql:host=$host;dbname=$db;charset=utf8";

无论使用哪种方式,请确保应用程序使用的字符集与MySQL数据库服务器中存储的字符集匹配。

在本教程中,您了解了MySQL字符集、如何在字符集之间转换字符串以及如何为客户端连接配置适当的字符集。