searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

MYSQL的大小写一探

2024-09-09 09:47:50
4
0

对象的大小写

/表名的大小写

/表名的大小写和平台有关。WINDOWS平台是不区分大小写的。LINUX/UNIX则可以区分,所以又有了lower_case_table_names参数来控制大小写是否敏感。

lower_case_table_names=0 表名存储为给定的大小写,名称比较是区分大小写的

lower_case_table_names=1 表名存储为小写,名称比较是不区分大小写的

lower_case_table_names=2 表名存储为给定的大小写,但MySQL在查找时将它们转换为小写字母。名称不区分大小写。这只适用于不区分大小写的文件系统默认值是1,不区分库表名的大小写(都以小写来存储)

 

 

列、索引、存储过程、事件名的大小写

列、索引 、存储过程、事件不区分大小写

 

举例如下:

 

从这里可以看到,即使是大写的列名建表,其实还是不区分大小写的。

 

表数据的大小写

字符集

TELEDB的字符集规范

字符集的查看和修改

1、查看服务器的默认字符集和字符校验规则

SHOW VARIABLES LIKE 'character_set_server';

SHOW VARIABLES LIKE 'collation_server';

部份私有化部署的MYSQL就不符合TELEDB的规范

 

2、查看数据库的默认字符集和字符校验规则

SHOW CREATE DATABASE database_name;

3、查看表的字符集和字符校验规则

SHOW CREATE TABLE table_name;

4、修改表的字符集和字符校验规则

 

ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name COLLATE collation_name;

 

MYSQL的风险点在于可以指定每个库/表的字符集和校验规则。所以TELEDB规范中是明确反对这种做法的。

 

字符集对大小写的影响

MySQL是否区分大小写由字符序(COLLATE)决定。一般"_ci"表示大小写不敏感cicase insensitive, "大小写不敏感""_cs"表示大小写敏感(或者是bin二进制)。当字符序后缀为"_ci"时不区分大小写,主键或唯一键字段不能插入仅大小写不同的值,如'a'’A'

 

utf8默认的utf8_general_ci较验规则为例子:

之所以没有字符校验规则 ,是因为utf8_general_ci是默认的字符校验规则

变更字符集较验的规则为大小写敏感:

ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

所以TELEDB规范中要求使用utf8mb4,核对规则为utf8mb4_bin这样才可以区分大小写。

MYSQL的大小写总结

1、库表名的大小写主要看lower_case_table_names配置参数。(一旦创建了数据库和表,在不删除现有对象的情况下更改 lower_case_table_names 的值可能会导致问题,因此在初始化 MySQL 服务器时应仔细考虑此设置。如果需要更改设置并保留数据,可能需要执行额外的步骤来迁移或重命名表。)

2、表数据的大小写主要看字符集的校验规则。

 

 

0条评论
0 / 1000
c****n
5文章数
0粉丝数
c****n
5 文章 | 0 粉丝
原创

MYSQL的大小写一探

2024-09-09 09:47:50
4
0

对象的大小写

/表名的大小写

/表名的大小写和平台有关。WINDOWS平台是不区分大小写的。LINUX/UNIX则可以区分,所以又有了lower_case_table_names参数来控制大小写是否敏感。

lower_case_table_names=0 表名存储为给定的大小写,名称比较是区分大小写的

lower_case_table_names=1 表名存储为小写,名称比较是不区分大小写的

lower_case_table_names=2 表名存储为给定的大小写,但MySQL在查找时将它们转换为小写字母。名称不区分大小写。这只适用于不区分大小写的文件系统默认值是1,不区分库表名的大小写(都以小写来存储)

 

 

列、索引、存储过程、事件名的大小写

列、索引 、存储过程、事件不区分大小写

 

举例如下:

 

从这里可以看到,即使是大写的列名建表,其实还是不区分大小写的。

 

表数据的大小写

字符集

TELEDB的字符集规范

字符集的查看和修改

1、查看服务器的默认字符集和字符校验规则

SHOW VARIABLES LIKE 'character_set_server';

SHOW VARIABLES LIKE 'collation_server';

部份私有化部署的MYSQL就不符合TELEDB的规范

 

2、查看数据库的默认字符集和字符校验规则

SHOW CREATE DATABASE database_name;

3、查看表的字符集和字符校验规则

SHOW CREATE TABLE table_name;

4、修改表的字符集和字符校验规则

 

ALTER TABLE table_name CONVERT TO CHARACTER SET charset_name COLLATE collation_name;

 

MYSQL的风险点在于可以指定每个库/表的字符集和校验规则。所以TELEDB规范中是明确反对这种做法的。

 

字符集对大小写的影响

MySQL是否区分大小写由字符序(COLLATE)决定。一般"_ci"表示大小写不敏感cicase insensitive, "大小写不敏感""_cs"表示大小写敏感(或者是bin二进制)。当字符序后缀为"_ci"时不区分大小写,主键或唯一键字段不能插入仅大小写不同的值,如'a'’A'

 

utf8默认的utf8_general_ci较验规则为例子:

之所以没有字符校验规则 ,是因为utf8_general_ci是默认的字符校验规则

变更字符集较验的规则为大小写敏感:

ALTER TABLE t1 CONVERT TO CHARACTER SET utf8 COLLATE utf8_bin;

所以TELEDB规范中要求使用utf8mb4,核对规则为utf8mb4_bin这样才可以区分大小写。

MYSQL的大小写总结

1、库表名的大小写主要看lower_case_table_names配置参数。(一旦创建了数据库和表,在不删除现有对象的情况下更改 lower_case_table_names 的值可能会导致问题,因此在初始化 MySQL 服务器时应仔细考虑此设置。如果需要更改设置并保留数据,可能需要执行额外的步骤来迁移或重命名表。)

2、表数据的大小写主要看字符集的校验规则。

 

 

文章来自个人专栏
cygwing专栏
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0