如何避免MS Access中UNION操作截断LongText字段值?
解决Access UNION合并LongText字段被截断的问题
我之前也碰到过一模一样的坑!Access的UNION操作确实会默认把LongText(旧版本叫MEMO)字段硬截断到255字符——哪怕源表的字段明明是长文本类型,这是因为Access处理UNION时会自动推断字段类型,优先套用Short Text的限制。不过你完全可以用单条查询搞定,不用拆分成多步操作。
核心思路:强制保留LongText类型
在每个子查询里,对Description字段做个简单的字符串操作,或者显式转换类型,让Access明确识别这是长文本字段,就能避免截断了。这里给你两种实用的写法:
方法1:拼接空字符串(最简便)
给Description拼接一个空字符串& "",就能强制Access维持字段的LongText属性:
SELECT Description, LenBefore, Len(Description) AS LenAfter FROM ( SELECT Description & "" AS Description, Len(Description) AS LenBefore FROM References UNION SELECT Description & "" AS Description, Len(Description) AS LenBefore FROM KeyWords ) AS CombinedResults
方法2:显式转换为LongText类型
如果你更偏好明确的类型声明,可以用Access的CAST函数(CONVERT也能达到同样效果):
SELECT Description, LenBefore, Len(Description) AS LenAfter FROM ( SELECT CAST(Description AS LongText) AS Description, Len(Description) AS LenBefore FROM References UNION SELECT CAST(Description AS LongText) AS Description, Len(Description) AS LenBefore FROM KeyWords ) AS CombinedResults
为什么这能解决问题?
直接用UNION时,Access会扫描第一个子查询的字段,默认把字段类型设为Short Text(上限255字符),完全忽略源字段实际是LongText的事实。通过上面的操作,我们相当于给Access“提了个醒”:这个字段是长文本,必须完整保留内容,这样合并后的数据集就不会出现截断了。
另外补充一句:如果你的两个表没有重复数据,用UNION ALL代替UNION会更高效——因为UNION会额外执行去重操作,而截断问题在UNION ALL里同样存在,上面的解决方案也完全适用。
内容的提问来源于stack exchange,提问作者saastn
相关产品推荐
相关产品推荐

