MySQL中char(36)被认为是GUID导致的BUG及解决方案
来源:互联网 发布:严蔚敏 算法2.3 编辑:程序博客网 时间:2024/06/05 20:41
有时候在使用Toad或在程序中,偶尔会遇到如下的错误:
System.FormatExceptionGUID 应包含带 4 个短划线的 32 位数(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)。
Stack Trace:
在 System.Guid..ctor(String g)
在 MySql.Data.Types.MySqlGuid.MySql.Data.Types.IMySqlValue.ReadValue(MySqlPacket packet, Int64 length, Boolean nullVal)
在 MySql.Data.MySqlClient.NativeDriver.ReadColumnValue(Int32 index, MySqlField field, IMySqlValue valObject)
在 MySql.Data.MySqlClient.ResultSet.ReadColumnData(Boolean outputParms)
在 MySql.Data.MySqlClient.ResultSet.NextRow(CommandBehavior behavior)
在 MySql.Data.MySqlClient.MySqlDataReader.Read()
在 Quest.Toad.Db.ToadDataAdapter.InternalReadBackground()
原因是如果一个字段定义为 CHAR(36), 则MySQL官方的连接器会将其当成 GUID 类型,有些情况下会要求你输入(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)形式的字符串,否则会报错。实际上,有时候 某个字段碰巧设为可CHAR(36), 但是我们的本意并非当它是GUID。
(例如使用 MySqlDataAdapter 的 Fill 方法填充 DataTable时,就会抛出 Exception。可以使用连接器安装后所附带的 TableEditor 进行观察,重复出这个Bug)
今天特意追踪了一个MySql.Data中的代码:发现MySqlCommand在Prepare的时候会调用Driver的PrepareStatement方法,会初始化ResultSet,会调用MySqlField.SetTypeAndFlags,其中有代码如下:
if (((this.Type == MySqlDbType.String) && (this.CharacterLength == 0x24)) && !this.driver.Settings.OldGuids){ this.mySqlDbType = MySqlDbType.Guid;}
原因查明,解决方法是:将这个字段修改为 VARCHAR(36) 或者 CHAR(40),总之,不是 CHAR(36) 就可以了。
转至:http://www.cnblogs.com/end/archive/2012/12/26/2834068.html
0 0
- MySQL中char(36)被认为是GUID导致的BUG及解决方案
- MySQL中char(36)被认为是GUID导致的BUG及解决方案
- 又是strtok导致的bug
- 真机测试时不小心拔掉机器导致的 一个bug及解决方案
- Delphi7中WebBrowser控件的bug及解决方案
- Delphi7中WebBrowser控件的bug及解决方案 .
- Delphi中WebBrowser控件的3个bug及解决方案
- PHP为什么会被认为是草根语言? (摆脱对MySQL的依赖)
- mysql limit 使用不当导致的bug
- latin1保存汉字导致不同的汉字被认为“相等”
- 所有在类的声明中定义的函数将被自动认为是内联函数。
- 移动开发中一些bug及解决方案
- 光交换技术被认为是新一代宽带技术中最重要的部分
- Mono2.0 对C#闭包 与 donet 不同的实现导致Unity的Bug 及解决方案
- mysql的jdbc中sql语句超时机制bug导致的内存泄露处理
- TNSNAMES配置中空格导致的bug
- 分享内bug导致iOS审核失败的解决方案
- Eclipse 中报Unhandled event loop exception Java heap space(如果是JS导致的)解决方案
- 第二章 物理层(笔记)
- Linux值得拥有的性能监控工具
- linux设备驱动程序注册过程详解
- 算法:递归法
- 脱离文档流
- MySQL中char(36)被认为是GUID导致的BUG及解决方案
- The Production installation of DataPusher for Ckan2.5.2 on CentOS6.8
- 解决php向mysql数据库插入数据乱码问题
- hdu4308 Saving Princess claire_(BFS)
- locate command not found
- 用Deformable Part Model(DPM)voc-release3.1训练自己的模型
- servlet转发·重定向·包含常见问题
- ubuntu 16.04.1 u盘安装问题
- CI 实现无限级分类 \ 数据处理组合