读书人

Windows和Linux系统上面MySQL的大小写

发布时间: 2012-09-17 12:06:51 作者: rapoo

Windows和Linux系统下面MySQL的大小写敏感性不同

同样的建表脚本,在windows下所有的表名都成了小写的了,在建表脚本中,本来"goalsgroup"是"goalsGroup",可是用脚本建表后就全成了小写了;在linux下用这个脚本建表则保持了表名的大小写状态。另外,列名在windows下和linux都能够区分大小写。
我的建表脚本如下:


use learndiarydb;
???????????????????????????????????????????????????????????????????????????????
DROP TABLE IF EXISTS `goalsGroup`;
CREATE TABLE `goalsGroup` (
? `groupID` tinyint(2) unsigned NOT NULL auto_increment,
? `groupName` varchar(60) NOT NULL,
? `writeDate` datetime default NULL,
? `lastUpdate` datetime default NULL,
? `goalsNum` tinyint(2) unsigned NOT NULL default '0',
? `groupPriority` tinyint(1) unsigned NOT NULL default '0',
? PRIMARY KEY? (`groupID`)
) TYPE=InnoDB;



在windows下的表名和列名:

mysql> show tables;
+------------------------+
| Tables_in_learndiarydb |
+------------------------+
| article??????????????? |
| emailresetpsd????????? |
| forbid???????????????? |
| goalsgroup???????????? |
| user?????????????????? |
| usergoal?????????????? |
| usermailgoal?????????? |
+------------------------+
7 rows in set (0.09 sec)
?
mysql>


mysql> describe goalsgroup;
+---------------+---------------------+------+-----+---------+----------------+
| Field???????? | Type??????????????? | Null | Key | Default | Extra????????? |
+---------------+---------------------+------+-----+---------+----------------+
| groupID?????? | tinyint(2) unsigned |????? | PRI | NULL??? | auto_increment |
| groupName???? | varchar(60)???????? |????? |???? |???????? |??????????????? |
| writeDate???? | datetime??????????? | YES? |???? | NULL??? |??????????????? |
| lastUpdate??? | datetime??????????? | YES? |???? | NULL??? |??????????????? |
| goalsNum????? | tinyint(2) unsigned |????? |???? | 0?????? |??????????????? |
| groupPriority | tinyint(1) unsigned |????? |???? | 0?????? |??????????????? |
+---------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.09 sec)
?
mysql>

********************************************************************

在linux下的表名和列名:

mysql> show tables;
+------------------------+
| Tables_in_learndiarydb |
+------------------------+
| article??????????????? |
| emailresetpsd????????? |
| forbid???????????????? |
| goalsGroup???????????? |
| user?????????????????? |
| usergoal?????????????? |
| usermailgoal?????????? |
+------------------------+
7 rows in set (0.01 sec)
?
mysql>


mysql> describe goalsGroup;
+---------------+---------------------+------+-----+---------+----------------+
| Field???????? | Type??????????????? | Null | Key | Default | Extra????????? |
+---------------+---------------------+------+-----+---------+----------------+
| groupID?????? | tinyint(2) unsigned |????? | PRI | NULL??? | auto_increment |
| groupName???? | varchar(60)???????? |????? |???? |???????? |??????????????? |
| writeDate???? | datetime??????????? | YES? |???? | NULL??? |??????????????? |
| lastUpdate??? | datetime??????????? | YES? |???? | NULL??? |??????????????? |
| goalsNum????? | tinyint(2) unsigned |????? |???? | 0?????? |??????????????? |
| groupPriority | tinyint(1) unsigned |????? |???? | 0?????? |??????????????? |
+---------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
?
mysql>


******************************************************************

下面是网上一篇相同问题的blog,转自:http://www.zeali.net/entry/364

MySQL的大小写敏感性
zeal 2006-04-27 17:43 于 开发/理论 , 679 字 |? + 0 - 1?? English
Made In Zeal 转载请保留原始链接:http://www.zeali.net/entry/364
关键字: mysql,lower_case_table_name,大小写

在 MySQL 中,数据库和表对就于那些目录下的目录和文件。因而,操作系统的敏感性决定数据库和表命名的大小写敏感。这就意味着数据库和表名在 Windows 中是大小写不敏感的,而在大多数类型的 Unix 系统中是大小写敏感的。

奇怪的是列名与列的别名在所有的情况下均是忽略大小写的,而表的别名又是区分大小写的。

要避免这个问题,你最好在定义数据库命名规则的时候就全部采用小写字母加下划线的组合,而不使用任何的大写字母。

或者也可以强制以 -O lower_case_table_names=1 参数启动 mysqld(如果使用 --defaults-file=...\my.cnf 参数来读取指定的配置文件启动 mysqld 的话,你需要在配置文件的 [mysqld] 区段下增加一行 lower_case_table_names=1)。这样MySQL 将在创建与查找时将所有的表名自动转换为小写字符(这个选项缺省地在 Windows 中为 1 ,在 Unix 中为 0。从 MySQL 4.0.2 开始,这个选项同样适用于数据库名)。

当你更改这个选项时,你必须在启动 mysqld 前首先将老的表名转换为小写字母。

换句话说,如果你希望在数据库里面创建表的时候保留大小写字符状态,则应该把这个参数置0: lower_case_table_names=1 。否则的话你会发现同样的sqldump脚本在不同的操作系统下最终导入的结果不一样(在Windows下所有的大写字符都变成小写了)。

读书人网 >UNIXLINUX

热点推荐