MySQL-字符集和比较规则
在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系
了,建立这个关系最起码要搞清楚两件事:
- 界定清楚字符范围:需要把哪些字符映射成二进制数据?
- 编码与解码:也就是字符串与二进制数据如何映射。将一个字符映射成一个二进制数据的过程也叫做 编码 ,将一个二进制数据映射到一个字符的过程叫做 解码 。
常见字符集
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 ;
执行上面语句,输出如下:
| Charset | Description | Default collation | Maxlen |
|---|---|---|---|
| armscii8 | ARMSCII-8 Armenian | armscii8_general_ci | 1 |
| ascii | US ASCII | ascii_general_ci | 1 |
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| binary | Binary pseudo charset | binary | 1 |
| cp1250 | Windows Central European | cp1250_general_ci | 1 |
| cp1251 | Windows Cyrillic | cp1251_general_ci | 1 |
| cp1256 | Windows Arabic | cp1256_general_ci | 1 |
| cp1257 | Windows Baltic | cp1257_general_ci | 1 |
| cp850 | DOS West European | cp850_general_ci | 1 |
| cp852 | DOS Central European | cp852_general_ci | 1 |
| cp866 | DOS Russian | cp866_general_ci | 1 |
| cp932 | SJIS for Windows Japanese | cp932_japanese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
| euckr | EUC-KR Korean | euckr_korean_ci | 2 |
| gb18030 | China National Standard GB18030 | gb18030_chinese_ci | 4 |
| gb2312 | GB2312 Simplified Chinese | gb2312_chinese_ci | 2 |
| gbk | GBK Simplified Chinese | gbk_chinese_ci | 2 |
| geostd8 | GEOSTD8 Georgian | geostd8_general_ci | 1 |
| greek | ISO 8859-7 Greek | greek_general_ci | 1 |
| hebrew | ISO 8859-8 Hebrew | hebrew_general_ci | 1 |
| hp8 | HP West European | hp8_english_ci | 1 |
| keybcs2 | DOS Kamenicky Czech-Slovak | keybcs2_general_ci | 1 |
| koi8r | KOI8-R Relcom Russian | koi8r_general_ci | 1 |
| koi8u | KOI8-U Ukrainian | koi8u_general_ci | 1 |
| latin1 | cp1252 West European | latin1_swedish_ci | 1 |
| latin2 | ISO 8859-2 Central European | latin2_general_ci | 1 |
| latin5 | ISO 8859-9 Turkish | latin5_turkish_ci | 1 |
| latin7 | ISO 8859-13 Baltic | latin7_general_ci | 1 |
| macce | Mac Central European | macce_general_ci | 1 |
| macroman | Mac West European | macroman_general_ci | 1 |
| sjis | Shift-JIS Japanese | sjis_japanese_ci | 2 |
| swe7 | 7bit Swedish | swe7_swedish_ci | 1 |
| tis620 | TIS620 Thai | tis620_thai_ci | 1 |
| ucs2 | UCS-2 Unicode | ucs2_general_ci | 2 |
| ujis | EUC-JP Japanese | ujis_japanese_ci | 3 |
| utf16 | UTF-16 Unicode | utf16_general_ci | 4 |
| utf16le | UTF-16LE Unicode | utf16le_general_ci | 4 |
| utf32 | UTF-32 Unicode | utf32_general_ci | 4 |
| utf8mb3 | UTF-8 Unicode | utf8mb3_general_ci | 3 |
| utf8mb4 | UTF-8 Unicode | utf8mb4_0900_ai_ci | 4 |
列说明:
- Charset:字符集名称;
- Description:字符集描述;
- Default collation:字符集中一种默认的 比较规则;
- Maxlen:代表该种字符集表示一个字符最多需要几个字节。
utf字符集
在 MySQL 中 utf8 是 utf8mb3 的别名,所以之后在 MySQL 中提到 utf8 就意味着使用1~3个字节来表示一个字符,如果大家有使用4字节编码一个字符的情况,比如存储一些emoji表情啥的,那请使用 utf8mb4 。
utf8mb3与utf8mb4的区别:
- utf8mb3 :阉割过的 utf8 字符集,只使用1~3个字节表示字符。
- utf8mb4 :正宗的 utf8 字符集,使用1~4个字节表示字符。
为什么需要utf8mb3和utf8mb4呢?
在 MySQL 中字符集表示一个字符所用最大字节长度在某些方面会影响系统的存储和性能,常用的一些字符使用1~3个字节就可以表示了,所以可以使用utf8mb3编码存储和性能更佳。
查看MySQL比较规则
查看 MySQL 中支持的比较规则的命令如下:
SHOW COLLATION [LIKE 匹配的模式];
show collation ;
执行上面语句,有286个比较规则,挑选常见的输出如下:
| Collation | Charset | Id | Default | Compiled | Sortlen | Pad_attribute |
|---|---|---|---|---|---|---|
| ascii_bin | ascii | 65 | Yes | 1 | PAD SPACE | |
| ascii_general_ci | ascii | 11 | Yes | Yes | 1 | PAD SPACE |
| gb18030_bin | gb18030 | 249 | Yes | 1 | PAD SPACE | |
| gb18030_chinese_ci | gb18030 | 248 | Yes | Yes | 2 | PAD SPACE |
| gb18030_unicode_520_ci | gb18030 | 250 | Yes | 8 | PAD SPACE | |
| gb2312_bin | gb2312 | 86 | Yes | 1 | PAD SPACE | |
| gb2312_chinese_ci | gb2312 | 24 | Yes | Yes | 1 | PAD SPACE |
| gbk_bin | gbk | 87 | Yes | 1 | PAD SPACE | |
| gbk_chinese_ci | gbk | 28 | Yes | Yes | 1 | PAD SPACE |
| latin1_bin | latin1 | 47 | Yes | 1 | PAD SPACE | |
| latin1_danish_ci | latin1 | 15 | Yes | 1 | PAD SPACE | |
| latin1_general_ci | latin1 | 48 | Yes | 1 | PAD SPACE | |
| latin1_general_cs | latin1 | 49 | Yes | 1 | PAD SPACE | |
| latin1_german1_ci | latin1 | 5 | Yes | 1 | PAD SPACE | |
| latin1_german2_ci | latin1 | 31 | Yes | 2 | PAD SPACE | |
| latin1_spanish_ci | latin1 | 94 | Yes | 1 | PAD SPACE | |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 | PAD SPACE |
| latin2_bin | latin2 | 77 | Yes | 1 | PAD SPACE | |
| latin2_croatian_ci | latin2 | 27 | Yes | 1 | PAD SPACE | |
| latin2_czech_cs | latin2 | 2 | Yes | 4 | PAD SPACE | |
| latin2_general_ci | latin2 | 9 | Yes | Yes | 1 | PAD SPACE |
| latin2_hungarian_ci | latin2 | 21 | Yes | 1 | PAD SPACE | |
| latin5_bin | latin5 | 78 | Yes | 1 | PAD SPACE | |
| latin5_turkish_ci | latin5 | 30 | Yes | Yes | 1 | PAD SPACE |
| latin7_bin | latin7 | 79 | Yes | 1 | PAD SPACE | |
| latin7_estonian_cs | latin7 | 20 | Yes | 1 | PAD SPACE | |
| latin7_general_ci | latin7 | 41 | Yes | Yes | 1 | PAD SPACE |
| utf16le_bin | utf16le | 62 | Yes | 1 | PAD SPACE | |
| utf16le_general_ci | utf16le | 56 | Yes | Yes | 1 | PAD SPACE |
| utf16_bin | utf16 | 55 | Yes | 1 | PAD SPACE | |
| utf16_croatian_ci | utf16 | 122 | Yes | 8 | PAD SPACE | |
| utf16_czech_ci | utf16 | 111 | Yes | 8 | PAD SPACE | |
| utf16_danish_ci | utf16 | 112 | Yes | 8 | PAD SPACE | |
| utf16_esperanto_ci | utf16 | 118 | Yes | 8 | PAD SPACE | |
| utf16_estonian_ci | utf16 | 107 | Yes | 8 | PAD SPACE | |
| utf16_general_ci | utf16 | 54 | Yes | Yes | 1 | PAD SPACE |
| utf16_german2_ci | utf16 | 121 | Yes | 8 | PAD SPACE | |
| utf16_hungarian_ci | utf16 | 119 | Yes | 8 | PAD SPACE | |
| utf16_icelandic_ci | utf16 | 102 | Yes | 8 | PAD SPACE | |
| utf16_latvian_ci | utf16 | 103 | Yes | 8 | PAD SPACE | |
| utf16_lithuanian_ci | utf16 | 113 | Yes | 8 | PAD SPACE | |
| utf16_persian_ci | utf16 | 117 | Yes | 8 | PAD SPACE | |
| utf16_polish_ci | utf16 | 106 | Yes | 8 | PAD SPACE | |
| utf16_romanian_ci | utf16 | 104 | Yes | 8 | PAD SPACE | |
| utf16_roman_ci | utf16 | 116 | Yes | 8 | PAD SPACE | |
| utf16_sinhala_ci | utf16 | 120 | Yes | 8 | PAD SPACE | |
| utf16_slovak_ci | utf16 | 114 | Yes | 8 | PAD SPACE | |
| utf16_slovenian_ci | utf16 | 105 | Yes | 8 | PAD SPACE | |
| utf16_spanish2_ci | utf16 | 115 | Yes | 8 | PAD SPACE | |
| utf16_spanish_ci | utf16 | 108 | Yes | 8 | PAD SPACE | |
| utf16_swedish_ci | utf16 | 109 | Yes | 8 | PAD SPACE | |
| utf16_turkish_ci | utf16 | 110 | Yes | 8 | PAD SPACE | |
| utf16_unicode_520_ci | utf16 | 123 | Yes | 8 | PAD SPACE | |
| utf16_unicode_ci | utf16 | 101 | Yes | 8 | PAD SPACE | |
| utf16_vietnamese_ci | utf16 | 124 | Yes | 8 | PAD SPACE | |
| utf32_bin | utf32 | 61 | Yes | 1 | PAD SPACE | |
| utf32_croatian_ci | utf32 | 181 | Yes | 8 | PAD SPACE | |
| utf32_czech_ci | utf32 | 170 | Yes | 8 | PAD SPACE | |
| utf32_danish_ci | utf32 | 171 | Yes | 8 | PAD SPACE | |
| utf32_esperanto_ci | utf32 | 177 | Yes | 8 | PAD SPACE | |
| utf32_estonian_ci | utf32 | 166 | Yes | 8 | PAD SPACE | |
| utf32_general_ci | utf32 | 60 | Yes | Yes | 1 | PAD SPACE |
| utf32_german2_ci | utf32 | 180 | Yes | 8 | PAD SPACE | |
| utf32_hungarian_ci | utf32 | 178 | Yes | 8 | PAD SPACE | |
| utf32_icelandic_ci | utf32 | 161 | Yes | 8 | PAD SPACE | |
| utf32_latvian_ci | utf32 | 162 | Yes | 8 | PAD SPACE | |
| utf32_lithuanian_ci | utf32 | 172 | Yes | 8 | PAD SPACE | |
| utf32_persian_ci | utf32 | 176 | Yes | 8 | PAD SPACE | |
| utf32_polish_ci | utf32 | 165 | Yes | 8 | PAD SPACE | |
| utf32_romanian_ci | utf32 | 163 | Yes | 8 | PAD SPACE | |
| utf32_roman_ci | utf32 | 175 | Yes | 8 | PAD SPACE | |
| utf32_sinhala_ci | utf32 | 179 | Yes | 8 | PAD SPACE | |
| utf32_slovak_ci | utf32 | 173 | Yes | 8 | PAD SPACE | |
| utf32_slovenian_ci | utf32 | 164 | Yes | 8 | PAD SPACE | |
| utf32_spanish2_ci | utf32 | 174 | Yes | 8 | PAD SPACE | |
| utf32_spanish_ci | utf32 | 167 | Yes | 8 | PAD SPACE | |
| utf32_swedish_ci | utf32 | 168 | Yes | 8 | PAD SPACE | |
| utf32_turkish_ci | utf32 | 169 | Yes | 8 | PAD SPACE | |
| utf32_unicode_520_ci | utf32 | 182 | Yes | 8 | PAD SPACE | |
| utf32_unicode_ci | utf32 | 160 | Yes | 8 | PAD SPACE | |
| utf32_vietnamese_ci | utf32 | 183 | Yes | 8 | PAD SPACE | |
| utf8mb3_bin | utf8mb3 | 83 | Yes | 1 | PAD SPACE | |
| utf8mb3_croatian_ci | utf8mb3 | 213 | Yes | 8 | PAD SPACE | |
| utf8mb3_czech_ci | utf8mb3 | 202 | Yes | 8 | PAD SPACE | |
| utf8mb3_danish_ci | utf8mb3 | 203 | Yes | 8 | PAD SPACE | |
| utf8mb3_esperanto_ci | utf8mb3 | 209 | Yes | 8 | PAD SPACE | |
| utf8mb3_estonian_ci | utf8mb3 | 198 | Yes | 8 | PAD SPACE | |
| utf8mb3_general_ci | utf8mb3 | 33 | Yes | Yes | 1 | PAD SPACE |
| utf8mb3_general_mysql500_ci | utf8mb3 | 223 | Yes | 1 | PAD SPACE | |
| utf8mb3_german2_ci | utf8mb3 | 212 | Yes | 8 | PAD SPACE | |
| utf8mb3_hungarian_ci | utf8mb3 | 210 | Yes | 8 | PAD SPACE | |
| utf8mb3_icelandic_ci | utf8mb3 | 193 | Yes | 8 | PAD SPACE | |
| utf8mb3_latvian_ci | utf8mb3 | 194 | Yes | 8 | PAD SPACE | |
| utf8mb3_lithuanian_ci | utf8mb3 | 204 | Yes | 8 | PAD SPACE | |
| utf8mb3_persian_ci | utf8mb3 | 208 | Yes | 8 | PAD SPACE | |
| utf8mb3_polish_ci | utf8mb3 | 197 | Yes | 8 | PAD SPACE | |
| utf8mb3_romanian_ci | utf8mb3 | 195 | Yes | 8 | PAD SPACE | |
| utf8mb3_roman_ci | utf8mb3 | 207 | Yes | 8 | PAD SPACE | |
| utf8mb3_sinhala_ci | utf8mb3 | 211 | Yes | 8 | PAD SPACE | |
| utf8mb3_slovak_ci | utf8mb3 | 205 | Yes | 8 | PAD SPACE | |
| utf8mb3_slovenian_ci | utf8mb3 | 196 | Yes | 8 | PAD SPACE | |
| utf8mb3_spanish2_ci | utf8mb3 | 206 | Yes | 8 | PAD SPACE | |
| utf8mb3_spanish_ci | utf8mb3 | 199 | Yes | 8 | PAD SPACE | |
| utf8mb3_swedish_ci | utf8mb3 | 200 | Yes | 8 | PAD SPACE | |
| utf8mb3_tolower_ci | utf8mb3 | 76 | Yes | 1 | PAD SPACE | |
| utf8mb3_turkish_ci | utf8mb3 | 201 | Yes | 8 | PAD SPACE | |
| utf8mb3_unicode_520_ci | utf8mb3 | 214 | Yes | 8 | PAD SPACE | |
| utf8mb3_unicode_ci | utf8mb3 | 192 | Yes | 8 | PAD SPACE | |
| utf8mb3_vietnamese_ci | utf8mb3 | 215 | Yes | 8 | PAD SPACE | |
| utf8mb4_0900_ai_ci | utf8mb4 | 255 | Yes | Yes | 0 | NO PAD |
| utf8mb4_0900_as_ci | utf8mb4 | 305 | Yes | 0 | NO PAD | |
| utf8mb4_0900_as_cs | utf8mb4 | 278 | Yes | 0 | NO PAD | |
| utf8mb4_0900_bin | utf8mb4 | 309 | Yes | 1 | NO PAD | |
| utf8mb4_bg_0900_ai_ci | utf8mb4 | 318 | Yes | 0 | NO PAD | |
| utf8mb4_bg_0900_as_cs | utf8mb4 | 319 | Yes | 0 | NO PAD | |
| utf8mb4_bin | utf8mb4 | 46 | Yes | 1 | PAD SPACE | |
| utf8mb4_bs_0900_ai_ci | utf8mb4 | 316 | Yes | 0 | NO PAD | |
| utf8mb4_bs_0900_as_cs | utf8mb4 | 317 | Yes | 0 | NO PAD | |
| utf8mb4_croatian_ci | utf8mb4 | 245 | Yes | 8 | PAD SPACE | |
| utf8mb4_cs_0900_ai_ci | utf8mb4 | 266 | Yes | 0 | NO PAD | |
| utf8mb4_cs_0900_as_cs | utf8mb4 | 289 | Yes | 0 | NO PAD | |
| utf8mb4_czech_ci | utf8mb4 | 234 | Yes | 8 | PAD SPACE | |
| utf8mb4_danish_ci | utf8mb4 | 235 | Yes | 8 | PAD SPACE | |
| utf8mb4_da_0900_ai_ci | utf8mb4 | 267 | Yes | 0 | NO PAD | |
| utf8mb4_da_0900_as_cs | utf8mb4 | 290 | Yes | 0 | NO PAD | |
| utf8mb4_de_pb_0900_ai_ci | utf8mb4 | 256 | Yes | 0 | NO PAD | |
| utf8mb4_de_pb_0900_as_cs | utf8mb4 | 279 | Yes | 0 | NO PAD | |
| utf8mb4_eo_0900_ai_ci | utf8mb4 | 273 | Yes | 0 | NO PAD | |
| utf8mb4_eo_0900_as_cs | utf8mb4 | 296 | Yes | 0 | NO PAD | |
| utf8mb4_esperanto_ci | utf8mb4 | 241 | Yes | 8 | PAD SPACE | |
| utf8mb4_estonian_ci | utf8mb4 | 230 | Yes | 8 | PAD SPACE | |
| utf8mb4_es_0900_ai_ci | utf8mb4 | 263 | Yes | 0 | NO PAD | |
| utf8mb4_es_0900_as_cs | utf8mb4 | 286 | Yes | 0 | NO PAD | |
| utf8mb4_es_trad_0900_ai_ci | utf8mb4 | 270 | Yes | 0 | NO PAD | |
| utf8mb4_es_trad_0900_as_cs | utf8mb4 | 293 | Yes | 0 | NO PAD | |
| utf8mb4_et_0900_ai_ci | utf8mb4 | 262 | Yes | 0 | NO PAD | |
| utf8mb4_et_0900_as_cs | utf8mb4 | 285 | Yes | 0 | NO PAD | |
| utf8mb4_general_ci | utf8mb4 | 45 | Yes | 1 | PAD SPACE | |
| utf8mb4_german2_ci | utf8mb4 | 244 | Yes | 8 | PAD SPACE | |
| utf8mb4_gl_0900_ai_ci | utf8mb4 | 320 | Yes | 0 | NO PAD | |
| utf8mb4_gl_0900_as_cs | utf8mb4 | 321 | Yes | 0 | NO PAD | |
| utf8mb4_hr_0900_ai_ci | utf8mb4 | 275 | Yes | 0 | NO PAD | |
| utf8mb4_hr_0900_as_cs | utf8mb4 | 298 | Yes | 0 | NO PAD | |
| utf8mb4_hungarian_ci | utf8mb4 | 242 | Yes | 8 | PAD SPACE | |
| utf8mb4_hu_0900_ai_ci | utf8mb4 | 274 | Yes | 0 | NO PAD | |
| utf8mb4_hu_0900_as_cs | utf8mb4 | 297 | Yes | 0 | NO PAD | |
| utf8mb4_icelandic_ci | utf8mb4 | 225 | Yes | 8 | PAD SPACE | |
| utf8mb4_is_0900_ai_ci | utf8mb4 | 257 | Yes | 0 | NO PAD | |
| utf8mb4_is_0900_as_cs | utf8mb4 | 280 | Yes | 0 | NO PAD | |
| utf8mb4_ja_0900_as_cs | utf8mb4 | 303 | Yes | 0 | NO PAD | |
| utf8mb4_ja_0900_as_cs_ks | utf8mb4 | 304 | Yes | 24 | NO PAD | |
| utf8mb4_latvian_ci | utf8mb4 | 226 | Yes | 8 | PAD SPACE | |
| utf8mb4_la_0900_ai_ci | utf8mb4 | 271 | Yes | 0 | NO PAD | |
| utf8mb4_la_0900_as_cs | utf8mb4 | 294 | Yes | 0 | NO PAD | |
| utf8mb4_lithuanian_ci | utf8mb4 | 236 | Yes | 8 | PAD SPACE | |
| utf8mb4_lt_0900_ai_ci | utf8mb4 | 268 | Yes | 0 | NO PAD | |
| utf8mb4_lt_0900_as_cs | utf8mb4 | 291 | Yes | 0 | NO PAD | |
| utf8mb4_lv_0900_ai_ci | utf8mb4 | 258 | Yes | 0 | NO PAD | |
| utf8mb4_lv_0900_as_cs | utf8mb4 | 281 | Yes | 0 | NO PAD | |
| utf8mb4_mn_cyrl_0900_ai_ci | utf8mb4 | 322 | Yes | 0 | NO PAD | |
| utf8mb4_mn_cyrl_0900_as_cs | utf8mb4 | 323 | Yes | 0 | NO PAD | |
| utf8mb4_nb_0900_ai_ci | utf8mb4 | 310 | Yes | 0 | NO PAD | |
| utf8mb4_nb_0900_as_cs | utf8mb4 | 311 | Yes | 0 | NO PAD | |
| utf8mb4_nn_0900_ai_ci | utf8mb4 | 312 | Yes | 0 | NO PAD | |
| utf8mb4_nn_0900_as_cs | utf8mb4 | 313 | Yes | 0 | NO PAD | |
| utf8mb4_persian_ci | utf8mb4 | 240 | Yes | 8 | PAD SPACE | |
| utf8mb4_pl_0900_ai_ci | utf8mb4 | 261 | Yes | 0 | NO PAD | |
| utf8mb4_pl_0900_as_cs | utf8mb4 | 284 | Yes | 0 | NO PAD | |
| utf8mb4_polish_ci | utf8mb4 | 229 | Yes | 8 | PAD SPACE | |
| utf8mb4_romanian_ci | utf8mb4 | 227 | Yes | 8 | PAD SPACE | |
| utf8mb4_roman_ci | utf8mb4 | 239 | Yes | 8 | PAD SPACE | |
| utf8mb4_ro_0900_ai_ci | utf8mb4 | 259 | Yes | 0 | NO PAD | |
| utf8mb4_ro_0900_as_cs | utf8mb4 | 282 | Yes | 0 | NO PAD | |
| utf8mb4_ru_0900_ai_ci | utf8mb4 | 306 | Yes | 0 | NO PAD | |
| utf8mb4_ru_0900_as_cs | utf8mb4 | 307 | Yes | 0 | NO PAD | |
| utf8mb4_sinhala_ci | utf8mb4 | 243 | Yes | 8 | PAD SPACE | |
| utf8mb4_sk_0900_ai_ci | utf8mb4 | 269 | Yes | 0 | NO PAD | |
| utf8mb4_sk_0900_as_cs | utf8mb4 | 292 | Yes | 0 | NO PAD | |
| utf8mb4_slovak_ci | utf8mb4 | 237 | Yes | 8 | PAD SPACE | |
| utf8mb4_slovenian_ci | utf8mb4 | 228 | Yes | 8 | PAD SPACE | |
| utf8mb4_sl_0900_ai_ci | utf8mb4 | 260 | Yes | 0 | NO PAD | |
| utf8mb4_sl_0900_as_cs | utf8mb4 | 283 | Yes | 0 | NO PAD | |
| utf8mb4_spanish2_ci | utf8mb4 | 238 | Yes | 8 | PAD SPACE | |
| utf8mb4_spanish_ci | utf8mb4 | 231 | Yes | 8 | PAD SPACE | |
| utf8mb4_sr_latn_0900_ai_ci | utf8mb4 | 314 | Yes | 0 | NO PAD | |
| utf8mb4_sr_latn_0900_as_cs | utf8mb4 | 315 | Yes | 0 | NO PAD | |
| utf8mb4_sv_0900_ai_ci | utf8mb4 | 264 | Yes | 0 | NO PAD | |
| utf8mb4_sv_0900_as_cs | utf8mb4 | 287 | Yes | 0 | NO PAD | |
| utf8mb4_swedish_ci | utf8mb4 | 232 | Yes | 8 | PAD SPACE | |
| utf8mb4_tr_0900_ai_ci | utf8mb4 | 265 | Yes | 0 | NO PAD | |
| utf8mb4_tr_0900_as_cs | utf8mb4 | 288 | Yes | 0 | NO PAD | |
| utf8mb4_turkish_ci | utf8mb4 | 233 | Yes | 8 | PAD SPACE | |
| utf8mb4_unicode_520_ci | utf8mb4 | 246 | Yes | 8 | PAD SPACE | |
| utf8mb4_unicode_ci | utf8mb4 | 224 | Yes | 8 | PAD SPACE | |
| utf8mb4_vietnamese_ci | utf8mb4 | 247 | Yes | 8 | PAD SPACE | |
| utf8mb4_vi_0900_ai_ci | utf8mb4 | 277 | Yes | 0 | NO PAD | |
| utf8mb4_vi_0900_as_cs | utf8mb4 | 300 | Yes | 0 | NO PAD | |
| utf8mb4_zh_0900_as_cs | utf8mb4 | 308 | Yes | 0 | NO PAD |
列说明:
- Collation:比较规则名称,命名方式 字符集名称_语言_后缀。
| 后缀 | 英文释义 | 描述 |
|---|---|---|
| _ai | accent insensitive | 不区分重音 |
| _as | accent sensitive | 区分重音 |
| _ci | case insensitive | 不区分大小写 |
| _cs | case sensitive | 区分大小写 |
| _bin | binary | 以二进制方式比较 |
- Charset: 比较规则所属字符集。
- Id:比较规则id。
- Default:YES 的就是该字符集的默认比较规则。
- Compiled:是否将字符集编译到服务器中。
- Sortlen:这与对字符集中表示的字符串进行排序所需的内存量有关。
字符集的应用
MySQL 有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_client 、character_set_connection、character_set_results 这三个系统变量设置成和客户端使用的字符集一致的情况,这样减少了很多无谓的字符集转换。
MySQL 提供了一条非常简便的语句:
SET NAMES 字符集名;
上面语句产生的效果与下面一样:
SET character_set_client = 字符集名;
SET character_set_connection = 字符集名;
SET character_set_results = 字符集名;
另外,如果想在启动客户端的时候就把 character_set_client 、 character_set_connection 、
character_set_results 这三个系统变量的值设置成一样的,那我们可以在启动客户端的时候指定一个叫default-character-set 的启动选项。
在my.ini文件配置:
default-character-set=utf8
相关文章:
MySQL-字符集和比较规则
在计算机中只能存储二进制数据,那该怎么存储字符串呢?当然是建立字符与二进制数据的映射关系 了,建立这个关系最起码要搞清楚两件事: 界定清楚字符范围:需要把哪些字符映射成二进制数据?编码与解码&#x…...
微搭低代码从入门到精通12-网格布局
开发小程序首要的就是考虑布局的问题,我们在以前的版本只能选择普通容器结合图片和文本组件来构建页面。 使用通用组件布局也可以,但有个问题是你要先学习CSS,要懂布局的概念,比如需要知道啥是flex布局,然后还得熟悉每…...
【c语言】二叉树
主页:114514的代码大冒险 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 引入 我们之前已经学过线性数据结构,今天我们将介绍非线性数据结构----树 树是一种非线性的…...
六、Java框架之SpringBoot
黑马课程 文章目录1. SpringBoot入门1.1 SpringBoot入门案例步骤1:创建SpringBoot项目高版本springboot常见错误步骤2:创建BookController步骤3:启动服务器并运行程序pom.xml示例1.2 官网创建SpringBoot1.3 SpringBoot工程快速启动问题导入打…...
「Python|环境安装|Windows」如何在Windows上安装Python环境?
本文主要介绍如何在Windows上安装Python,帮助初学者或者非程序员伙伴快速搭建可以运行python代码的环境。 文章目录安装python做一点小配置验证python如何安装指定版本的python编程语言的环境搭建一直是学习编程的第一道门槛。 对于如何在Linux系统上安装指定版本的…...
人工智能轨道交通行业周刊-第33期(2023.2.6-2.12)
本期关键词:高铁激光清洗、高铁确认列车、无线通信系统、推理服务优化、量子信息技术 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟V…...
五分钟看懂Java字节码:极简手册
字节码新手很容易被厚厚的 JVM 书籍劝退,即使我看过相关书籍,工作真正用到时也全忘了,还得现学。 等我有了一定的字节码阅读经验,才发现字节码其实非常简单,只需要三步就能快速学会: 先了解 JVM 的基本结…...
C++ 类与对象(下)
✅<1>主页:我的代码爱吃辣 📃<2>知识讲解:C 🔥<3>创作者:我的代码爱吃辣 ☂️<4>开发环境:Visual Studio 2022 💬<5>前言:C类与对象的收尾工作&#…...
Java基础——I/O
一、异常 异常是程序中可能出现的问题,它的父类是Exception。异常分为两类,编译时异常、运行时异常。 编译时异常:没有继承RuntimeException的异常,直接继承于Exception。编译阶段就会错误提示。运行时异常:RuntimeE…...
关于@hide的理解
在上一篇文章《学习HandlerThread》我们提到虽然HandlerThread类里有getThreadHandler()方法得到Handler,但是我们不可能调用到它。因为这个方法用hide注释了 /*** return a shared {link Handler} associated with this thread* hide*/NonNullpublic Handler getT…...
使用python加密主机文件几种方法实现
本文主要介绍了使用python加密主机文件几种方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧数据加密是一种保护数据安全的技术,通过对数据进行编…...
西湖论剑 2023 比赛复现
WEB real_ez_node 在 route/index.js 中: router.post(/copy,(req,res)>{res.setHeader(Content-type,text/html;charsetutf-8)var ip req.connection.remoteAddress;console.log(ip);var obj {msg: ,}if (!ip.includes(127.0.0.1)) {obj.msg"only for…...
微信小程序更换管理员/重置管理员
方式1: 首先进入微信公众平台官网进入并登录后在管理中找到成员管理选项找到管理员点击后方的修改选项需要使用原管理员的微信进行扫码验证扫码后在手机上确认绑定新管理员,注意:如果是个人账号不可以更改成其他人。 方式2:原管…...
企业进存销管理系统
技术:Java、JSP等摘要:随着当今世界计算机技术的飞速发展,计算机在企业管理中应用的普及,利用计算机实现企业进销存管理势在必行。本系统结合公司实际的进销存制度,通过对本公司的供应商、客户、商品、进货、销售、进销…...
C++入门
变量变量创建的语法: 数据类型 变量名 变量初始值;int a 10;cout << a << endl;常量作用:用于记录程序中不可更改的教国C定义常量两种方式1).#define 宏常量:#define 常量名 常量值通常在文件上方定义。表示一个常量2).const 修饰的变量const 数据类型 常量名 常…...
视频知识点(20)- H264码流如何在SPS中获取宽高信息?
《音视频开发》系列-总览 前沿 了解H264视频编码格式的小伙伴都知道,H264编码中存在两个非常重要的参数集。没错,它们就是序列参数集(SPS)和图像参数集(PPS),而且通常情况下,PPS会依赖SPS中的部分参数信息,同时,视频码流的宽高信息也存储在SPS中。那么如何从中获取视…...
鲜花数据集实验结果总结
从read_split_data中得到:训练数据集,验证数据集,训练标签,验证标签。的所有的具体详细路径 数据集位置:https://download.csdn.net/download/guoguozgw/87437634 import os #一种轻量级的数据交换格式, …...
ElasticJob-Lite架构篇 - 认知分布式任务调度ElasticJob-Lite
前言 本文基于 ElasticJob-Lite 3.x 版本展开分析。 如果 Quartz 集群中有多个服务端节点,任务决定在哪个服务端节点上执行的呢? Quartz 采用随机负载,通过 DB 抢占下一个即将触发的 Trigger 绑定的任务的执行权限。 在 Quartz 的基础上&…...
【直击招聘C++】2.6 对象之间的复制
2.6 对象之间的复制一、要点归纳1. 对象之间的复制操作1.1 运算符1.2 拷贝构造函数2. 对象之间的浅复制和深复制2.1 对象的浅复制2.2 对象的深复制二、面试真题解析面试题1面试题2一、要点归纳 1. 对象之间的复制操作 同一个类的对象之间可以进行复制操作,即将一个…...
学了这么久python,不会连自己啥python版本都不知道吧?
人生苦短,我用Python 源码资料电子书:点击此处跳转文末名片获取 查看 Python 版本 我们可以在命令窗口(Windows 使用 winR 调出 cmd 运行框)使用以下命令查看我们使用的 Python 版本: python -V 或 python --version 以上命令执行结果如下: …...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
大型活动交通拥堵治理的视觉算法应用
大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动(如演唱会、马拉松赛事、高考中考等)期间,城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例,暖城商圈曾因观众集中离场导致周边…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
定时器任务——若依源码分析
分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...
Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
C#中的CLR属性、依赖属性与附加属性
CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...
