MySQL字符集
简介:在本教程中,您将学习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中的默认字符集是latin1。
如果要在一个列中存储多种语言的字符,则可以使用utf8或ucs2 Unicode字符集。
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);
CONVERT函数将字符串转换为特定的字符集。
在此示例中,它将MySQL字符集字符串的字符集转换为ucs2。
由于ucs2字符集包含2个字节的字符,因此@str字符串的长度(以字节为单位)大于其长度(以字符为单位)。
请注意,某些字符集包含多字节字符,但是它们的字符串可能仅包含单字节字符,例如utf8,如以下语句所示:
SET @str = CONVERT('MySQL Character Set' USING utf8); SELECT LENGTH(@str), CHAR_LENGTH(@str);
但是,如果utf8字符串包含特殊字符,例如pingüino字符串中的ü;其长度(以字节为单位)不同,请参见以下示例:
SET @str = CONVERT('pingüino' USING utf8); SELECT LENGTH(@str), CHAR_LENGTH(@str);
在不同的字符集之间转换
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字符串,则在应用程序中使用latin1字符集是不够的。
因此,应用程序在连接到MySQL数据库服务器时需要指定正确的字符集。
要为客户端连接配置字符集,可以执行以下方式之一:
- 在客户端连接到MySQL数据库服务器之后发出SET NAME语句。
例如,要设置Unicode字符集utf8,请使用以下语句:
SET NAMES 'utf8';
- 如果应用程序支持--default-character-set选项,则可以使用它来设置字符集。
例如,mysql客户端工具支持--default-character-set,您可以按如下所示在配置文件中进行设置:
[mysql] default-character-set=utf8
- 某些MySQL连接器允许您设置字符集,例如,如果您使用PHP PDO,则可以在数据源名称中设置字符集,如下所示:
$dsn ="mysql:host=$host;dbname=$db;charset=utf8";
无论使用哪种方式,请确保应用程序使用的字符集与存储在MySQL数据库服务器中的字符集匹配。
在本教程中,您学习了MySQL字符集,如何在字符集之间转换字符串以及如何为客户端连接配置适当的字符集。