Mysql数据库名和表名的大小写敏感性问题
MySQL数据库表和字段命名规范
MySQL数据库表和字段命名规范导言:在数据库设计和开发中,表和字段的命名规范是非常重要的。
一个良好的命名规范能够提高代码的可读性、可维护性和辨识度。
本文将介绍一些常见的MySQL 数据库表和字段命名规范,希望对读者在数据库开发中有所帮助。
一、表命名规范1. 采用小写字母命名表名。
这样可以避免在跨平台时大小写不敏感的问题,并且有助于代码的一致性。
2. 多个单词用下划线(_)分隔。
例如,user_info、order_detail等。
3. 尽量给表名取得有意义且具有描述性的名字,能够清楚表达出表所存储的内容。
二、字段命名规范1. 采用小写字母命名字段名。
同样,这可以避免大小写不敏感的问题。
2. 也可以使用下划线(_)分隔。
例如,create_time、user_id等。
3. 尽量给字段取得有意义的名字,能够清楚表达字段所存储的数据。
三、表和字段命名的一些约定1. 避免使用MySQL保留字作为表名或字段名。
在MySQL中有一些保留字(如select、update等),如果使用这些保留字作为表名或字段名,可能引发一些潜在的问题,在查询时需要特殊处理。
可以在命名中加上下划线或其他可辨识符号来避免与保留字的冲突。
2. 避免使用过长或过于简短的命名。
过长的命名可能造成代码的冗余,过于简短的命名可能不具备辨识度。
合理的命名长度可以提高代码的可读性和可维护性。
3. 避免使用缩写和简写。
虽然缩写和简写可以减少字符数,但是在团队协作中容易引起误解和混淆。
具有明确、清晰含义的命名可以降低开发和维护的成本。
4. 保持命名的一致性。
在整个数据库中,保持表和字段的命名一致性,可以提高理解和维护代码的效率。
例如,如果一个表的主键命名为"id",那么在其他表中也保持主键命名为"id",而不是使用其他类似"pk"或"key"的名称。
四、表和字段命名的示例以下是一些常见的表和字段命名示例,仅供参考,读者可以根据实际情况进行调整:1. 用户信息表:user_info(字段包括user_id, username, password, email等)2. 订单详情表:order_detail(字段包括order_id, product_id, quantity等)3. 商品信息表:product_info(字段包括product_id, product_name, price等)4. 地址信息表:address_info(字段包括address_id, user_id, address等)结论:良好的MySQL数据库表和字段命名规范是数据库开发中必不可少的一部分。
mysql中的字段名命名规则
mysql中的字段名命名规则在MySQL中,字段名命名规则是一种约定俗成的规范,用于命名数据库表中的字段。
遵循规范的字段命名可以提高代码可读性和维护性。
以下是一些常见的字段名命名规则:1. 使用有意义的字段名:字段名应该清晰地描述该字段所代表的数据内容。
避免使用无意义的缩写或单个字母作为字段名,而应该使用具备可读性的单词或短语。
2. 使用小写字母:在MySQL中,字段名是区分大小写的。
为了避免混淆和不必要的麻烦,建议使用小写字母来命名字段。
例如,"first_name"而不是"FirstName"。
3. 使用下划线分隔单词:为了增加字段名的可读性,可以使用下划线 "_" 来分隔单词。
例如,"last_name"而不是"lastName"。
这样可以使字段名更加清晰易懂。
4. 避免使用保留字:MySQL拥有许多保留字,这些字用于指定特定的操作和功能。
为了避免与这些保留字冲突,不要将保留字用作字段名。
如果非得使用保留字,可以使用反引号 "`" 将字段名括起来,例如"`select`"。
5. 不使用特殊字符或空格:字段名应该只包含字母、数字和下划线。
避免使用特殊字符、空格或其他特殊符号来命名字段。
这有助于减少在编码和查询过程中的错误和冲突。
总之,良好的字段命名规范是编写高质量MySQL代码的重要组成部分。
准确地遵循字段命名规则可提高代码的可读性和易于理解,更好地组织和管理数据库表的结构。
使用有意义、小写字母、下划线分隔、避免使用保留字和特殊字符的字段名命名规则将使得数据库设计更加规范和易于维护。
MySQL的SQL语句大小写不敏感问题解决方案
2、表的别名是严格区分大小写的;
3、列名与列的别名在所有的情况下均是忽略大小写的;
4、变量名也是严格区分大小写的;
MySQL在Windows下都不区分大小写。
MySQL在查询字符串时是大小写不敏感的,在编绎MySQL时一般以ISO-8859字符集作为默认的字符集,这个字符集对大小写不敏感,因此在比较过程中中文编码字符大小写转换造成了这种现象。
更加迷惑的是下面的2条语句
Java代码
1.insert into t values('~');
2.
3.insert into t values('y');
也会发生插入错误。
在查询的时候也会出现这样的问题
Java代码
1./*查询的结果一眼*/
2.select * from t where a like'a%'
MySQL的大小写问题不是一个很大的问题,但是如果不了解的话,却会使用户产生迷惑;如下面
Sql代码
1.insertintotvalues('A');
2.
3.insertintotvalues('a');
当第二条执行的时候,如果是主键或者有唯一性约束的话,会发生
Sql代码
1.Duplicate entryforXXX
);
使用alter修改:
ALTER TABLE `tablename` MODIFY COLUMN `cloname`VARCHAR(45) BINARY;
mysqltable editor中直接勾选BINARY项。
2.解决办法
A.表名区分大小写
mysql 大小写区分参数
mysql 大小写区分参数在MySQL中,有一个参数叫做"lower_case_table_names",它用于控制数据库对象名(表名、数据库名等)的大小写敏感性。
这个参数有三个可能的取值,0、1和2。
当"lower_case_table_names"的取值为0时,表示MySQL会将所有的数据库对象名视为大小写敏感。
这意味着在SQL查询中,对于大小写不同的表名或数据库名会被视为不同的对象。
这种情况下,如果你创建了一个名为"myTable"的表,那么在SQL查询中引用"myTable"和"mytable"会被视为两个不同的表。
当"lower_case_table_names"的取值为1时,表示MySQL会将所有的数据库对象名视为不区分大小写。
这意味着在SQL查询中,对于大小写不同的表名或数据库名会被视为相同的对象。
这种情况下,如果你创建了一个名为"myTable"的表,那么在SQL查询中引用"myTable"和"mytable"会被视为同一个表。
当"lower_case_table_names"的取值为2时,表示MySQL在创建表时会将表名存储为指定的大小写形式,但在进行表名匹配时会将表名视为不区分大小写。
这种情况下,如果你创建了一个名为"myTable"的表,那么在SQL查询中引用"myTable"和"mytable"会被视为同一个表,但在存储表名时会保留原始的大小写形式。
需要注意的是,修改"lower_case_table_names"参数可能会导致一些不可预测的行为,特别是在涉及到已经存在的数据库对象时。
因此,在修改该参数之前,务必仔细评估对现有系统的影响,并做好充分的备份工作。
数据库用户名命名规则
数据库用户名命名规则全文共四篇示例,供读者参考第一篇示例:数据库用户名是数据库系统中用来标识用户的名称,用户可以通过该用户名登录数据库,执行操作。
数据库用户名的命名规则对于数据库系统的安全性和运行效率有着重要的影响,合理的数据库用户名命名规则是至关重要的。
数据库用户名应该具有一定的规范性和易辨识性,这样能够方便管理和维护。
通常来说,数据库用户名应该包括以下几个方面的规则:1. 长度:数据库用户名的长度应该在特定的范围内,不宜过长也不宜过短。
通常来说,数据库用户名的长度应该控制在6到32个字符之间。
2. 字符:数据库用户名应该只包括英文字母、数字和下划线等特殊符号,不应包含空格、逗号、句号等特殊符号,以确保安全性和兼容性。
4. 区分性:数据库用户名应该具有一定的区分性,避免与其他用户名冲突。
可以在用户名中添加一些特定的标识符或者数字来保证其唯一性。
5. 规范性:数据库用户名应该遵循一定的命名规范,避免使用过于简单或者无意义的名称。
最好能够有一定的规范性和含义性,方便管理和维护。
除了以上几点,还有一些额外的建议:1. 不使用系统保留字:数据库用户名不应该与系统的保留字相同,以避免造成冲突和错误。
2. 避免使用敏感信息:数据库用户名不应该包含个人的敏感信息或者公司的机密信息,以确保安全性和隐私性。
3. 定期更新:数据库用户名应该定期进行更新和修改,以保证其安全性和稳定性。
数据库用户名的命名规则应该是合理、规范、易懂的,能够保证数据库系统的安全性、稳定性和高效性。
合理的数据库用户名命名规则对于数据库系统的运行和管理有着重要的意义,应该引起重视。
希望以上内容能够对大家有所帮助。
第二篇示例:数据库用户名命名规则是数据库管理中非常重要的一部分,它涉及到数据库安全性、管理、维护等方面。
一个良好的数据库用户名命名规则能够帮助管理员更好地管理数据库,确保数据的安全性和一致性。
下面将介绍一些关于数据库用户名命名规则的内容。
mysql大小写敏感问题
mysql⼤⼩写敏感问题⼀、MYSQL 5 修改⽅式: 问题: 在创建mysql表的时候发现不论表明是⼤写或⼩写,建完之后统⼀被变成了⼩写。
原因: MySQL在windows下是不区分⼤⼩写的,将script⽂件导⼊MySQL后表名也会⾃动转化为⼩写。
解决办法:(基于windows系统下的⽅法) 找到mysql安装⽬录下的my.ini⽂件,在⽂件中最后添加(1表⽰⼤⼩写不敏感,2表⽰⼤⼩写敏感)1 lower_case_table_names=2 然后重启mysql,cmd命令⾏输⼊:1 net stop mysql2 net start mysql 然后在mysql命令界⾯中输⼊:show variables like '%low%'; 发现已经⼤⼩写敏感了,到此设置成功了。
另外,⽤Navcat执⾏sql脚本的时候,还有可能会遇到⼀个问题:明明脚本语句执⾏的都是⼤写的表名,但是建完以后,发现有的表名还是被改成了⼩写格式 例如:(所有⼤写的表中突然出现⼀个奇怪的⼩写表名,其原因不明) 解决办法, 1.⼿动⽤命令更改。
1 rename table t_meeting to t_m;2 rename table t_m to T_MEETING; 2.找到数据⽂件直接重命名: ⽂件路径:C:\ProgramData\MySQL\MySQL Server 5.5\data找到对应的数据库并重命名对应的表就好了,因为Navcat重命名好像并没有效果,可能是我的版本问题,所以不建议直接⽤Navcat直接修改。
============⼆、mysql 8修改⽅式 在另外⼀台机器上装了mysql 8之后,想⽤和mysql5相同的办法在win10下修改⼤⼩写敏感的问题。
但是照做之后根本没有效果。
后来在⽹上各种搜索了⼀番才发现,原来mysql8不允许在数据库初始化之后更新这项配置,只能在初始化之前,就做好配置变更才能起到效果。
MySQL数据库表名、列名、别名区分大小写的问题
MySQL数据库表名、列名、别名区分⼤⼩写的问题MySQL在Linux下数据库名、表名、列名、别名⼤⼩写规则是这样的: 1、数据库名与表名是严格区分⼤⼩写的; 2、表的别名是严格区分⼤⼩写的; 3、列名与列的别名在所有的情况下均是忽略⼤⼩写的; 4、变量名也是严格区分⼤⼩写的; MySQL在Windows下都不区分⼤⼩写。
所以在不同操作系统中为了能使程序和数据库都能正常运⾏,最好的办法是在设计的时候都转为⼩写,但是如果在设计的时候已经规范化⼤⼩写了,那么在Windows环境下只要对数据库的配置做下改动就⾏了,具体操作如下: 在MySQL的配置⽂件中my.ini [mysqld] 中增加⼀⾏ lower_case_table_names = 1 参数解释: 0:区分⼤⼩写 1:不区分⼤⼩写在 MySQL 中,数据库和表对就于那些⽬录下的⽬录和⽂件。
因⽽,操作系统的敏感性决定数据库和表命名的⼤⼩写敏感。
这就意味着数据库和表名在 Windows 中是⼤⼩写不敏感的,⽽在⼤多数类型的 Unix 系统中是⼤⼩写敏感的。
奇怪的是列名与列的别名在所有的情况下均是忽略⼤⼩写的,⽽表的别名⼜是区分⼤⼩写的。
要避免这个问题,你最好在定义数据库命名规则的时候就全部采⽤⼩写字母加下划线的组合,⽽不使⽤任何的⼤写字母。
或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使⽤ --defaults-file=...\f 参数来读取指定的配置⽂件启动mysqld 的话,你需要在配置⽂件的 [mysqld] 区段下增加⼀⾏ lower_case_table_names=1)。
这样MySQL 将在创建与查找时将所有的表名⾃动转换为⼩写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。
从 MySQL 4.0.2 开始,这个选项同样适⽤于数据库名)。
当你更改这个选项时,你必须在启动 mysqld 前⾸先将⽼的表名转换为⼩写字母。
MySql查询不区分大小写解决方案(两种)
MySql查询不区分⼤⼩写解决⽅案(两种)当我们输⼊不管⼤⼩写都能查询到数据,例如:输⼊ aaa 或者aaA ,AAA都能查询同样的结果,说明查询条件对⼤⼩写不敏感。
解决⽅案⼀:于是怀疑Mysql的问题。
做个实验:直接使⽤客户端⽤sql查询数据库。
发现的确是⼤⼩不敏感。
通过查询资料发现需要设置collate(校对)。
collate规则:*_bin: 表⽰的是binary case sensitive collation,也就是说是区分⼤⼩写的*_cs: case sensitive collation,区分⼤⼩写*_ci: case insensitive collation,不区分⼤⼩写解决⽅法。
1.可以将查询条件⽤binary()括起来。
⽐如:select * from TableA where binary columnA ='aaa';2. 可以修改该字段的collation 为 binary⽐如:ALTER TABLE TABLENAME MODIFY COLUMN COLUMNNAME VARCHAR(50) BINARY CHARACTER SET utf8 COLLATE utf8_bin DEFAULT NULL;解决⽅案⼆:mysql查询默认是不区分⼤⼩写的如:select * from some_table where str=‘abc';select * from some_table where str='ABC';得到的结果是⼀样的,如果我们需要进⾏区分的话可以按照如下⽅法来做:第⼀种⽅法:要让mysql查询区分⼤⼩写,可以:select * from some_table where binary str='abc'select * from some_table where binary str='ABC'第⼆⽅法:在建表时时候加以标识create table some_table(str char(20) binary)原理:对于CHAR、VARCHAR和TEXT类型,BINARY属性可以为列分配该列字符集的校对规则。
mysql区分大小写sql写法
mysql区分大小写sql写法标题,MySQL中区分大小写的SQL写法。
在MySQL中,区分大小写是一个常见的需求,特别是在处理字符串比较时。
有时候我们希望区分大小写进行精确匹配,而有时候又希望忽略大小写进行模糊匹配。
下面将介绍在MySQL中如何进行区分大小写的SQL写法。
1. 区分大小写的比较。
在MySQL中,可以使用BINARY关键字来进行区分大小写的比较,示例如下:sql.SELECT FROM table_name WHERE BINARY column_name ='value';这样就可以确保在比较column_name列时,会严格区分大小写。
2. 忽略大小写的比较。
如果需要忽略大小写进行比较,可以使用COLLATE关键字,示例如下:sql.SELECT FROM table_name WHERE column_name COLLATEutf8_general_ci = 'value';在这个例子中,我们使用utf8_general_ci作为COLLATE值,这样就可以忽略大小写进行比较。
3. 创建区分大小写的索引。
如果需要在MySQL中创建一个区分大小写的索引,可以使用BINARY关键字,示例如下:sql.CREATE INDEX index_name ON table_name (BINARYcolumn_name);这样就可以确保在查询时会严格区分大小写。
总结。
在MySQL中,区分大小写是一个常见的需求,可以通过BINARY 关键字和COLLATE关键字来实现区分大小写的比较,同时也可以通过BINARY关键字来创建区分大小写的索引。
这些方法可以帮助我们在处理字符串比较时更加灵活和精确。
mysql 8 不区分大小写的排序规则
mysql 8 不区分大小写的排序规则摘要:1.MySQL 8 简介2.不区分大小写排序规则的背景3.MySQL 8 中不区分大小写排序规则的具体表现4.不区分大小写排序规则对数据库操作的影响5.如何应对不区分大小写排序规则正文:MySQL 8 是MySQL 数据库的最新版本,带来了许多新特性和性能优化。
在MySQL 8 中,排序规则发生了一些变化,特别是在不区分大小写方面。
在数据库中,不区分大小写排序规则是指在比较字符串时,忽略字符串中字母的大小写。
例如,对于“apple”和“Apple”,不区分大小写排序规则会认为它们是相同的。
在MySQL 8 之前,MySQL 使用了“二进制比较”,即严格区分大小写。
而在MySQL 8 中,为了提高性能并与其他数据库系统保持一致,MySQL 采用了“排序规则忽略”的方式,实现了不区分大小写排序规则。
在MySQL 8 中,不区分大小写排序规则的具体表现如下:- 在字符串比较中,如果比较的两个字符串有相同的字符,那么将忽略它们之间的大小写差异。
例如,"apple" = "Apple",两者被视为相等。
- 在数值比较中,MySQL 8 仍然严格区分大小写。
例如,"123"和"123"会被视为相等,但"123"和"abc"会视为不相等。
- 在日期和时间比较中,MySQL 8 也采用了不区分大小写排序规则。
例如,"2021-06-01"和"2021-06-01"被视为相等,但"2021-06-01"和"2021-07-01"会视为不相等。
不区分大小写排序规则对数据库操作的影响主要体现在以下方面:- 在查询和排序时,不区分大小写排序规则可能会导致查询结果和预期不符。
例如,在查询包含大小写混合的字符串时,可能需要对查询条件进行大小写转换,以确保查询结果正确。
mysql 数据库设计命名规则
mysql 数据库设计命名规则
在MySQL数据库设计中,命名规则是非常重要的,它有助于提
高数据库的可读性和可维护性。
以下是一些常见的MySQL数据库设
计命名规则:
1. 表名命名规则:
使用有意义且描述性强的表名,避免使用简单的单词或缩写。
表名应该使用复数形式,以便清楚地表示其包含多个实例。
使用下划线或驼峰命名法来提高表名的可读性。
2. 字段名命名规则:
字段名应该简洁明了,能够清晰地描述其所代表的数据。
避免使用保留字作为字段名,以免引起冲突。
采用下划线或驼峰命名法来提高字段名的可读性。
3. 约束名命名规则:
约束名应该清晰表达其所起的作用,例如主键约束、外键约
束等。
约束名应该与表名和字段名保持一致,以便于理解和维护。
4. 索引名命名规则:
索引名应该清晰描述其所涉及的字段以及索引类型,例如
idx_字段名等。
避免使用过于复杂或含糊的索引名,以免混淆。
5. 视图和存储过程命名规则:
视图和存储过程的命名应该反映其所包含的数据或逻辑,便
于理解和识别。
总的来说,MySQL数据库设计的命名规则应该遵循清晰、简洁、有意义的原则,以便于他人阅读和理解,提高数据库的可维护性和
可扩展性。
同时,也要注意避免使用特殊字符和空格,以免引起不必要的麻烦。
希望以上信息能够对你有所帮助。
mysql命名规则
MySQL的命名规则如下:
1. 库名、表名、字段名:大小写敏感,应使用小写字母。
2. 库名和表名:以d开头,后面跟着业务模块名。
例如,crm代表业务模块名为crm的数据库。
3. 表名:以t开头,后面跟着表名的意义。
例如,t_crm_relation 表示crm模块的关系表。
4. 字段名:以f_开头,后面跟着字段的意义。
例如,f_name表示名字字段。
5. 视图、事件、触发器、存储过程、函数等对象:以特定前缀开头,例如view_、event_、trig_、proc_、func_等。
6. 备份表:在原表名后面加上_bak和日期,例如_bak20160425。
7. 字段名显示区分大小写,但实际使用时不区分。
即,不可以建立两个名字一样但大小写不一样的字段。
8. 为了统一规范,建议使用小写字母命名库名、表名、字段名。
以上是MySQL的命名规则,请根据实际情况进行参考和调整。
【IT专家】mysql 表名大小写敏感处理 lower
本文由我司收集整编,推荐下载,如有疑问,请与我司联系mysql 表名大小写敏感处理lower2018/03/27 12 到mysql数据库下查询表时,差点没被表名的大小写搞死。
到官网查看文档,可以通过参数控制 # vi /etc/myf[mysqld]lower_case_table_names=1 官网的描述如下 lower_case_table_names can take the values shown in the following table. This variable does not affect case sensitivity of trigger identifiers. On Unix, the default value of lower_case_table_names is 0. On Windows, the default value is 1. On OS X, the default value is 2.Value Meaning0 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement. Name comparisons are case sensitive. You should not set this variable to 0 if you are running MySQL on a system that has case-insensitive file names (such as Windows or OS X). If you force this variable to 0 with --lower-case-table-names=0 on a case-insensitive file system and access MyISAM tablenames using different lettercases, index corruption may result. 1 Table names are stored in lowercase on disk and name comparisons are not case-sensitive. MySQL converts all table names to lowercase on storage and lookup. This behavior also applies to database names and table aliases. 2 Table and database names are stored on disk using the lettercase specified in the CREATE TABLE or CREATE DATABASE statement, but MySQL converts them to lowercase on lookup. Name comparisons are not case sensitive. This works only on file systems that are not case-sensitive! InnoDB table names are stored in lowercase, as for lower_case_table_names=1.tips:感谢大家的阅读,本文由我司收集整编。
mysql大小写敏感配置
mysql⼤⼩写敏感配置1.mysql⼤⼩写敏感配置mysql⼤⼩写敏感配置相关的两个参数,lower_case_file_system 和 lower_case_table_names。
查看当前mysql的⼤⼩写敏感配置show global variables like'%lower_case%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_file_system |ON|| lower_case_table_names |0|+------------------------+-------+lower_case_file_system表⽰当前系统⽂件是否⼤⼩写敏感,只读参数,⽆法修改。
ON ⼤⼩写不敏感OFF ⼤⼩写敏感lower_case_table_names表⽰表名是否⼤⼩写敏感,可以修改。
lower_case_table_names = 0时,mysql会根据表名直接操作,⼤⼩写敏感。
lower_case_table_names = 1时,mysql会先把表名转为⼩写,再执⾏操作。
设置lower_case_table_names的值打开f⽂件,加⼊以下语句后重启。
lower_case_table_names =0或 lower_case_table_names =12.测试lower_case_table_names为0和1时的不同情况创建表 userCREATE TABLE `user` (`id` int(11) unsigned NOT NULL AUTO_INCREMENT,`name` varchar(20) NOT NULL,PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;1.设置lower_case_table_names = 0表名与创建时⼤⼩写⼀致select count(*) from user;+----------+|count(*) |+----------+|0|+----------+表名与创建时⼤⼩写不⼀致select count(*) from User;ERROR 1146 (42S02): Table'er' doesn't existlower_case_table_names=0时,表名⼤⼩写敏感。
MySQL不区分大小写设置
MySQL不区分⼤⼩写设置前⾔:⼀般在数据库使⽤规范中,我们都会看到这么⼀条:库名及表名⼀律使⽤⼩写英⽂。
你有没有思考过,为什么推荐使⽤⼩写呢?库表名是否应该区分⼤⼩写呢?带着这些疑问,我们⼀起来看下本篇⽂章。
1.决定⼤⼩写是否敏感的参数在 MySQL 中,数据库与 data ⽬录中的⽬录相对应。
数据库中的每个表都对应于数据库⽬录中的⾄少⼀个⽂件(可能是多个⽂件,具体取决于存储引擎)。
因此,操作系统的⼤⼩写是否敏感决定了数据库⼤⼩写是否敏感,⽽ Windows 系统是对⼤⼩写不敏感的,Linux 系统对⼤⼩写敏感。
默认情况下,库表名在 Windows 系统下是不区分⼤⼩写的,⽽在 Linux 系统下是区分⼤⼩写的。
列名,索引名,存储过程、函数及事件名称在任何操作系统下都不区分⼤⼩写,列别名也不区分⼤⼩写。
除此之外,MySQL 还提供了 lower_case_table_names 系统变量,该参数会影响表和数据库名称在磁盘上的存储⽅式以及在 MySQL 中的使⽤⽅式,在 Linux 系统,该参数默认为 0 ,在 Windows 系统,默认值为 1 ,在 macOS 系统,默认值为 2 。
下⾯再来看下各个值的具体含义:Value Meaning0库表名以创建语句中指定的字母⼤⼩写存储在磁盘上,名称⽐较区分⼤⼩写。
1库表名以⼩写形式存储在磁盘上,名称⽐较不区分⼤⼩写。
MySQL 在存储和查找时将所有表名转换为⼩写。
此⾏为也适⽤于数据库名称和表别名。
2库表名以创建语句中指定的字母⼤⼩写存储在磁盘上,但是 MySQL 在查找时将它们转换为⼩写。
名称⽐较不区分⼤⼩写。
⼀般很少将 lower_case_table_names 参数设置为 2 ,下⾯仅讨论设为 0 或 1 的情况。
Linux 系统下默认为 0 即区分⼤⼩写,我们来看下lower_case_table_names 为 0 时数据库的具体表现:# 查看参数设置mysql> show variables like 'lower_case_table_names';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| lower_case_table_names | 0 |+------------------------+-------+# 创建数据库mysql> create database TestDb;Query OK, 1 row affected (0.01 sec)mysql> create database testdb;Query OK, 1 row affected (0.02 sec)mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || TestDb || mysql || performance_schema || sys || testdb |+--------------------+mysql> use testdb;Database changedmysql> use TestDb;Database changedmysql> use TESTDB;ERROR 1049 (42000): Unknown database 'TESTDB'# 创建表mysql> CREATE TABLE if not exists `test_tb` (-> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '⾃增主键',-> `stu_id` int(11) NOT NULL COMMENT '学号',-> `stu_name` varchar(20) DEFAULT NULL COMMENT '学⽣姓名',-> PRIMARY KEY (`increment_id`),-> UNIQUE KEY `uk_stu_id` (`stu_id`) USING BTREE-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='test_tb';Query OK, 0 rows affected (0.06 sec)mysql> CREATE TABLE if not exists `Student_Info` (-> `increment_id` int(11) NOT NULL AUTO_INCREMENT COMMENT '⾃增主键',-> `Stu_id` int(11) NOT NULL COMMENT '学号',-> `Stu_name` varchar(20) DEFAULT NULL COMMENT '学⽣姓名',-> PRIMARY KEY (`increment_id`),-> UNIQUE KEY `uk_stu_id` (`Stu_id`) USING BTREE-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='Student_Info';Query OK, 0 rows affected (0.06 sec)mysql> show tables;+------------------+| Tables_in_testdb |+------------------+| Student_Info || test_tb |+------------------+# 查询表mysql> select Stu_id,Stu_name from test_tb limit 1;+--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select stu_id,stu_name from test_tb limit 1;+--------+----------+| stu_id | stu_name |+--------+----------+| 1001 | from1 |+--------+----------+mysql> select stu_id,stu_name from Test_tb;ERROR 1146 (42S02): Table 'testdb.Test_tb' doesn't existmysql> select Stu_id,Stu_name from test_tb as A where A.Stu_id = 1001;+--------+----------+| Stu_id | Stu_name |+--------+----------+| 1001 | from1 |+--------+----------+1 row in set (0.00 sec)mysql> select Stu_id,Stu_name from test_tb as A where a.Stu_id = 1001;ERROR 1054 (42S22): Unknown column 'a.Stu_id' in 'where clause'# 查看磁盘上的⽬录及⽂件[root@localhost ~]#:/var/lib/mysql# ls -lhtotal 616Mdrwxr-x--- 2 mysql mysql 20 Jun 3 14:25 TestDb...drwxr-x--- 2 mysql mysql 144 Jun 3 14:40 testdb[root@localhost ~]#:/var/lib/mysql# cd testdb/[root@localhost ~]#:/var/lib/mysql/testdb# ls -lhtotal 376K-rw-r----- 1 mysql mysql 8.6K Jun 3 14:33 Student_Info.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:33 Student_Info.ibd-rw-r----- 1 mysql mysql 8.6K Jun 3 14:40 TEST_TB.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:40 TEST_TB.ibd-rw-r----- 1 mysql mysql 67 Jun 3 14:25 db.opt-rw-r----- 1 mysql mysql 8.6K Jun 3 14:30 test_tb.frm-rw-r----- 1 mysql mysql 112K Jun 3 14:30 test_tb.ibd通过以上实验我们发现 lower_case_table_names 参数设为 0 时,MySQL 库表名是严格区分⼤⼩写的,⽽且表别名同样区分⼤⼩写但列名不区分⼤⼩写,查询时也需要严格按照⼤⼩写来书写。
linux配置mysql的表名忽略大小写lower
linux配置mysql的表名忽略大小写lower在linux下配置文件/etc/f给mysql添加忽略大小写变量lower_case_table_names =1后重启mysql报错:ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).原因:mysql中初始化时默认lower_case_table_names的值为0,在mysql重启时会加载配置文件/etc/f,此时,mysql发现初始化时lower_case_table_names=0与你配置文件加载时lower_case_table_names =1两者的值是冲突的,所以会报错。
进一步可以查看mysql的log日志:[ERROR] [MY-011087] [Server] Different lower_case_table_names settings for server ('1') and data dic。
意思就是冲突的意思解决:1、备份好数据库中已经创建的表数据,就是你当初配置f 中datadir=/usr/local/mysql/data下的数据库文件2、停掉mysql:systemctl stop mysqldservice mysqld stop启动:service mysqld restart检查状态:service mysqld status停不掉的话就杀死进程:查看mysql进程号:ps -ef|grep mysql杀死进程: kill -9 进程号3、配置f(一定要在初始化之前配置好)vi /etc/fmysqld]basedir=/usr/local/mysql/mysql-8.0.18-linux-glibc2.12-x86_64datadir=/usr/local/mysql/dataport=3306sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TAB LESsymbolic-links=0max_connections=400innodb_file_per_table=1lower_case_table_names=1 #1代表忽略大小写,0相反log-error=/usr/local/mysql/data/error.log #可以自己配置mysql日志输出的目录,方便跟踪错误配置好后保存退出:先按Esc退出插入模式,然后敲出一个英文的冒号,冒号后输入wq!4、初始化数据库重点:初始化时一定要加上 --lower-case-table-names=1,这样才不会与配置文件中的lower_case_table_names =1 冲突官方文档:https:///doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names进入mysql的bin目录:cd /usr/local/mysql/mysql-8.0.18-linux-glibc2.12-x86_64/bin初始化:./mysqld --initialize --user=mysql --lower-case-table-names=1 --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql/mysql-8.0.18-linux-glibc2.12-x86_64 回车,等待一会后初始化完成,此时mysql的密码已经改变为临时密码,这个密码在刚才配置文件下的log文件中可以找到启动mysql:mysql -u root -p密码:上面的临时密码进去后到了mysql界面下:mysql5版本修改密码命令:set password for root@localhost = password('密码');mysql8版本修改密码命令:alter user 'root'@'localhost' identified by '密码';修改好后执行:flush privileges;查看刚才设置的忽略大小写是否起效:show variables like '%lower%';。
MySQL报错Ignoringquerytootherdatabase的真正原因
MySQL报错Ignoringquerytootherdatabase的真正原因1.使用了未定义的数据库名:2.在查询中使用了错误的权限:3.使用了错误的连接参数:如果在连接MySQL时使用了错误的连接参数,也会导致该错误。
比如在连接字符串中指定了错误的数据库名。
要解决这个问题,可以确保使用正确的连接参数来连接MySQL。
4.使用了错误的语法或语句顺序:有时候,该错误可能是由于使用了错误的语法或语句顺序导致的。
比如在使用多个数据库时,可能需要使用"USE"语句来切换数据库,或者在查询中使用完整的表名(包括数据库名)。
要解决这个问题,可以仔细检查查询语句的语法和顺序,并确保语句正确。
5.数据库名或表名大小写敏感性不匹配:MySQL默认情况下是大小写不敏感的,但在一些情况下,可能会出现大小写不匹配的问题。
比如,在Linux上的文件系统是大小写敏感的情况下,数据库名或表名使用了不同的大小写。
要解决这个问题,可以使用正确的大小写来访问数据库和表。
6.数据库不存在或不可用:如果查询中使用的数据库不存在或不可用,也会导致该错误。
要解决这个问题,可以检查数据库是否存在,并确保数据库是可用的。
综上所述,MySQL报错"Ignoring query to other database"的真正原因可能是使用了未定义的数据库名、使用了错误的权限、使用了错误的连接参数、使用了错误的语法或语句顺序、数据库名或表名的大小写敏感性不匹配,以及数据库不存在或不可用等。
解决这个问题的方法包括确保使用正确和已定义的数据库名、检查和更新用户的权限设置、使用正确的连接参数、使用正确的语法和语句顺序、使用正确的大小写,以及确保数据库存在并可用。
mysql 关联表命名规则
在MySQL 中,关联表的命名规则没有严格的规定,但是有一些常用的命名约定可以遵循。
这些约定旨在提高代码的可读性和可维护性。
以下是一些建议的关联表命名规则:
1. 使用具有描述性的表名:关联表名应该能够清晰地表示其所代表的关系。
例如,如果两个表是通过外键关联的,可以考虑使用这两个表名的组合或者加上关联类型来命名关联表。
2. 使用下划线分隔单词:为了提高可读性,可以使用下划线`_` 来分隔单词。
这样可以更清楚地区分单词,并使表名更易于阅读。
例如,可以使用`order_items` 作为订单明细表的关联表名。
3. 避免使用缩写和简写:尽量避免使用缩写和简写,因为它们可能会导致混淆和歧义。
使用完整的单词可以增加代码的可读性和可理解性。
4. 保持一致性:在整个数据库中保持关联表命名的一致性非常重要。
使用相似的命名约定可以使数据库结构更加一致,减少混乱和错误。
5. 参考行业标准和最佳实践:可以参考行业标准和最佳实践来命名关联表。
不同的行业和开发团队可能有不同的命名约定,根据实际情况选择适合自己项目的命名规则。
总的来说,关联表的命名规则应该能够清晰地表示其所代表的关系,保持一致性,并遵循良好的命名约定以提高代码的可读性和可维护性。
1。
如何在MySQL中进行数据敏感信息的脱敏处理
如何在MySQL中进行数据敏感信息的脱敏处理MySQL是一种常用的关系型数据库管理系统,广泛应用于各个领域的数据存储和管理中。
在实际应用中,我们经常会面临一种问题:如何在MySQL中进行数据敏感信息的脱敏处理。
数据脱敏是指对数据中的敏感信息进行处理,以保护用户隐私以及符合相关隐私保护法规。
本文将介绍在MySQL中实现数据脱敏的几种常用方法和技巧。
一、敏感信息的定义敏感信息通常包括个人身份证号、手机号码、银行卡号等。
这些信息一旦泄露,可能导致用户的个人隐私被侵犯,给个人和企业带来巨大的损失。
因此,在数据存储和处理过程中,对这些敏感信息的保护至关重要。
二、数据脱敏的原则在进行数据脱敏处理时,需要遵守以下原则:1. 不可逆原则:敏感信息脱敏后,不能被还原为原始数据,以确保数据安全性。
2. 保持格式一致性:脱敏后的数据格式应与原始数据格式相同,以保证业务正常运行。
3. 可验证性原则:脱敏后的数据可以根据某种算法进行验证,以确保数据的正确性。
4. 随机性原则:脱敏后的数据应该是随机的,以保护用户的隐私。
三、数据脱敏的常用方法1. 字段屏蔽(Masking):对字段进行部分屏蔽,只显示部分信息。
例如,手机号码130****5678可以脱敏为13****5678,保留前三位和后四位。
2. 偏移(Shuffling):对敏感信息进行位置的随机变换。
例如,将用户的姓名进行随机排序,作为脱敏后的结果。
3. 加密(Encryption):使用加密算法对敏感信息进行加密处理,确保数据的安全性。
例如,使用常见的MD5或SHA-256算法对密码进行加密存储。
4. 替换(Substitution):将敏感信息替换为与原数据含义相近但不包含敏感信息的数据。
例如,将身份证号的后四位替换为X。
5. 脱敏字典(Data Masking Dictionary):将敏感信息映射到一个预定义的字典中的变量。
例如,将银行卡号替换为一个唯一的标识符。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在 MySQL 中,数据库和表对应于那些目录下的目录和文件。
因而,操作系统的敏感性决定数据库和表命名的大小写敏感。
这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。
一个特例是 Mac OS X,当缺省的HFS+ 文件系统使用时。
然而 Mac OS X 还支持 UFS 卷,那些在 Mac OS X 是大小写敏感的就如他们在任一 Unix 上一样。
查看章节 1.8.3 MySQL 对 ANSI SQL92 的扩展。
注意:尽管在 Windows 中数据库与表名是忽略大小写的,你不应该在同一个查询中使用不同的大小写来引用一个给定的数据库和表。
下面的查询将不能工作,因为它以 my_table 和 MY_TABLE 引用一个表:
mysql> SELECT * FROM my_table WHERE MY_TABLE.col=1;
列名与列的别名在所有的情况下均是忽略大小写的。
表的别名是区分大小写的。
下面的查询将不能工作,因为它用 a 和 A 引用别名:
mysql> SELECT col_name FROM tbl_name AS a WHERE a.col_name = 1 OR A.col_name = 2;
如果记忆数据库和表名的字母大小写有困难,建议采用一个一致一约定,例如总是以小写字母创建数据库和表。
避免这个问题的另一个办法就是以 -O lower_case_table_names=1 参数启动 mysqld。
缺省地在 Windows 中这个选项为 1 ,在 Unix 中为 0。
如果 lower_case_table_names 为 1 ,MySQL 将在存储与查找时将所有的表名转换为小写字线。
(从 MySQL 4.0.2 开始,这个选项同样适用于数据库名。
) 注意,当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/support-files
$ ./mysql.server stop
$ pwd
/data1/etl/aiinsight/ScheduleServer/mysql/bin
./mysqld_safe --lower_case_table_names
方法2:修改f配置文件
在[mysqld]节下加入
lower_case_table_names=1。