zoukankan      html  css  js  c++  java
  • 关于delphi2010读取MySQL数据库TEXT类型乱码的解决方案

    今天在测试delphi2010的DBExpress读取mysql数据库功能的时候,发现了一个问题:

    我的mysql是5.1版本,字符集全部设置为utf8,使用delphi2010读取intger、tinyint、char、varchar等类型,中文显示正常。但是当读取text类型字段时候,出现乱码。如果将该字段更换为varchar,内容显示正常。这就奇怪了,我百思不得其解。

    接着,我到网上查询这个问题,发现也有朋友出现类似text类型乱码的问题,但是都没有解决答案(我的character_set_*设置正确,这一点肯定是没问题的)。我又查询了一下mysql手册,针对TEXT字段解释如下:

    “BLOB 列被视为二进制字符串(字节字符串)TEXT列被视为非二进制字符串(字符字符串)”

    从Mysql解释上看,TEXT和BLOB字段实质上没什么区别,都是二进制流,text类型多一个字符集设置。

    另外,大家看一下这里,下图是mysql的character设置,其中一项character_set_filesystem=binary,对文件系统使用二进制存储,能不能TEXT也是按binary方式存储的呢?如果是这样,乱码的问题就能通过其他方式解决。

    a

    delphi 程序:

    Memo1.lines.Add(UTF8ToUnicodeString(StringOf(SQLQuery.FieldByName('tt').AsBytes)));
    使用上面修改的delphi代码,就能成功读取text类型的字段。如果用老的代码
    Memo1.lines.Add(SQLQuery.FieldByName('tt').AsString);读取text类型的内容就是乱码。

    总结:

    这个问题似乎是delphi的bug吧,没有时间深入研究delphi的代码,如果哪位兄弟想深入研究,请在我的博客中留言。

  • 相关阅读:
    CentOS查看CPU信息、位数、多核信息
    Linux常用命令大全
    chmod命令详细用法
    tar命令的详细解释
    yum和rpm命令详解
    LeetCode 241. Different Ways to Add Parentheses
    LeetCode 139. Word Break
    LeetCode 201. Bitwise AND of Numbers Range
    LeetCode 486. Predict the Winner
    LeetCode 17. Letter Combinations of a Phone Number
  • 原文地址:https://www.cnblogs.com/MaxWoods/p/2189823.html
Copyright © 2011-2022 走看看