刚刚接触mysql的人(like me),可能对这2个概念不是太理解,这里小小解释一下,希望能说明清楚这个问题。
字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。字符集还是比较容易理解的,主要是校验规则,下面我简单举个例子来说明一下:
如在某个字符集“X”的A与a,他们的底层编码分别是A=0,a=100。这里符号“A”“a”和底层编码“0”“100”就是字符集的概念范围。假设我们要比较A与a的大小,我们得到a>A,因为我们是根据其底层编码进行比较的,这就是这个字符集“X”的一种校验规则“Z”(根据底层编码来比较)。假设,现在有另外一种校验规则,是先取其相反数,然后再比较大小,那么就很显然的得到a
关于字符集与校验规则,mysql能:
1、使用字符集来存储字符串,支持多种字符集;
2、使用校验规则来比较字符串,同种字符集还能使用多种校验规则来比较;
3、在同一台服务器、同一个数据库或者甚至在同一个表中使用不同字符集或校对规则来混合组合字符串;
4、可以在任何级别(服务器、数据库、表、字段、字符串),定义不同的字符集和校验规则。
查询你的mysql数据库所支持的字符集种类,可以如下:
mysql> show character set;
+———-+—————————–+———————+——–+
| Charset | Description | Default collation | Maxlen |
+———-+—————————–+———————+——–+
| big5 | Big5 Traditional Chinese | big5_chinese_ci | 2 |
| dec8 | DEC West European | dec8_swedish_ci | 1 |
| ………| …………………. | ……………. | . |
| eucjpms | UJIS for Windows Japanese | eucjpms_japanese_ci | 3 |
+———-+—————————–+———————+——–+
36 rows in set (0.00 sec)
这里的maxlen表示要用最大多少个字节来存储字符集的单个词,default collation表示该字符集的默认校验规则。
你也可以利用like来进行筛选,如下:
mysql> show character set like ‘latin%’;
+———+—————————–+——————-+——–+
| Charset | Description | Default collation | Maxlen |
+———+—————————–+——————-+——–+
| 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 |
+———+—————————–+——————-+——–+
4 rows in set (0.00 sec)
查询你的mysql数据库所支持字符集的校验规则,可以如下:
mysql> show collation;
+———————-+———-+—–+———+———-+———+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+———————-+———-+—–+———+———-+———+
| big5_chinese_ci | big5 | 1 | Yes | Yes | 1 |
| big5_bin | big5 | 84 | | Yes | 1 |
| dec8_swedish_ci | dec8 | 3 | Yes | | 0 |
| …….. | …. | .. | … | … | . |
| eucjpms_bin | eucjpms | 98 | | Yes | 1 |
+———————-+———-+—–+———+———-+———+
127 rows in set (0.00 sec)
这里compiled表示该collation所对应的character set是否被编译到此mysql数据库,通过此点就可以知道该mysql数据库是否支持某个字符集。sortlen表示要在内存中排序时,该字符集的字符要占用多少个字节。
你也可以利用like来进行筛选,如下:
mysql> show collation like ‘latin1%’;
+——————-+———+—-+———+———-+———+
| Collation | Charset | Id | Default | Compiled | Sortlen |
+——————-+———+—-+———+———-+———+
| latin1_german1_ci | latin1 | 5 | | Yes | 1 |
| latin1_swedish_ci | latin1 | 8 | Yes | Yes | 1 |
| latin1_danish_ci | latin1 | 15 | | Yes | 1 |
| latin1_german2_ci | latin1 | 31 | | Yes | 2 |
| latin1_bin | latin1 | 47 | | Yes | 1 |
| latin1_general_ci | latin1 | 48 | | Yes | 1 |
| latin1_general_cs | latin1 | 49 | | Yes | 1 |
| latin1_spanish_ci | latin1 | 94 | | Yes | 1 |
+——————-+———+—-+———+———-+———+
8 rows in set (0.00 sec)
大家可能已经发现collation的名字似乎有规律可循,其实的确也是这样的,并且它也有些特征,如下:
1、两个不同的字符集不能有相同的校验规则(字符集:校验规则 = 1:n);
2、每个字符集都有一个校验规则,就是对应的DEFAULT=YES的那个collation;
3、collation命名规则:字符集名_对应的语言名_ci/cs/bin,其中ci表示大小写不敏感性,cs表示大小写敏感性,bin表示二进制。
转:http://www.taobaodba.com/html/180_mysql_characterset_collation_concept.html
分享到:
相关推荐
### 一、理解MySQL字符集 在深入探讨修改字符集的方法之前,我们首先需要了解MySQL中的字符集概念。字符集是指一系列字符及其编码方式的集合。在MySQL中,常用的字符集有`latin1`、`utf8`等。其中: - **`latin1`*...
通过对MySQL字符集和排序规则的深入理解与配置,我们可以更好地管理和维护数据库中的数据。合理地选择和配置字符集及排序规则不仅可以提高数据的一致性和准确性,还可以增强应用程序的国际化能力。掌握了这些技巧,...
### MySQL字符集乱码问题及解决方案 #### 一、问题背景 在使用MySQL数据库时,很多用户会遇到中文字符显示为乱码的情况。这通常是因为MySQL数据库中的字符集设置不一致导致的。例如,在命令行下操作MySQL时,可能会...
### 如何修改MySQL字符集 在安装MySQL之后,默认情况下,MySQL服务器使用的字符集可能是`latin1`。然而,在实际的应用场景中,用户可能需要将字符集更改为其他字符集(例如`utf8`),以便更好地支持多语言环境下的...
通过合理配置数据库的安全参数,如选择合适的字符集和校对规则,以及利用MYSQL内置的校验和算法,可以有效提升数据库系统的整体安全性,保护数据免受恶意攻击和意外损坏的影响。同时,对于开发者而言,理解并掌握...
### MySQL ODBC 字符集设置详解 #### 一、背景介绍 在使用MySQL与ODBC进行数据交互的过程中,经常会遇到中文显示乱码的问题。这主要是因为客户端与服务器端的字符集设置不一致所导致的。本文将详细介绍如何解决...
MySQL 5.7.18 字符集配置详解 MySQL 数据库系统支持多种字符集,以适应不同语言和特殊字符的需求。在 MySQL 5.7.18 版本中,配置字符集对于确保数据正确存储和检索至关重要,尤其是处理包含非 ASCII 字符的数据时。...
如果想要查看gb2312字符集的校验规则,可以使用show collation like 'gb2312'; 语句。 需要注意的是:字符集并不完全等同于整理规则,同一个字符集可能有多个排序规则。因此,在设计和开发数据库时,需要选择合适的...
#### MySQL字符集概述 在MySQL中,字符集主要用于定义数据库、表、列中的文本数据存储方式。常见的字符集包括ASCII、Latin1(也称为ISO-8859-1)、GBK以及UTF-8等。其中UTF-8是一种可变长度编码,最多用四个字节表示...
在PHP程序设计中,创建数据库涉及到了数据库管理系统的基础知识,特别是与MySQL相关的字符集和校验规则。MySQL作为广泛使用的开源关系型数据库,其字符集和校验规则的灵活配置对于处理多语言环境下的数据存储至关...
MySQL字符集是数据库...总结,修改MySQL字符集涉及配置文件的更新、服务重启以及验证更改,确保数据能以正确的字符集存储和检索。理解并正确配置字符集是管理多语言数据库的关键,有助于避免乱码问题,提升用户体验。
本文将深入探讨如何解决在设置MySQL字符集时遇到的问题,特别是针对`default-character-set=utf8`不被识别的情况。 首先,我们需要理解MySQL中的几个主要字符集设置: 1. **[client]** 部分的`default-character-...
- 执行`mysql> show variables like 'character_set%'`命令来查看所有与字符集相关的系统变量,确认它们都已设置为期望的字符集。 #### 二、自动完成(自动提示)功能 在MySQL命令行工具中启用自动完成(自动提示...
10.10. MySQL支持的字符集和校对 10.10.1. Unicode字符集 10.10.2. 西欧字符集 10.10.3. 中欧字符集 10.10.4. 南欧与中东字符集 10.10.5. 波罗的海字符集 10.10.6. 西里尔字符集 10.10.7. 亚洲字符集 11. 列类型 ...
`命令来查看MySQL服务器、客户端、数据库、表以及列的字符集和排序规则。 - 如果看到的值为`binary`,这表示没有设置特定的字符集,可能导致乱码问题。 3. **修改配置文件** - 复制`my-default.ini`并重命名为`my...
在MySQL数据库操作中,字符集问题常常成为数据一致性与正确性的关键挑战,特别是在涉及数据导入导出、主备库同步的场景。字符集决定了数据如何存储和显示,不同的字符集编码方式不同,可能会导致相同的字符在二进制...
MySQL字符集问题在数据库操作中是一个常见的痛点,尤其是在数据导入、恢复或迁移过程中。这个问题主要源于字符集不兼容,导致数据无法正确解析或显示。在本案例中,问题的根源在于一个原始数据库的默认字符集为`...
6. 验证字符集设置是否生效,可以通过登录MySQL客户端并运行`SHOW VARIABLES LIKE 'character%'`来查看所有与字符集相关的变量。如果设置成功,`character_set_server`应显示为`utf8`。 此外,除了服务器级别的字符...