MySQL-字符集和比较规则

在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系
了,建立这个关系最起码要搞清楚两件事:

  1. 界定清楚字符范围:需要把哪些字符映射成二进制数据?
  2. 编码与解码:也就是字符串与二进制数据如何映射。将一个字符映射成一个二进制数据的过程也叫做 编码将一个二进制数据映射到一个字符的过程叫做 解码

常见字符集

ASCII 字符集

ASCII 字符集共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行编码。

ISO 8859-1 字符集

ISO 8859-1 字符集共收录256个字符,是在 ASCII 字符集的基础上又扩充了128个西欧常用字符(包括德法两国的字母),也可以使用1个字节来进行编码。这个字符集也有一个别名 latin1

GB2312 字符集

GB2312 字符集收录了汉字以及拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母。其中收录汉字6763个,其他文字符号682个。

同时这种字符集又兼容 ASCII 字符集,所以在编码方式上显得有些奇怪,如果该字符(ASCII 字符)在 ASCII 字符集中,则采用1字节编码,否则采用2字节编码。

这种表示一个字符需要的字节数可能不同的编码方式称为 变长编码方式

GBK 字符集

GBK 字符集只是在收录字符范围上对 GB2312 字符集作了扩充,编码方式上兼容 GB2312 。

utf8 字符集

收录地球上能想到的所有字符,而且还在不断扩充。utf8字符集兼容 ASCII 字符集,采用变长编码方式,编码一个字符需要使用1~4个字节。

utf8只是Unicode字符集的一种编码方案,Unicode字符集可以采用utf8、utf16、utf32这几种编码方案。

  • utf8使用1~4个字节编码一个字符;
  • utf16使用2个或4个字节编码一个字符;
  • utf32使用4个字节编码一个字符。

MySQL 支持字符集与排序规则

查看MySQL支持的字符集

MySQL 支持好多好多种字符集,查看当前 MySQL 中支持的字符集可以用下边这个语句:

SHOW (CHARACTER SET|CHARSET) [LIKE 匹配的模式];

CHARACTER SET 和 CHARSET 是同义词,用任意一个都可以。

show character set ;

执行上面语句,输出如下:

CharsetDescriptionDefault collationMaxlen
armscii8ARMSCII-8 Armenianarmscii8_general_ci1
asciiUS ASCIIascii_general_ci1
big5Big5 Traditional Chinesebig5_chinese_ci2
binaryBinary pseudo charsetbinary1
cp1250Windows Central Europeancp1250_general_ci1
cp1251Windows Cyrilliccp1251_general_ci1
cp1256Windows Arabiccp1256_general_ci1
cp1257Windows Balticcp1257_general_ci1
cp850DOS West Europeancp850_general_ci1
cp852DOS Central Europeancp852_general_ci1
cp866DOS Russiancp866_general_ci1
cp932SJIS for Windows Japanesecp932_japanese_ci2
dec8DEC West Europeandec8_swedish_ci1
eucjpmsUJIS for Windows Japaneseeucjpms_japanese_ci3
euckrEUC-KR Koreaneuckr_korean_ci2
gb18030China National Standard GB18030gb18030_chinese_ci4
gb2312GB2312 Simplified Chinesegb2312_chinese_ci2
gbkGBK Simplified Chinesegbk_chinese_ci2
geostd8GEOSTD8 Georgiangeostd8_general_ci1
greekISO 8859-7 Greekgreek_general_ci1
hebrewISO 8859-8 Hebrewhebrew_general_ci1
hp8HP West Europeanhp8_english_ci1
keybcs2DOS Kamenicky Czech-Slovakkeybcs2_general_ci1
koi8rKOI8-R Relcom Russiankoi8r_general_ci1
koi8uKOI8-U Ukrainiankoi8u_general_ci1
latin1cp1252 West Europeanlatin1_swedish_ci1
latin2ISO 8859-2 Central Europeanlatin2_general_ci1
latin5ISO 8859-9 Turkishlatin5_turkish_ci1
latin7ISO 8859-13 Balticlatin7_general_ci1
macceMac Central Europeanmacce_general_ci1
macromanMac West Europeanmacroman_general_ci1
sjisShift-JIS Japanesesjis_japanese_ci2
swe77bit Swedishswe7_swedish_ci1
tis620TIS620 Thaitis620_thai_ci1
ucs2UCS-2 Unicodeucs2_general_ci2
ujisEUC-JP Japaneseujis_japanese_ci3
utf16UTF-16 Unicodeutf16_general_ci4
utf16leUTF-16LE Unicodeutf16le_general_ci4
utf32UTF-32 Unicodeutf32_general_ci4
utf8mb3UTF-8 Unicodeutf8mb3_general_ci3
utf8mb4UTF-8 Unicodeutf8mb4_0900_ai_ci4

列说明:

  • Charset:字符集名称;
  • Description:字符集描述;
  • Default collation:字符集中一种默认的 比较规则;
  • Maxlen:代表该种字符集表示一个字符最多需要几个字节。
utf字符集

在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用 utf8mb4 。

utf8mb3与utf8mb4的区别:

  1. utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
  2. utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。

为什么需要utf8mb3和utf8mb4呢?
在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,常用的一些字符使用1~3个字节就可以表示了,所以可以使用utf8mb3编码存储和性能更佳。

查看MySQL比较规则

查看 MySQL 中支持的比较规则的命令如下:

SHOW COLLATION [LIKE 匹配的模式];
show collation  ;

执行上面语句,有286个比较规则,挑选常见的输出如下:

CollationCharsetIdDefaultCompiledSortlenPad_attribute
ascii_binascii65Yes1PAD SPACE
ascii_general_ciascii11YesYes1PAD SPACE
gb18030_bingb18030249Yes1PAD SPACE
gb18030_chinese_cigb18030248YesYes2PAD SPACE
gb18030_unicode_520_cigb18030250Yes8PAD SPACE
gb2312_bingb231286Yes1PAD SPACE
gb2312_chinese_cigb231224YesYes1PAD SPACE
gbk_bingbk87Yes1PAD SPACE
gbk_chinese_cigbk28YesYes1PAD SPACE
latin1_binlatin147Yes1PAD SPACE
latin1_danish_cilatin115Yes1PAD SPACE
latin1_general_cilatin148Yes1PAD SPACE
latin1_general_cslatin149Yes1PAD SPACE
latin1_german1_cilatin15Yes1PAD SPACE
latin1_german2_cilatin131Yes2PAD SPACE
latin1_spanish_cilatin194Yes1PAD SPACE
latin1_swedish_cilatin18YesYes1PAD SPACE
latin2_binlatin277Yes1PAD SPACE
latin2_croatian_cilatin227Yes1PAD SPACE
latin2_czech_cslatin22Yes4PAD SPACE
latin2_general_cilatin29YesYes1PAD SPACE
latin2_hungarian_cilatin221Yes1PAD SPACE
latin5_binlatin578Yes1PAD SPACE
latin5_turkish_cilatin530YesYes1PAD SPACE
latin7_binlatin779Yes1PAD SPACE
latin7_estonian_cslatin720Yes1PAD SPACE
latin7_general_cilatin741YesYes1PAD SPACE
utf16le_binutf16le62Yes1PAD SPACE
utf16le_general_ciutf16le56YesYes1PAD SPACE
utf16_binutf1655Yes1PAD SPACE
utf16_croatian_ciutf16122Yes8PAD SPACE
utf16_czech_ciutf16111Yes8PAD SPACE
utf16_danish_ciutf16112Yes8PAD SPACE
utf16_esperanto_ciutf16118Yes8PAD SPACE
utf16_estonian_ciutf16107Yes8PAD SPACE
utf16_general_ciutf1654YesYes1PAD SPACE
utf16_german2_ciutf16121Yes8PAD SPACE
utf16_hungarian_ciutf16119Yes8PAD SPACE
utf16_icelandic_ciutf16102Yes8PAD SPACE
utf16_latvian_ciutf16103Yes8PAD SPACE
utf16_lithuanian_ciutf16113Yes8PAD SPACE
utf16_persian_ciutf16117Yes8PAD SPACE
utf16_polish_ciutf16106Yes8PAD SPACE
utf16_romanian_ciutf16104Yes8PAD SPACE
utf16_roman_ciutf16116Yes8PAD SPACE
utf16_sinhala_ciutf16120Yes8PAD SPACE
utf16_slovak_ciutf16114Yes8PAD SPACE
utf16_slovenian_ciutf16105Yes8PAD SPACE
utf16_spanish2_ciutf16115Yes8PAD SPACE
utf16_spanish_ciutf16108Yes8PAD SPACE
utf16_swedish_ciutf16109Yes8PAD SPACE
utf16_turkish_ciutf16110Yes8PAD SPACE
utf16_unicode_520_ciutf16123Yes8PAD SPACE
utf16_unicode_ciutf16101Yes8PAD SPACE
utf16_vietnamese_ciutf16124Yes8PAD SPACE
utf32_binutf3261Yes1PAD SPACE
utf32_croatian_ciutf32181Yes8PAD SPACE
utf32_czech_ciutf32170Yes8PAD SPACE
utf32_danish_ciutf32171Yes8PAD SPACE
utf32_esperanto_ciutf32177Yes8PAD SPACE
utf32_estonian_ciutf32166Yes8PAD SPACE
utf32_general_ciutf3260YesYes1PAD SPACE
utf32_german2_ciutf32180Yes8PAD SPACE
utf32_hungarian_ciutf32178Yes8PAD SPACE
utf32_icelandic_ciutf32161Yes8PAD SPACE
utf32_latvian_ciutf32162Yes8PAD SPACE
utf32_lithuanian_ciutf32172Yes8PAD SPACE
utf32_persian_ciutf32176Yes8PAD SPACE
utf32_polish_ciutf32165Yes8PAD SPACE
utf32_romanian_ciutf32163Yes8PAD SPACE
utf32_roman_ciutf32175Yes8PAD SPACE
utf32_sinhala_ciutf32179Yes8PAD SPACE
utf32_slovak_ciutf32173Yes8PAD SPACE
utf32_slovenian_ciutf32164Yes8PAD SPACE
utf32_spanish2_ciutf32174Yes8PAD SPACE
utf32_spanish_ciutf32167Yes8PAD SPACE
utf32_swedish_ciutf32168Yes8PAD SPACE
utf32_turkish_ciutf32169Yes8PAD SPACE
utf32_unicode_520_ciutf32182Yes8PAD SPACE
utf32_unicode_ciutf32160Yes8PAD SPACE
utf32_vietnamese_ciutf32183Yes8PAD SPACE
utf8mb3_binutf8mb383Yes1PAD SPACE
utf8mb3_croatian_ciutf8mb3213Yes8PAD SPACE
utf8mb3_czech_ciutf8mb3202Yes8PAD SPACE
utf8mb3_danish_ciutf8mb3203Yes8PAD SPACE
utf8mb3_esperanto_ciutf8mb3209Yes8PAD SPACE
utf8mb3_estonian_ciutf8mb3198Yes8PAD SPACE
utf8mb3_general_ciutf8mb333YesYes1PAD SPACE
utf8mb3_general_mysql500_ciutf8mb3223Yes1PAD SPACE
utf8mb3_german2_ciutf8mb3212Yes8PAD SPACE
utf8mb3_hungarian_ciutf8mb3210Yes8PAD SPACE
utf8mb3_icelandic_ciutf8mb3193Yes8PAD SPACE
utf8mb3_latvian_ciutf8mb3194Yes8PAD SPACE
utf8mb3_lithuanian_ciutf8mb3204Yes8PAD SPACE
utf8mb3_persian_ciutf8mb3208Yes8PAD SPACE
utf8mb3_polish_ciutf8mb3197Yes8PAD SPACE
utf8mb3_romanian_ciutf8mb3195Yes8PAD SPACE
utf8mb3_roman_ciutf8mb3207Yes8PAD SPACE
utf8mb3_sinhala_ciutf8mb3211Yes8PAD SPACE
utf8mb3_slovak_ciutf8mb3205Yes8PAD SPACE
utf8mb3_slovenian_ciutf8mb3196Yes8PAD SPACE
utf8mb3_spanish2_ciutf8mb3206Yes8PAD SPACE
utf8mb3_spanish_ciutf8mb3199Yes8PAD SPACE
utf8mb3_swedish_ciutf8mb3200Yes8PAD SPACE
utf8mb3_tolower_ciutf8mb376Yes1PAD SPACE
utf8mb3_turkish_ciutf8mb3201Yes8PAD SPACE
utf8mb3_unicode_520_ciutf8mb3214Yes8PAD SPACE
utf8mb3_unicode_ciutf8mb3192Yes8PAD SPACE
utf8mb3_vietnamese_ciutf8mb3215Yes8PAD SPACE
utf8mb4_0900_ai_ciutf8mb4255YesYes0NO PAD
utf8mb4_0900_as_ciutf8mb4305Yes0NO PAD
utf8mb4_0900_as_csutf8mb4278Yes0NO PAD
utf8mb4_0900_binutf8mb4309Yes1NO PAD
utf8mb4_bg_0900_ai_ciutf8mb4318Yes0NO PAD
utf8mb4_bg_0900_as_csutf8mb4319Yes0NO PAD
utf8mb4_binutf8mb446Yes1PAD SPACE
utf8mb4_bs_0900_ai_ciutf8mb4316Yes0NO PAD
utf8mb4_bs_0900_as_csutf8mb4317Yes0NO PAD
utf8mb4_croatian_ciutf8mb4245Yes8PAD SPACE
utf8mb4_cs_0900_ai_ciutf8mb4266Yes0NO PAD
utf8mb4_cs_0900_as_csutf8mb4289Yes0NO PAD
utf8mb4_czech_ciutf8mb4234Yes8PAD SPACE
utf8mb4_danish_ciutf8mb4235Yes8PAD SPACE
utf8mb4_da_0900_ai_ciutf8mb4267Yes0NO PAD
utf8mb4_da_0900_as_csutf8mb4290Yes0NO PAD
utf8mb4_de_pb_0900_ai_ciutf8mb4256Yes0NO PAD
utf8mb4_de_pb_0900_as_csutf8mb4279Yes0NO PAD
utf8mb4_eo_0900_ai_ciutf8mb4273Yes0NO PAD
utf8mb4_eo_0900_as_csutf8mb4296Yes0NO PAD
utf8mb4_esperanto_ciutf8mb4241Yes8PAD SPACE
utf8mb4_estonian_ciutf8mb4230Yes8PAD SPACE
utf8mb4_es_0900_ai_ciutf8mb4263Yes0NO PAD
utf8mb4_es_0900_as_csutf8mb4286Yes0NO PAD
utf8mb4_es_trad_0900_ai_ciutf8mb4270Yes0NO PAD
utf8mb4_es_trad_0900_as_csutf8mb4293Yes0NO PAD
utf8mb4_et_0900_ai_ciutf8mb4262Yes0NO PAD
utf8mb4_et_0900_as_csutf8mb4285Yes0NO PAD
utf8mb4_general_ciutf8mb445Yes1PAD SPACE
utf8mb4_german2_ciutf8mb4244Yes8PAD SPACE
utf8mb4_gl_0900_ai_ciutf8mb4320Yes0NO PAD
utf8mb4_gl_0900_as_csutf8mb4321Yes0NO PAD
utf8mb4_hr_0900_ai_ciutf8mb4275Yes0NO PAD
utf8mb4_hr_0900_as_csutf8mb4298Yes0NO PAD
utf8mb4_hungarian_ciutf8mb4242Yes8PAD SPACE
utf8mb4_hu_0900_ai_ciutf8mb4274Yes0NO PAD
utf8mb4_hu_0900_as_csutf8mb4297Yes0NO PAD
utf8mb4_icelandic_ciutf8mb4225Yes8PAD SPACE
utf8mb4_is_0900_ai_ciutf8mb4257Yes0NO PAD
utf8mb4_is_0900_as_csutf8mb4280Yes0NO PAD
utf8mb4_ja_0900_as_csutf8mb4303Yes0NO PAD
utf8mb4_ja_0900_as_cs_ksutf8mb4304Yes24NO PAD
utf8mb4_latvian_ciutf8mb4226Yes8PAD SPACE
utf8mb4_la_0900_ai_ciutf8mb4271Yes0NO PAD
utf8mb4_la_0900_as_csutf8mb4294Yes0NO PAD
utf8mb4_lithuanian_ciutf8mb4236Yes8PAD SPACE
utf8mb4_lt_0900_ai_ciutf8mb4268Yes0NO PAD
utf8mb4_lt_0900_as_csutf8mb4291Yes0NO PAD
utf8mb4_lv_0900_ai_ciutf8mb4258Yes0NO PAD
utf8mb4_lv_0900_as_csutf8mb4281Yes0NO PAD
utf8mb4_mn_cyrl_0900_ai_ciutf8mb4322Yes0NO PAD
utf8mb4_mn_cyrl_0900_as_csutf8mb4323Yes0NO PAD
utf8mb4_nb_0900_ai_ciutf8mb4310Yes0NO PAD
utf8mb4_nb_0900_as_csutf8mb4311Yes0NO PAD
utf8mb4_nn_0900_ai_ciutf8mb4312Yes0NO PAD
utf8mb4_nn_0900_as_csutf8mb4313Yes0NO PAD
utf8mb4_persian_ciutf8mb4240Yes8PAD SPACE
utf8mb4_pl_0900_ai_ciutf8mb4261Yes0NO PAD
utf8mb4_pl_0900_as_csutf8mb4284Yes0NO PAD
utf8mb4_polish_ciutf8mb4229Yes8PAD SPACE
utf8mb4_romanian_ciutf8mb4227Yes8PAD SPACE
utf8mb4_roman_ciutf8mb4239Yes8PAD SPACE
utf8mb4_ro_0900_ai_ciutf8mb4259Yes0NO PAD
utf8mb4_ro_0900_as_csutf8mb4282Yes0NO PAD
utf8mb4_ru_0900_ai_ciutf8mb4306Yes0NO PAD
utf8mb4_ru_0900_as_csutf8mb4307Yes0NO PAD
utf8mb4_sinhala_ciutf8mb4243Yes8PAD SPACE
utf8mb4_sk_0900_ai_ciutf8mb4269Yes0NO PAD
utf8mb4_sk_0900_as_csutf8mb4292Yes0NO PAD
utf8mb4_slovak_ciutf8mb4237Yes8PAD SPACE
utf8mb4_slovenian_ciutf8mb4228Yes8PAD SPACE
utf8mb4_sl_0900_ai_ciutf8mb4260Yes0NO PAD
utf8mb4_sl_0900_as_csutf8mb4283Yes0NO PAD
utf8mb4_spanish2_ciutf8mb4238Yes8PAD SPACE
utf8mb4_spanish_ciutf8mb4231Yes8PAD SPACE
utf8mb4_sr_latn_0900_ai_ciutf8mb4314Yes0NO PAD
utf8mb4_sr_latn_0900_as_csutf8mb4315Yes0NO PAD
utf8mb4_sv_0900_ai_ciutf8mb4264Yes0NO PAD
utf8mb4_sv_0900_as_csutf8mb4287Yes0NO PAD
utf8mb4_swedish_ciutf8mb4232Yes8PAD SPACE
utf8mb4_tr_0900_ai_ciutf8mb4265Yes0NO PAD
utf8mb4_tr_0900_as_csutf8mb4288Yes0NO PAD
utf8mb4_turkish_ciutf8mb4233Yes8PAD SPACE
utf8mb4_unicode_520_ciutf8mb4246Yes8PAD SPACE
utf8mb4_unicode_ciutf8mb4224Yes8PAD SPACE
utf8mb4_vietnamese_ciutf8mb4247Yes8PAD SPACE
utf8mb4_vi_0900_ai_ciutf8mb4277Yes0NO PAD
utf8mb4_vi_0900_as_csutf8mb4300Yes0NO PAD
utf8mb4_zh_0900_as_csutf8mb4308Yes0NO PAD

列说明:

  • Collation:比较规则名称,命名方式 字符集名称_语言_后缀
后缀英文释义描述
_aiaccent insensitive不区分重音
_asaccent sensitive区分重音
_cicase insensitive不区分大小写
_cscase sensitive区分大小写
_binbinary以二进制方式比较
  • Charset: 比较规则所属字符集。
  • Id:比较规则id。
  • Default:YES 的就是该字符集的默认比较规则。
  • Compiled:是否将字符集编译到服务器中。
  • Sortlen:这与对字符集中表示的字符串进行排序所需的内存量有关。

字符集的应用

MySQL 有4个级别的字符集和比较规则,分别是:

  1. 服务器级别
  2. 数据库级别
  3. 表级别
  4. 列级别

由于字符集和比较规则是互相有联系的,如果我们只修改了字符集,比较规则也会跟着变化,如果只修改了比较规则,字符集也会跟着变化,具体规则如下:

  • 只修改字符集,则比较规则将变为修改后的字符集默认的比较规则。
  • 只修改比较规则,则字符集将变为修改后的比较规则对应的字符集。
服务器级别

MySQL 提供了两个系统变量来表示服务器级别的字符集和比较规则。

系统变量描述查看系统变量系统变量值
character_set_server服务器级别的字符集SHOW VARIABLES LIKE ‘character_set_server’;utf8mb3
collation_server服务器级别的比较规则SHOW VARIABLES LIKE ‘collation_server’;utf8mb3_general_ci

可以看到在我的计算机中服务器级别默认的字符集是 utf8 ,默认的比较规则是 utf8_general_ci 。

默认字符集和比较规则设置,修改my.ini

character_set_server=utf8mb4
collation_server=utf8mb4_general_ci
数据库级别

在创建和修改数据库的时候可以指定该数据库的字符集和比较规则,具体语法如下:

CREATE DATABASE 数据库名
 [[DEFAULT] CHARACTER SET 字符集名称]
 [[DEFAULT] COLLATE 比较规则名称];
 
ALTER DATABASE 数据库名
 [[DEFAULT] CHARACTER SET 字符集名称]
 [[DEFAULT] COLLATE 比较规则名称];

查看数据库字符集和比较规则:

select SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME,SQL_PATH 
from information_schema.SCHEMATA;

在这里插入图片描述

表级别

在创建和修改表的时候指定表的字符集和比较规则,语法如下:

CREATE TABLE 表名 (列的信息)
 [[DEFAULT] CHARACTER SET 字符集名称]
 [COLLATE 比较规则名称]]
 
ALTER TABLE 表名
 [[DEFAULT] CHARACTER SET 字符集名称]
 [COLLATE 比较规则名称]

查询MySQL表字符集和比较规则:

show table status  from spring_security like 'user';

#或者
select * from information_schema.TABLES
where TABLE_SCHEMA='spring_security' and  TABLE_NAME='user';

spring_security是数据库名称,user为表名称。输出结果格式化如下:
在这里插入图片描述

show create table user;

字符集输出:

CREATE TABLE `user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `created_time` datetime DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `password` varchar(255) DEFAULT NULL,
  `updated_time` datetime DEFAULT NULL,
  `user_id` bigint DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb3
列级别

对于存储字符串的列,同一个表中的不同的列也可以有不同的字符集和比较规则。我们在创建和
修改列定义的时候可以指定该列的字符集和比较规则,语法如下:

CREATE TABLE 表名(
 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称],
 其他列...
);

ALTER TABLE 表名 MODIFY 列名 字符串类型 [CHARACTER SET 字符集名称] [COLLATE 比较规则名称];
客户端和服务器通信中的字符集

从客户端发往服务器的请求本质上就是一个字符串,服务器向客户端返回的结果本质上也是一个字符
串,而字符串其实是使用某种字符集编码的二进制数据。这个字符串可不是使用一种字符集的编码方式一成不变,从发送请求到返回结果这个过程中伴随着多次字符集的转换,在这个过程中会用到3个系统变量。

系统变量描述
character_set_client服务器解码请求时使用的字符集
character_set_connection服务器处理请求时会把请求字符串从 character_set_client 转为 character_set_connection
character_set_results服务器向客户端返回数据时使用的字符集

查看MySQL字符集配置:

show variables like 'character%'

在这里插入图片描述
这几个变量与客户端和服务端的交互关系:
在这里插入图片描述

MySQL 中从发送请求到返回结果过程里发生的各种字符集转换,非常麻烦。所以我们通常都把 character_set_clientcharacter_set_connectioncharacter_set_results 这三个系统变量设置成和客户端使用的字符集一致的情况,这样减少了很多无谓的字符集转换。

MySQL 提供了一条非常简便的语句:

SET NAMES 字符集名;

上面语句产生的效果与下面一样:

SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;

另外,如果想在启动客户端的时候就把 character_set_clientcharacter_set_connection
character_set_results 这三个系统变量的值设置成一样的,那我们可以在启动客户端的时候指定一个叫default-character-set 的启动选项。
my.ini文件配置:

default-character-set=utf8
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冲上云霄的Jayden

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值