MySQL 字符集

MySQL 字符集

MySQL中的字符集是一个由 字符、编码符号 组成的字符串,这些字符串在一定程度上是合法的。本文将解释如何获取MySQL中的所有字符集,如何为客户端连接配置正确的字符集,以及如何在多个字符集之间转换字符串。

让我们以一个假想字符集的例子来理解它。假设我们拥有从 A到B,或a到b 的字母。接下来,我们为每个字母赋予一个数字: A = 0, B = 1 。在这里,字母A或B是一个符号,而数字0或1是编码。我们称这些字母(从A到B,或a到b)及其关联的编码的组合为 字符集

同样,如果我们想要比较两个字符串值,例如A和B。最简单的方法是使用它们的编码,A的编码为0,B的编码为1。从编码中可以清楚地看出,0小于1,所以我们可以说 A小于B

MySQL 支持各种字符集,每个字符集总是至少使用一个排序规则。排序规则定义了在字符集中比较字符的规则。字符集允许我们在字符串中存储任何字符。我们可以使用下面的语句查看MySQL数据库服务器中的所有字符集:

SHOW CHARACTER SET;

它将返回以下输出:

MySQL 字符集

默认情况下,上述语句在MySQL中生成所有可用的字符集。如果我们想要获取任何特定字符集族的名称,可以使用一个可选的 LIKE 或者 WHERE **子句来返回匹配的字符集名称。下面的语句显示基于UTF(Unicode转换格式)的一些 **Unicode字符集

SHOW CHARACTER SET LIKE 'utf%';

我们可以看到输出如下:

MySQL 字符集

在这个图像中, Maxlen 列中的值代表字符集中容纳一个字符所需的字节数。MySQL中的每个字符集都包含一个 单字节字符 ,例如latin1、latin2、cp850,或 多字节字符

latin1 是MySQL中使用的默认字符集。如果我们将来自不同语言的字符或符号存储在同一列中,我们将使用Unicode字符集,例如utf8或ucs2。

MySQL的 LENGTH() 函数返回字符串的字节长度,而 CHAR_LENGTH() 函数用于查找字符串的字符长度。如果我们使用LENGTH()函数来计算包含多字节字符的字符串的长度,那么得到的结果会高于CHAR_LENGTH()函数的结果。下面的示例更清楚地说明了这一点,示例使用了ucs2字符集。

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

我们可以看到以下输出,其中LENGTH函数返回的结果大于CHAR_LENGTH函数的结果:

MySQL 字符集

CONVERT 函数用于将字符串转换为特定的字符集。上面的示例将MySQL字符集字符串转换为ucs2字符集。由于字符集ucs2包含双字节字符,因此 @str 的字节长度大于它的字符长度。

再次看一个例子。需要注意的是,许多字符集包含多字节字符,但它们的字符串只包含单字节字符,例如utf8,如下所示:

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

我们可以看到输出如下:

MySQL 字符集

然而,如果字符集为utf8的字符串中包含任何特殊字符,则其字节长度会有所不同。请参考以下示例:

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

我们将得到以下输出:

MySQL 字符集

字符集转换

MySQL 主要提供两个函数来在不同字符集之间进行字符串转换。这些函数分别是 CONVERT()CAST() 。我们已经在上面的示例中看到了 CONVERT 函数的工作方式。在这里,我们只会看到与 CONVERT 函数类似的 CAST 函数的工作方式。

以下是 CONVERT() 函数的基本语法:

CONVERT(expression USING character_set_name)

以下是CAST()函数的基本语法: CAST()函数的基本语法如下:

CAST(string AS character_type CHARACTER SET character_set_name)

查看下面的示例,该示例使用CAST函数在不同字符集之间进行转换:

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

将输出结果为以下内容:

MySQL 字符集

配置客户端连接的字符集

当数据库应用程序与MySQL服务器交换数据时,它使用名为latin1的默认字符集。如果应用程序在字符集UTF8中存储Unicode字符串,则数据库应用程序中的默认字符集latin1可能不足够。因此,在我们的应用程序连接到MySQL数据库服务器时,需要指定一个合适的字符集。

我们可以使用以下方式之一来配置客户端连接的字符集:

  • 当客户端连接到MySQL数据库服务器时,可以使用 SET NAMES 命令。例如,如果需要为客户端连接设置一个 UTF8MB4 Unicode字符集,我们将使用以下语句:
SET NAMES 'utf8mb4';
  • 在MySQL中,MySQL连接器提供了一些其他字符集。假设我们正在使用 PHP PDO, 那么我们可以在数据源名称中设置字符集,如下所示:
$dsn ="mysql:host=$host;dbname=$db;charset=utf8";
  • 我们还可以使用 default-character-set 选项来设置字符集,如果我们的数据库应用程序支持的话。例如,MySQL Client Tool总是支持这个选项,可以使用以下语句在配置文件中进行设置:
[mysql]
default-character-set= utf8

为确保我们使用的方式,我们的数据库应用使用的字符集应与存储在MySQL服务器中的字符集相匹配。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程