Unity配置MySql踩了很多坑,终于调试好了遂写个文,希望能帮到同样踩坑的友友们。

太长不看可以划到最后的总结!!!

我自己项目文件Assets\Plugins里的.dll文件资源可以免费下载,网页版在文章顶部,手机版点开我个人主页在我上传的资源里找!

————————————————2024/5/16更新————————————————

与本文无关的更新:关于使用MySql5.7.40版本(或其他出现同样错误的5.7版本)

Unity报错:The given key was not present in the dictionary

要先试着在连接数据库的语句后加一行charset=utf8,如下:

如果能连上数据库但在查询数据时还报同样的错就换MySql.Data.dll的版本!亲测!试了十几个最终用6.9.9版的成功了!

注:(使用mysql5.7版本的Plugins文件夹里只需要I18N.West.dll、I18N.MidEast.dll、I18N.CJK.dll、I18N.dll和MySql.Data.dll。MySql.Data.dll推荐去官网下载6.9.9版本的,Operating System选择.NET&Mono,在下载好的压缩包里直接找MySql.Data.dll,然后复制到Plugins文件夹里就好了。另外的几个.dll文件要去你安装Unity的根目录里搜索,比如我的在C:\Program Files\Unity\Hub\Editor\2019.3.5f1\Editor\Data\MonoBleedingEdge\lib\mono\4.5)

————————————————2024/5/11更新————————————————

更新:试了一下,不需要取消勾选Assembly Version Validation,把我提供的.dll文件全部拖入Plugins就可以连接!没有Assembly Version Validation选项的Unity版本一样可以连上!怕我原文的经历会误导大家!可以不用取消勾选Assembly Version Validation!

(感觉取消勾选Assembly Version Validation是没有办法的办法!我也是搜到最后没办法了才这样做的!这样做个人感觉能跑起来算玄学!具体原因不明!我也不是很懂!)

————————————————以下为原文————————————————

前情提要:

我原来使用的unity版本是2019.3.5f1,MySql是8.0版;随手安装的官网最新MySql Connector/NET 8.4.0,把里面的mysql.data.dll加到了unity工程文件中Assets\Plugins文件夹,Plugins文件夹中也加入了自己unity版本里的I18N.West.dll、I18N.MidEast.dll、I18N.CJK.dll、I18N.dll,但死活连不上数据库,折磨了几个小时,,网上搜到的解决方案大部分是安装低版本的MySql,同样的MySql Connector/NET也要低版本,但为了一个小小的工程要彻底删掉我已经安装好的MySql8.0,再重新安装低版本,感觉挺折磨人的,于是走向了另一条用MySql8.0死磕到底的路

(更新:关于MySql Connector/NET我后来发现,,连接Unity只用下载.NET&Mono的那个包,把里面的MySql.Data.dll偷出来就好了,不用安装,,意思就是Operating System选.NET&Mono就好了不用选Microsoft Windows,选了后者是下载一个安装程序虽然也可以偷到MySql.Data.dll这个文件但感觉还是前者好一点用完就删!)

基本上在unity里我遇到的是这样几个报错:

Assembly 'Assets/Plugins/MySql.Data.dll' will not be loaded due to errors: Unable to resolve reference 'Google.Protobuf'. Is the assembly missing or incompatible with the current platform? Reference validation can be disabled in the Plugin Inspector. Unable to resolve reference 'ZstdSharp'. Is the assembly missing or incompatible with the current platform? Reference validation can be disabled in the Plugin Inspector. Unable to resolve reference 'K4os.Compression.LZ4.Streams'. Is the assembly missing or incompatible with the current platform? Reference validation can be disabled in the Plugin Inspector. Unable to resolve reference 'BouncyCastle.Cryptography'. Is the assembly missing or incompatible with the current platform? Reference validation can be disabled in the Plugin Inspector. Unable to resolve reference 'System.Memory'. ......

看到我标红加粗的这些了吗,这些就是缺的.dll文件啊!其实只要把这些缺的.dll文件一个一个塞进Plugins,然后慢慢看错误提示,缺啥塞啥,直到不再报错为止,说起来很简单吧!但这些文件哪里来呢?而且我似乎装错了MySql Connector/NET的版本,我的MySql是8.0,结果装了8.4的connector net,不知道版本不一样到底有没有问题,但还是多试试吧,于是我又跑去装8.0版的connector net,随缘选了个8.0.24版,发现8.4版的和8.0.24版的很不一样,8.4版的里面只有一个mysql.data.dll,而8.0版的有大部分上面标红的文件,只要找到错误提示中的文件再拖进Plugins就好了吧,大概,,

不知道是我的问题还是啥,它还是缺点文件,我又跑去Visual Studio创建了一个类库(.NET Framework)项目,然后在菜单栏-工具-NuGet包管理器-管理解决方案的NuGet程序包,在浏览中搜索Google.Protobuf,点击第一个,在右边勾选刚刚新建的类库项目,点击安装,然后弹出来的窗口点确定,安装好之后再去工程文件中找到packages文件夹,把每个文件夹里的lib点开,应该有不同的net版本,我是随手选的netstandard2.0,把里面的.dll文件都偷出来,前前后后一共是BouncyCastle.Crypto.dll、Google.Protobuf.dll、K4os.Compression.LZ4.dll、K4os.Compression.LZ4.Streams.dll、K4os.Hash.xxHash.dll、System.Buffers.dll、System.Memory.dll、System.Runtime.CompilerServices.Unsafe.dll、Ubiety.Dns.Core.dll、Zstandard.Net.dll、MySql.Data.dll还有I18N.West.dll、I18N.MidEast.dll、I18N.CJK.dll、I18N.dll这些文件要塞进Plugins文件夹

但我又遇到了诡异的问题,把这些文件塞进去后还是报错了,按理说不应再报错了呀,非常崩溃,以为自己找错方向,具体的报错没有记录下来,反正就是非常之诡异,千奇百怪,差点就要卸载MySql 8.0去安装低版本了(可能跟我个人操作也有点关系,因为中途试了各种办法也许是搞乱套了)

然后我看到了一种说法,是在Unity菜单栏中的Edit-Project Settings-Player,在右边找到Other Settings-Configuration,再找到Assembly Version Validation的选框,取消勾选。顺便说一下,如果总是有问题的话,这里有一个Api Compatibility Level看看有没有选.NET 4.x

这个Assembly Version Validation是程序集版本验证的意思,按我的理解,取消勾选就是不要版本验证嘛,不管怎么样能跑就行,,,然后我抱着一丝希望去我的Unity里找这个选框,您猜怎么着?嘿!我没有这个选框,我把Project Settings翻遍了都没找到这个Assembly Version Validation,这下心如死灰了,还是去卸载MySql8.0吧,,

就在我准备卸载的一刹那,我想起来我还有一个版本的Unity,我准备用2020.2.4f1版本的Unity打开工程文件试一下,太好了,这下有救了,发现了这个Assembly Version Validation程序集版本验证,取消勾选,检查一下换了Unity版本后的工程文件,然后重新在Plugins里塞上面的.dll文件,最终解决了问题,连上数据库了。。连接成功那一刻感动得我要流眼泪了。。

总结一下,Unity+MySql8.0无法连接数据库的话,先试试把错误提示里的各种.dll文件一个一个加到Plugins里,看看有没有报错,再看看unity那个项目设置里Api Compatibility Level有没有选.NET 4.x,还有诡异的报错就再去Unity项目设置里取消勾选Assembly Version Validation,你说你没有Assembly Version Validation这一项怎么办?我不知道,貌似低一点的版本确实没有,不知道有没有别的解决方案,实在不行你就只有两个选择了,装一个有Assembly Version Validation选项的高版本Unity,但我要提醒你装了高版本Unity也不一定能调好,我的经历也许只是个例。。或者认命去装低版本的MySql....大概是5.7版本,MySql Connector/NET的版本似乎也不要太高,大概6.x.x这个样子,低版本的方法似乎成功几率大一点,祝你好运!

顺便说一下,好像还有另一种错误是MySql8.0的加密规则问题,我没有遇到,不过搜索的时候搜到这个了,可以看一下其他文章,似乎是因为MySql8.0版引入了新的身份验证caching_sha2_password,unity默认使用的mysql_native_password,,,,,,

一点点踩坑经历,希望能帮到你,有错误请随意指出

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐