0

0

MySQL Entity Framework Code First 数据表大小写的问题

php中文网

php中文网

发布时间:2016-06-07 17:28:13

|

1156人浏览过

|

来源于php中文网

原创

以前都是使用Linux平台下的MySQL,现在为了调试方便,在开发机上安装了MySQL的Windows版本5.6.10,在使用Entity Framework Code

以前都是使用linux平台下的mysql,现在为了调试方便,在开发机上安装了mysql的windows版本5.6.10,在使用entity framework code first生成数据库对象时,发现所有的数据表的表名都变成了小写字符,而字段的名称是混合大小写的,这个问题在linux平台上没有出现过,于是着手弄明白这是肿么一回事。

经过网上搜索,,找到这篇文章:Entity Framework with mysql, Table Capitalization issue between linux and windows

大致的意思是说:这个问题产生的根源是操作系统,MySQL保存数据表到文件,最初MySQL是在Linux平台开发的,文件名和数据表名称都是大小写敏感的,因为绝大多数的Linux文件系统是大小写敏感的。

后来,MySQL推出Windows平台的版本,而Windows平台是大小写不敏感的,所以无法区分大小写的名称。为了解决这个问题,需要添加设置来忽略表名的大小写。于是建立了lower_case_table_names设置选项。在Windows平台可以在my.ini文件中设置,该文件在Windows7或Windows2008操作系统中位于 C:\ProgramData\MySQL\MySQL Server 5.6 目录下。在Linux平台可以修改my.cnf中的设置项。

缺省的选项--
Linux平台:大小写敏感 Case-Sensitive
Windows平台:大小写不敏感 Case-Insenstitive

问题的原因找到啦,我们可以在Linux中设置lower_case_table_names为1启用大小写不敏感。也可以设置MySQL在Windows中大小写敏感,但是这不是个好主意。

记住,更改设置后需要重启MySQL服务。

在Linux中最好使用大小写敏感的设置,会获得更高的性能。在Windows平台最好使用大小写不敏感的设置,因为不能存在两个仅有大小写差异而文件名字母相同的表。

由此而生,这也是为什么Linux下MySQL的性能会好过Windows下的原因。(其他原因有:更好的计划调度更快的磁盘IO和文件系统)

也可以在创建数据库时使用下面的语句来指定大小写敏感设置:

utf8 COLLATE utf8_general_cs; //实测:这一句不能在Windows平台下的MySQL使用; utf8 COLLATE utf8_general_ci;

相应的,也可以为某一个数据表设置大小写敏感:

知了追踪
知了追踪

AI智能信息助手,智能追踪你的兴趣资讯

下载

single_test_table; CREATE TABLE single_test_table( single_test_id int unsigned NOT NULL auto_increment, ... PRIMARY KEY PK_single_test_id (single_test_id ), ... ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE utf8_general_cs;

官方文档5.6.10中指出:

If you are using InnoDB tables, you should set this variable to 1 on all platforms to force names to be converted to lowercase.

如果使用InnoDB引擎,应该在所有的平台设置lower_case_table_names=1强制名称都转换为小写。

lower_case_table_names=1

如果要使Windows平台下的MySQL和Linux平台下的MySQL协同工作,你需要设置Linux平台下的全局变量lower_case_table_names=1,强制将数据表名称转换为小写(大小写不敏感)。

 

后记:

如果在Windows平台下设置了lower_case_table_names=0,意味着开启大小写敏感,这时Entity Framework Code First初始化数据库创建的表名是大小写混合的,可是在执行SQL语句查询时,SQL表名仍然是大小写不敏感的。

Entity Framework Code First初始化数据库创建了一个表:testdb.AppUsers,在Workbench中执行一个SQL语句,使用小写的数据表名(如果用testdb.AppUsers就不会出问题),例如SELECT * FROM testdb.appusers,不关查询窗口,然后尝试删除数据库:DROP DATABASE testdb,数据库无法正确的删除,会在testdb目录下留下一个文件:appusers.idb,而且MySQL服务也无法停掉,强制重启系统也无济于事,最后只能卸载MySQL数据库软件,删除数据目录,然后重新安装。

又经过反复交叉试验(这要感谢VMWare Fusion的Snapshot功能),Windows平台下去掉lower_case_table_names=0,就不会有上述问题,得出结论:不要*!不能在Windows平台下启用大小写敏感!

linux

相关专题

更多
java数据库连接教程大全
java数据库连接教程大全

本专题整合了java数据库连接相关教程,阅读专题下面的文章了解更多详细内容。

20

2026.01.15

Java音频处理教程汇总
Java音频处理教程汇总

本专题整合了java音频处理教程大全,阅读专题下面的文章了解更多详细内容。

5

2026.01.15

windows查看wifi密码教程大全
windows查看wifi密码教程大全

本专题整合了windows查看wifi密码教程大全,阅读专题下面的文章了解更多详细内容。

27

2026.01.15

浏览器缓存清理方法汇总
浏览器缓存清理方法汇总

本专题整合了浏览器缓存清理教程汇总,阅读专题下面的文章了解更多详细内容。

2

2026.01.15

ps图片相关教程汇总
ps图片相关教程汇总

本专题整合了ps图片设置相关教程合集,阅读专题下面的文章了解更多详细内容。

7

2026.01.15

ppt一键生成相关合集
ppt一键生成相关合集

本专题整合了ppt一键生成相关教程汇总,阅读专题下面的的文章了解更多详细内容。

3

2026.01.15

php图片上传教程汇总
php图片上传教程汇总

本专题整合了php图片上传相关教程,阅读专题下面的文章了解更多详细教程。

2

2026.01.15

phpstorm相关教程大全
phpstorm相关教程大全

本专题整合了phpstorm相关教程汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.15

Golang gRPC 服务开发与Protobuf实战
Golang gRPC 服务开发与Protobuf实战

本专题系统讲解 Golang 在 gRPC 服务开发中的完整实践,涵盖 Protobuf 定义与代码生成、gRPC 服务端与客户端实现、流式 RPC(Unary/Server/Client/Bidirectional)、错误处理、拦截器、中间件以及与 HTTP/REST 的对接方案。通过实际案例,帮助学习者掌握 使用 Go 构建高性能、强类型、可扩展的 RPC 服务体系,适用于微服务与内部系统通信场景。

16

2026.01.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 4.6万人学习

Excel 教程
Excel 教程

共162课时 | 11.9万人学习

PHP面向对象基础课程(更新中)
PHP面向对象基础课程(更新中)

共12课时 | 0.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号