Mysql数据库名和表名的大小写敏感性问题

  在 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:修改my.cnf配置文件

  在[mysqld]节下加入

  lower_case_table_names=1

时间: 2024-10-31 03:36:38

Mysql数据库名和表名的大小写敏感性问题的相关文章

更改MYSQL数据库不区分大小写表名

今天郁闷死了,在LINUX下调一个程序老说找不到表,但是我明明是建了表的,在MYSQL的命令行下也可以查到,为什么程序就找不到表呢? 后来请教了一个老师才搞定,原来是LINUX下的MYSQL默认是要区分表名大小写的,哎,弄了那么旧,害死我了. 让MYSQL不区分表名大小写的方法其实很简单: 1.用ROOT登录,修改/etc/my.cnf 2.在[mysqld]下加入一行:lower_case_table_names=1 3.重新启动数据库即可.

Mysql中返回一个数据库的所有表名,列名数据类型备注_Mysql

desc 表名; show columns from 表名; describe 表名; show create table 表名; use information_schema select * from columns where table_name='表名'; 顺便记下: show databases; 也可以这样 use information_schema select table_schema,table_name from tables where table_schema='数据

mysql存储过程中动态表名的使用

问题描述 mysql存储过程中动态表名的使用 BEGIN if tablename is not null then declare v_sql varchar(500); set v_sql = concat('select WXPayBillID,WXPayMoney FROM ',tablename); select v_sql; set @v_sql=v_sql;///这里写的有问题? prepare stmt from @v_sql; EXECUTE stmt; deallocate

SQL获取所有数据库名、表名、储存过程以及参数列表

原文:SQL获取所有数据库名.表名.储存过程以及参数列表1.获取所有用户名:SELECT name FROM Sysusers where status='2' and islogin='1'islogin='1'表示帐户islogin='0'表示角色status='2'表示用户帐户status='0'表示糸统帐户2.获取所有数据库名:SELECT Name FROM Master..SysDatabases ORDER BY Name3.获取所有表名SELECT Name FROM Datab

在一个jsp页面中从表单中输入数据库名,表名等,再在此页面中显示表信息

问题描述 我想从一个jsp页面中输入用户名,密码,数据库名,表名等信息,在一个Java程序中把相关的表信息存在StringBuffer对象中,然后在jsp页面中通过getProperty获取表信息.可是在表单中输入的内容都能通过getProperty获得,唯独表信息不能在jspy页面中显示.请各位帮帮忙! 解决方案 解决方案二:怎么提交的?解决方案三:没明白你所谓的表信息是什么意思???解决方案四:.....看不懂.....解决方案五:表信息是神马东西?解决方案六:该回复于2010-12-09

如何将MySQL的两个表名对调_Mysql

前言 前段实践遇到个问题,在类似pt-osc场景下,需要将两个表名对调,怎么才能确保万无一失呢? 分析 一些人可能就会想,表名对掉还不简单吗,相互RENAME一下嘛. 但是,我们想要的是同时完成表名对调,如果是先后的对掉,可能会导致有些数据写入失败,那怎么办? 解决 其实也不难,从MySQL手册里就能找到方法,那就是:同时锁定2个表,不允许写入,然后对调表名. 我们通常只锁一个表,那么同时锁两个表应该怎么做呢,可以用下面的方法: LOCK TABLES t1 WRITE, t2 WRITE; A

sql语句查询数据库中的表名/列名/主键/自动增长值实例_MsSql

sql语句查询数据库中的表名/列名/主键/自动增长值 ----查询数据库中用户创建的表 ----jsj01 为数据库名 select name tablename from jsj01..sysobjects where type='U' and name not in ('dtproperties') --查询表里的字段信息 ---docs为表名 ---- select * from syscolumns where id = object_id('docs') ----查询数据库中所有类型

sql server 查询数据库所有的表名+字段

原文:sql server 查询数据库所有的表名+字段 SELECT * FROM INFORMATION_SCHEMA.columns WHERE TABLE_NAME='Account' SELECT    (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空       a.colorder as 字段序号,       a.name as 字段名,       (case when COLUMNPROPER

检查两个数据库里的表名、字段是否一致的一种方法

不知道大家有没有遇到过这种情况. 程序已经给客户安装上了,并且客户已经录入了一些信息,然后程序还需要作比较大的变动(修改功能.增加模块等),数据库就不可避免要做一些改动. 但是这时候已经不能把客户的数据库删掉,换上新的数据库了.只能用添表.添字段的方式了. 如果修改程序的时候做了详细的文档的话,那么就可以按照文档来修改数据库了,但是如果没有文档,或者文档记录的不全,或者修改完成之后想检查一下有没有"漏网之鱼".那么这时候应该怎么办呢?难道要一个一个的检查?! 我们可以使用两个视图和几个

MySQL数据库查看数据表占用空间大小和记录数的方法_Mysql

如果想知道MySQL数据库中每个表占用的空间.表记录的行数的话,可以打开MySQL的 information_schema 数据库.在该库中有一个 TABLES 表,这个表主要字段分别是: TABLE_SCHEMA : 数据库名 TABLE_NAME:表名 ENGINE:所使用的存储引擎 TABLES_ROWS:记录数 DATA_LENGTH:数据大小 INDEX_LENGTH:索引大小 其他字段请参考MySQL的手册,这几个字段对我们来说最有用. 一个表占用空间的大小,相当于是 数据大小 +