MySQL 字符集17 Mar 2025 | 4 分钟阅读 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 数据库服务器中所有可用的字符集 它将返回以下输出 ![]() 默认情况下,上述语句会生成 MySQL 中所有可用的字符集。如果我们要获取任何特定字符集系列的名称,请使用可选的 LIKE 或 WHERE 子句,它会返回匹配的字符集名称。以下语句显示了一些基于 UTF (Unicode 转换格式) 的 Unicode 字符集 我们可以看到如下输出 ![]() 在此图像中,Maxlen 列中的值表示字符集中一个字符所占用的字节数。MySQL 中的每个字符集都包含单字节字符(如 latin1、latin2、cp850)或多字节字符。 latin1 是 MySQL 中使用的默认字符集。如果我们在一个列中存储来自各种语言的字符或符号,我们将使用 Unicode 字符集,例如 utf8 或 ucs2。 MySQL 的 LENGTH() 函数返回字符串的字节长度,而 CHAR_LENGTH() 函数用于查找字符串的字符长度。如果我们将 LENGTH() 函数用于计算包含多字节字符的字符串的长度,我们将得到的结果将高于 CHAR_LENGTH() 的结果。以下示例更清楚地解释了这一点,该示例使用了 ucs2 字符集。 我们可以看到如下输出,其中 LENGTH 函数返回的结果大于 CHAR_LENGTH() 的结果 ![]() CONVERT 函数用于将字符串转换为特定的字符集。上面的示例将 MySQL Character Set 字符串转换为 ucs2 字符集。由于 ucs2 字符集包含双字节字符,因此 @str 的字节长度大于其字符长度。 再次,我们将看到另一个示例。需要注意的是,许多字符集包含多字节字符,但它们的字符串只包含单字节字符,例如 utf8,如下面的语句所示 我们可以看到如下输出 ![]() 但是,如果 utf8 字符集字符串包含任何特殊字符,其字节长度是不同的。请看下面的示例 我们将得到以下输出: ![]() 字符集转换MySQL 主要提供两个函数来执行字符串在不同字符集之间的转换。这些函数是 CONVERT() 和 CAST()。我们已经在上面的示例中看到了 CONVERT 函数的工作方式。在这里,我们将只看到 CAST 函数的工作方式,它与 CONVERT 函数类似。 以下是 CONVERT() 函数的基本语法: 以下是 CAST() 函数的基本语法: 请看下面的示例,它使用 CAST 函数在不同的字符集之间进行转换 它将返回如下输出: ![]() 为客户端连接配置字符集当数据库应用程序与 MySQL 服务器交换数据时,它使用名为 latin1 的默认字符集。如果应用程序以 UTF8 字符集存储 Unicode 字符串,则数据库应用程序中的默认字符集 latin1 可能不足。因此,当我们的应用程序连接到 MySQL 数据库服务器时,需要指定一个适当的字符集。 我们可以使用以下方法之一为客户端连接配置字符集
需要确保我们使用哪种方式,我们的数据库应用程序使用的字符集应与 MySQL 服务器中存储的字符集匹配。 下一主题MySQL 排序规则 |
我们请求您订阅我们的新闻通讯以获取最新更新。