SQL查询报错:COLLATE附近存在语法错误,求解决方法
问题原因及解决方案
核心原因1:排序规则不兼容
你使用的utf8_general_ci是MySQL专属的排序规则,PostgreSQL并不支持这个命名的规则。PostgreSQL的排序规则遵循语言_地区.编码的格式,比如en_US.utf8、zh_CN.utf8,或者通用的C(区分大小写)、POSIX等。如果需要大小写不敏感的字符串比较,PostgreSQL里常用两种替代方式:
- 用
LOWER()函数统一转小写后对比:LOWER(institution_user.user_id) = LOWER(iusum.user_id) - 使用PostgreSQL支持的大小写不敏感排序规则(需数据库已支持),比如
en_US.utf8_ci或und.utf8_ci(通用不敏感规则)
核心原因2:字符串常量引号错误
你的WHERE子句里用双引号包裹了字符串常量"6afc2d2c-ec90-455f-88bd-b6678b94be75",在PostgreSQL中双引号是用来引用标识符(比如表名、列名)的,字符串常量必须用单引号,否则会被识别为列名引发额外错误,应改为'6afc2d2c-ec90-455f-88bd-b6678b94be75'
修正后的示例查询
select iusum.sf_uid as numeric_id, institution_user.* from institution_user join institution_user_sf_user_mapping iusum on LOWER(institution_user.user_id) = LOWER(iusum.user_id) where institution_id = '6afc2d2c-ec90-455f-88bd-b6678b94be75'
内容的提问来源于stack exchange,提问作者fini-stair
相关产品推荐
相关产品推荐

