FireDac 与数据库连接时字符集及对应的字段类型问题
近日在一个过程调用时发生一个奇怪现象, 异常返回意思是说, 数据的长度是【6】, 而字段定义的长度是【3】。 分析后认为: 调用过程你不涉及到对返回数据集的字段手动定义问题, 出现这个问题应是两边的字符集出了问题。
数据库字符集为 SIMPLIFIED CHINESE_CHINA.ZHS16GBK, 即双字节, 有可能FdConnection 的字符集设置出现匹配问题。 最后修改方案为:
1、修改 FDConnection 的 CharacterSet := 'UTF8' , 即以 UTF8 与数据库连接,兼容所有类型数据库
2、修改在调用过程时所有原 ftString 改为 ftWideString
问题解决
找到一份针对 SQLLite 的字段对应关系,我想其他类型数据库也同理:
| Type name | Description |
|---|---|
| ROWID | _ROWID_ | OID | dtInt64, Attrs = [caSearchable, caAllowNull, caROWID] |
| BIT | BOOL | BOOLEAN | LOGICAL | YESNO | dtBoolean |
| TINYINT | SHORTINT | INT8 [UNSIGNED] | dtSByte / dtByte |
| BYTE | UINT8 | dtByte |
| SMALLINT | INT16 [UNSIGNED] | dtInt16 / dtUInt16 |
| WORD | UINT16 | YEAR | dtUInt16 |
| MEDIUMINT | INTEGER | INT | INT32 [UNSIGNED] | dtInt32 / dtUInt32 |
| LONGWORD | UINT32 | dtUInt32 |
| BIGINT | INT64 | COUNTER | AUTOINCREMENT | IDENTITY [UNSIGNED] | dtInt64 / dtUInt64 |
| LONGLONGWORD | UINT64 | dtUInt64 |
| REAL | FLOAT | DOUBLE | dtDouble |
| SINGLE [PRECISION] [(P, S)] | dtSingle / dtBCD / dtFmtBCD |
| DECIMAL | DEC | NUMERIC | NUMBER [UNSIGNED] [(P, S)] | dtSByte / dtInt16 / dtInt32 / dtInt64
dtByte / dtUInt16 / dtUInt32 / dtUInt64 dtBCD / dtFmtBCD |
| MONEY | SMALLMONEY | CURRENCY | FINANCIAL [(P, S)] | dtCurrency |
| DATE | SMALLDATE | dtDate |
| DATETIME | SMALLDATETIME | dtDateTime |
| TIMESTAMP | dtDateTimeStamp |
| TIME | dtTime |
| CHAR | CHARACTER [(L)] | dtAnsiString, Len = L, Attrs = [caFixedLen] |
| VARCHAR | VARCHAR2 | TYNITEXT | CHARACTER VARYING | CHAR VARYING [(L)] | dtAnsiString, Len = L |
| NCHAR | NATIONAL CHAR | NATIONAL CHARACTER [(L)] | dtWideString, Len = L, Attrs = [caFixedLen] |
| NVARCHAR | NVARCHAR2 | NATIONAL CHAR VARYING | STRING [(L)] | dtWideString, Len = L |
| RAW | TYNIBLOB | VARBINARY | BINARY | BINARY VARYING [(L)] | dtByteString, Len = L |
| BLOB | MEDIUMBLOB | IMAGE | LONGBLOB | LONG BINARY | LONG RAW | LONGVARBINARY | GENERAL | OLEOBJECT | TINYBLOB | dtBlob |
| MEDIUMTEXT | LONGTEXT | CLOB | MEMO | NOTE | LONG | LONG TEXT | LONGCHAR | LONGVARCHAR | TINYTEXT | dtMemo |
| TEXT | NTEXT | WTEXT | NCLOB | NMEMO | LONG NTEXT | LONG WTEXT | NATIONAL TEXT | LONGWCHAR | LONGWVARCHAR | HTML | dtWideMemo |
| XMLDATA | XMLTYPE | XML | dtXML |
| GUID | UNIQUEIDENTIFIER | dtGUID |
| Other data types | dtWideString |
Note: With SQLite, the FormatOptions.StrsTrim works for all string data types.
参考: http://docwiki.embarcadero.com/RADStudio/XE6/en/Using_SQLite_with_FireDAC
FireDac 与数据库连接时字符集及对应的字段类型问题的更多相关文章
- mysql autocommit=OFF导致wordpress 建立数据库连接时出错
今天安装wordpress完成后跳转到login页面时,出现建立数据库连接时出错.网上清一色的拷贝http://mt.sohu.com/20160917/n468547634.shtml的答案. 只能 ...
- 在IDEA中使用JDBC获取数据库连接时的报错及解决办法
在IDEA中使用JDBC获取数据库连接时,有时会报错Sat Dec 19 19:32:18 CST 2020 WARN: Establishing SSL connection without ser ...
- C#创建对象时各种初始化属性、字段的方式的执行顺序
创建对象代码如下: new FilterInfo(Student.CreateTimeProperty,"朱七",Express.Equals,Relationship.Or) { ...
- sql查询语句时怎么把几个字段拼接成一个字段
sql查询语句时怎么把几个字段拼接成一个字段SELECT CAST(COLUMN1 AS VARCHAR(10)) + '-' + CAST(COLUMN2 AS VARCHAR(10) ...) a ...
- swf2pdf转swf时字符集问题【转】
今天转了一个的pdf是出现字符集问题,并转换的swf为乱码.出现的错误如下. 错误的原因是缺少中文字符集GBK-EUC-H.解决方法使用xpdf增加缺少的字符集.解决步骤如下: (一) 下载相关的xp ...
- 关于数据库连接时URL的问题
最近在写一个简单的增删改查的代码时,遇到保存的中文都会变成问号(?),由于刚开始只是一些数据的保存,所以认为之后只要对数据库的编码进行修改即可,但是后来要对数据进行查找的时候发现根本查找不到, 当时用 ...
- 部署OGG时字符集转换问题--oracle to oracle已验证,其他异构环境应当也适用
之前在安装OGG总是遇到字符集问题,尤其是多源端对一个目标端时,源端字符集不同,导致出现字符集问题 无法同步数据,查阅了大量的园子资料,都说要设置复制或抽取进程中SETENV (NLS_LANG=AM ...
- 通过hibernate session.connection()获得数据库连接时,导致的查询缓慢甚至假死机问题
在使用hibernate的应用中,如果需要直接使用Java.sql.Connection,一般我们是通过hibernate的session.connection()获得的,然后session.clos ...
- Oracel数据库连接时出现:ORA-12518:监听程序无法分发客户机连
在连接Oracel数据库时,每隔一段时间就会出现:ORA-12518:监听程序无法分发客户机连接,如图 上网查了资料原因和解决方案如下: 一.[问题描述] 最近,在系统高峰期的时候,会提示如上的错误, ...
随机推荐
- windows server 2008服务器IIS绑定阿里云域名
一.打开Internet 信息服务(IIS)管理器 二.将你的网站放到服务器目录下,比如D盘下的WWW文件夹. 三.在IIS中,添加网站,网站的物理路径指向第二部中创建的网站. 五.在绑定 ...
- 源码维护基本命令diff_patch
源码维护基本命令 diff------生成源代码补丁diff [命令行选项] 源文件 新文件-r 递归处理相应目录-N 包含新文件到patch-u 输出统一格式(unified format),这种格 ...
- 【转载】:【C++跨平台系列】解决STL的max()与numeric_limits::max()和VC6 min/max 宏冲突问题
http://www.cnblogs.com/cvbnm/articles/1947743.html 多年以前,Microsoft 幹了一件比 #define N 3 還要蠢的蠢事,那就是在 < ...
- Mac 加密软件
1,花了127块买一个mac 加密软件 hider2,发现他只是把整个文件加密后,加入到某个包里面,然后删除了原文件,这个简单的功能竟然要收取我这么多钱 2. 然后找个开源的加密软件:PGP, 有GU ...
- javascript 字符串相关知识汇总
① charAt(): 选中字符串内第几个元素 <script> var str="1234567389"; alert( str.charAt(1) ); // 2 ...
- Mysql主从库同步错误:1062 Error 'Duplicate entry '1438019'
mysql主从库同步错误:1062 Error 'Duplicate entry '1438019' for key 'PRIMARY'' on query mysql主从库在同步时会发生1062 L ...
- C# SQL优化 及 Linq 分页
每次写博客,第一句话都是这样的:程序员很苦逼,除了会写程序,还得会写博客!当然,希望将来的一天,某位老板看到此博客,给你的程序员职工加点薪资吧!因为程序员的世界除了苦逼就是沉默.我眼中的程序员大多都不 ...
- MongoDB分片集群还原
从mongodb 3.0开始,mongorestore还原的时候,需要一个运行着的实例.早期的版本没有这个要求. 1.为每个分片部署一个复制集 (1)复制集中的每个成员启动一个mongod mongo ...
- WebService 的一些基本概念
一. 1.Endpoint http://www.ttdev.com/SimpleService 这个webservice全名就是所谓的"endpoint" 2.RPC type ...
- oracle组建:ODAC112021Xcopy_x64,在开发机上,不用安装oracle的客户端等开发
以下解决方案是为了连接远程服务器上的oracle 11g 的解决方案. 下载地址:http://www.oracle.com/technetwork/database/windows/download ...