千家信息网

简单认识mysql字符集与校对规则

发表于:2025-11-12 作者:千家信息网编辑
千家信息网最后更新 2025年11月12日,下文主要给大家带来简单认识mysql字符集与校对规则,希望这些文字能够带给大家实际用处,这也是我编辑简单认识mysql字符集与校对规则这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。MySQL
千家信息网最后更新 2025年11月12日简单认识mysql字符集与校对规则

下文主要给大家带来简单认识mysql字符集与校对规则,希望这些文字能够带给大家实际用处,这也是我编辑简单认识mysql字符集与校对规则这篇文章的主要目的。好了,废话不多说,大家直接看下文吧。

MySQL在Linux下数据库名、表名、列名、别名大小写的默认规则是这样的:

1.数据库名与表名是严格区分大小写的.

2.表的别名是严格区分大小写的.

3.列名与列的别名在所有的情况下均是忽略大小写的.

4.字段内容(即数据)默认情况下是大小写不敏感的.

5.变量名(函数和存储过程)也是严格区分大小写的.

所以不禁我们就会想去修改,而控制这些的究竟又是什么呢?正是字符集和字符集的校对规则限制的.

字符集和校对规则是什么

字符集是我们字符解析的编码表,在计算机底层里,任何字符都只是无法直接解析的代码,需要这些编码表来解析究竟是什么字.最基础的正是ASCII码表,但是这个表字符太少,用来代表英文和一些日常标点符号就还好,但是要来代表全世界那么多的文字,就显然不够用了,所以就出了各种字符集来解析各种文字,例如中文简体的gb2312,中文繁体的big5,最出名的万国码utf8,还有支持emoji表情的utf8mb4等.

我们常说的访问乱码,正是由于字符编码不对称导致的,可能是你和云服务器之间,也可能是云服务器与数据库之间,也可能是代码内部之间没有转换,等等.

字符集是通用的,存在于计算机世界的各种环境,数据库只是其中之一,而校对规则,是针对mysql来说的,规则也都是固定的.可能有人会觉得懵逼,有了字符集,为什么还要校对规则,通俗易懂点说,字符之间有差异,但是靠什么去体现差异呢(例如排序和分组的操作),那就是这个校对规则的存在意义.例如:不区分大小写的话,A和a是同样意义的,而校对规则严格之后,区分了大小写,A和a就不一样了.


字符集

我们可以用下面的命令来看看支持哪些字符集和校对规则.

#查看支持哪些字符集,节选mysql> show character set;+----------+---------------------------------+---------------------+--------+| Charset  | Description                     | Default collation   | Maxlen |+----------+---------------------------------+---------------------+--------+| big5     | Big5 Traditional Chinese        | big5_chinese_ci     |      2 || latin1   | cp1252 West European            | latin1_swedish_ci   |      1 || ascii    | US ASCII                        | ascii_general_ci    |      1 || gb2312   | GB2312 Simplified Chinese       | gb2312_chinese_ci   |      2 || gbk      | GBK Simplified Chinese          | gbk_chinese_ci      |      2 || utf8     | UTF-8 Unicode                   | utf8_general_ci     |      3 || utf8mb4  | UTF-8 Unicode                   | utf8mb4_general_ci  |      4 || utf16    | UTF-16 Unicode                  | utf16_general_ci    |      4 || utf32    | UTF-32 Unicode                  | utf32_general_ci    |      4 || binary   | Binary pseudo charset           | binary              |      1 || gb18030  | China National Standard GB18030 | gb18030_chinese_ci  |      4 |+----------+---------------------------------+---------------------+--------+41 rows in set (0.01 sec)

一般来说,mysql默认还是支持较多字符集,然而大部分情况我们还是用utf8比较多一些.原因是看到最后一列Maxlen中,代表的是使用这种字符集后的一个字符占用的最大字节数.big5(中文繁体)和gb2312(中文简体)虽然占的少,只有2字节,但是通用性不佳,utf16虽然很强大,但是占的字节数略多,占用了4字节,况且也不见得用得了那么多,折衷之下还是utf8好用一些,一个字符占用3字节.

更改mysql的默认字符集,可以在配置文件my.cnf里添加

#要在[mysqld]子项添加[mysqld]#全局默认字符集类型,按需求设定character-set-server = utf8#改完之后重启,进入mysql看一下,(不重启也行,一个个慢慢改吧)mysql> show variables like 'character%';+--------------------------+---------------------------------------------------------------+| Variable_name            | Value                                                         |+--------------------------+---------------------------------------------------------------+| character_set_client     | utf8                                                          || character_set_connection | utf8                                                          || character_set_database   | utf8                                                          || character_set_filesystem | binary                                                        || character_set_results    | utf8                                                          || character_set_server     | utf8                                                          || character_set_system     | utf8                                                          || character_sets_dir       | /usr/local/mysql-5.7.18-linux-glibc2.5-x86_64/share/charsets/ |+--------------------------+---------------------------------------------------------------+8 rows in set (0.00 sec)


字符校对规则

说完字符集,就来看看字符的校对规则有哪些.

#显示utf8字符集下有哪些校对规则,节选mysql> SHOW COLLATION like 'utf8\_%';+--------------------------+---------+-----+---------+----------+---------+| Collation                | Charset | Id  | Default | Compiled | Sortlen |+--------------------------+---------+-----+---------+----------+---------+| utf8_general_ci          | utf8    |  33 | Yes     | Yes      |       1 || utf8_bin                 | utf8    |  83 |         | Yes      |       1 || utf8_unicode_ci          | utf8    | 192 |         | Yes      |       8 || utf8_icelandic_ci        | utf8    | 193 |         | Yes      |       8 || utf8_unicode_520_ci      | utf8    | 214 |         | Yes      |       8 || utf8_vietnamese_ci       | utf8    | 215 |         | Yes      |       8 || utf8_general_mysql500_ci | utf8    | 223 |         | Yes      |       1 |+--------------------------+---------+-----+---------+----------+---------+27 rows in set (0.00 sec)

校对规则有很多,但是大部分我们用不到,大家也看到其他规则很多sortlen是8,比前两个比较常用的都多,会比较费资源是肯定的.

每个字符集有一个默认校对规则,例如,utf8默认校对规则是utf8_general_ci.并存在校对规则命名约定:它们以其相关的字符集名开始,通常包括一个语言名,并且以_ci(大小写不敏感),_cs(大小写敏感)或_bin(二元/大小写也敏感)结束。
所以说,mysql的utf8字符集就默认对数据的大小写不敏感了.

更改mysql的默认字符校对规则,也可以在配置文件my.cnf里添加

#要在[mysqld]子项添加[mysqld]#全局默认字符校对规则,按需求设定collation_server = utf8_bin#改完之后重启,进入mysql看一下,(不重启也行,一个个慢慢改吧)mysql> show variables like 'collation_%';+----------------------+-----------------+| Variable_name        | Value           |+----------------------+-----------------+| collation_connection | utf8_general_ci || collation_database   | utf8_bin        || collation_server     | utf8_bin        |+----------------------+-----------------+3 rows in set (0.00 sec)#当然你也可以视实际情况只改库级别或链接级别,是允许不一样的,不过你要知道其中风险就是了collation_database = utf8_bin#需要特别额外说明的是,连接级别的字符校对规则,是由客户端决定的,靠更改配置文件是不生效的,#所以要想更改,只能通过命令方式执行mysql> set collation_connection = utf8_bin

注意

要注意的是,这些更改都只对后续创建的数据库表和用户生效,已经存在的数据库是不受影响的,想要更改现有表的定义,那就必须更改表结构,或者重建数据库.

更改的方法就是alter,创建的方法如果是默认就不需要干什么,如果不默认就要人为指定了.

#更改表的字符集和字符校对规则mysql> ALTER TABLE 表名 MODIFY COLUMN 字段名 varchar(50) CHARACTER SET utf8 COLLATE utf8_bin;

需要特别注意的是,对已有数据库的表更改字符校对规则并不影响表的使用,只要表的数据不存在冲突就可以,只是部分查询和排序/分组的操作会造成差距,但是字符集乱改的话,会直接造成数据乱码,所以要非常谨慎,有时候还不如重建数据库比较实际.

当然,假如你确实有需要,你也可以指定库和表用什么字符编码和校对规则,例如突然要做一个指定是utf8mb4的库或表.

#创建数据库时指定字符编码和校对规则,以后在这个库新建的表的字段默认都遵循这两个规则mysql> CREATE DATABASE 数据库名 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;#创建一个表,指定使用字符集和校对规则,其他表不指定则走数据库的默认配置mysql> CREATE TABLE 表名(字段名 varchar(5)) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;#创建一个表,指定不同字段有不同的字符集和校对规则,其他不指定则走数据库的默认配置CREATE TABLE `表名` (`字段1`  varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,`字段2`  varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL );

开头也列出了,mysql默认数据库名与表名是严格区分大小写的,如果仅是对数据库名与表名大小写敏感进行修改,则my.cnf有一个专门的配置选项,直接配置完成后,重启就会忽略数据库名与表名的大小写规则,两个一起生效,lower_case_table_names

#要在[mysqld]子项添加[mysqld]#表名的大小写敏感选项,0为大小写敏感,1为大小写不敏感lower_case_table_names = 1#重启生效

对于以上关于简单认识mysql字符集与校对规则,大家是不是觉得非常有帮助。如果需要了解更多内容,请继续关注我们的行业资讯,相信你会喜欢上这些内容的。

字符 规则 字符集 校对 数据 大小 数据库 字段 配置 字节 之间 情况 中文 支持 两个 代表 内容 别名 只是 子项 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 南通进销存软件开发 崩坏3如何更改渠道服务器 浏览网页的网络安全管理 网络安全法确立了等相关主体 岛津数据库数据导入 苏州胜界网络技术 为什么英雄战绩不显示服务器排名 上海桥梁软件开发的公司 重庆什么是软件开发创新服务 网络技术保密措施怎么做 辽宁服务器机箱厂商云空间 轻言交友软件开发公司 嵌入式开发程序软件开发工具 东莞考试软件开发程序 管理sun服务器 科技互联网技术的发展 深圳网络安全知识竞赛 网络安全知识竞赛入口 网络技术应用必修 都有哪些网络安全隐患 软件开发工程师简历参考 服务器系统要求 饥荒联机版自建服务器不加载模组 包头360网络安全学院 国际服注册显示服务器忙怎么办 辽宁互联网养老软件开发电话 达内科技 重庆软件开发 互联网科技公司水平排名 大数据网络安全防御技术 软件开发的四个阶段
0