有时候在使用Toad或在程序中,偶尔会遇到如下的错误:

System.FormatException

GUID 应包含带 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) 就可以了。

mysql char(36)_MySQL中char(36)被认为是GUID导致的BUG及解决方案相关推荐

  1. mysql char(36)_MySQL中char(36)被認為是GUID導致的BUG及解決方案

    轉載地址:http://www.cnblogs.com/end/archive/2012/12/26/2834068.html (近日正好有一個項目需要用到C#來操作MySQL數據庫,遇到這個奇怪的問 ...

  2. char在mysql中的意思_mysql中char表示什么意思

    mysql中char表示定长字符串类型,它的特点是:1.存储空间固定:2.长度不够时,内部存储使用空格填充:3.输入的字符长度超过指定长度后,char会截取超出的字符.char类型适用于存储很短的字符 ...

  3. mysql nvarchar用什么代替_mysql中char、varchar、nvarchar数据类型的用法区别

    mysql中char.varchar.nvarchar数据类型的用法区别 mysql中char.varchar.nvarchar数据类型的用法区别: 说明: 1.char: 固定长度的非 Unicod ...

  4. python中char是什么意思_MySQL中char和varchar的区别是什么

    MySQL中char和varchar的区别是什么 区别一.定长和变长的区别 1.char 表示定长,长度固定: 2.varchar表示变长,即长度可变. 当所插入的字符串超出它们的长度时,视情况来处理 ...

  5. mysql的char和varchar_MySQL中CHAR和VARCHAR的区别及应用场景

    VARCHAR和CHAR是两种最主要的字符串类型.它们的存储方式和数据检索方式都不一样. VARCHAR和CHAR的数据检索效率:CHAR > VARCHAR VARCHAR类型 VARCHAR ...

  6. php验证mysql内数据_MySQL中数据类型的验证_MySQL

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql> create table t1(name char(256)) default charse ...

  7. mysql join图解_MySQL中Join算法实现原理分析[多图]

    在MySQL 中,只有一种 Join 算法,就是大名鼎鼎的 Nested Loop Join,他没有其他很多数据库所提供的 Hash Join,也没有 Sort Merge Join.顾名思义,Nes ...

  8. php mysql ifnull函数_MYSQL中的IFNULL函数

    手册上: IFNULL(expr1,expr2) 假如expr1不为NULL,则IFNULL()的返回值为 expr1;否则其返回值为 expr2.IFNULL()的返回值是数字或是字符串,具体情况取 ...

  9. explain mysql怎么用_mysql中explain用法详解

    EXPLAIN用于SELECT语句中的每个表返回一行信息.表以它们在处理查询过程中将被MySQL读入的顺序被列出 如果在select语句前放上关键词explain,mysql将解释它如何处理selec ...

最新文章

  1. c语言顺序表有效元素长度,用C语言描述的顺序表类型
  2. 《ASCE1885的源码分析》の跨平台互斥对象Mutex封装类
  3. RStudio个性化界面配置
  4. linux多路由表,linux 多网卡多路由表实现策略路由
  5. Linux_查看CPU信息、机器型号等硬件信息
  6. python 程序1【登录接口】
  7. centos7 python3 sqlserver_Centos7.3下SQLServer安装配置方法图文教程
  8. [vue-element] ElementUI怎么修改组件的默认样式?
  9. python中的self怎么理解_python中的self理解
  10. django render_(django/flask/bottle)多框架python-restful接口包api-shop
  11. Kotlin入门到放弃
  12. cad插件_CAD插件迷你建筑工具箱4.0
  13. PCB传输线阻抗计算工具Polar Si9000的安装方法
  14. WES7 定制界面完整过程(去除所有windows标识)
  15. 红帽linux开启vnc服务器,红帽Linux上使用VNC
  16. 测试人员必备:常用自动化测试工具
  17. web项目登录报错:HTTP Status 500 - Error instantiating servlet class com.gxuwz.medical.web.servlet.LoginSer
  18. ios工程广告添加:广告sdk、广告中介添加(出海App)
  19. 腾讯“立知”被疑抄袭“即刻”
  20. 蔡琴 经典收藏APE

热门文章

  1. winrar x64 3.93如何破解
  2. 通过代码解决全角问题类调用法
  3. 程序员的算法课(17)-常用的图算法:深度优先(DFS)
  4. 【GCN】从文本分类来看图卷积神经网络
  5. 【git系列】git命令之撤销回退篇
  6. mysql8.0.11创建用户报错_mysql8.0创建用户授予权限报错解决方法
  7. 鹦鹉助手模拟器 梦幻西游 找不到服务器,模拟器玩梦幻 17173鹦鹉助手模拟器上线...
  8. VS2005 TS SP1压缩整合完整版BT下载
  9. iptables实现NAT
  10. 【SAP HANA】关于SAP HANA中带层次结构的Analytic View创建、激活状况下在系统中生成对象的研究...