Bln*_*pwr 4 postgresql collation
我正在导入包含imdb信息的.txt文件(例如moviename,movieid,actors,director,rating votes等)我使用COPY语句导入它.我使用的是Ubuntu 64位.问题是,有些演员有不同的名字,比如JonasÅkerlund.这就是postgresql抛出错误的原因:
错误:列"演员"的数据缺失背景:复制电影,第3060行:"tt0283003 Spun 2002 6.8 30801 101分钟.JonasÃ"**********错误**********
错误:列"actor"缺少数据SQL状态:22P04上下文:COPY电影,第3060行:"tt0283003 Spun 2002 6.8 30801 101分钟.JonasÃ"
我的副本声明如下:
COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt' (DELIMITER E'\t', FORMAT CSV, NULL '');
Run Code Online (Sandbox Code Playgroud)
我不知道如何使用整理声明.请问你能帮帮我吗?一如既往,谢谢.
排序规则仅确定字符串的排序方式.加载和保存它们时最重要的是编码.
默认情况下,Postgres使用您client_encoding的COPY命令设置; 如果它与文件的编码不匹配,你会遇到这样的问题.
您可以从消息中看到,在尝试阅读"Å"时,Postgres首先读取了"Ã",然后遇到了某种错误."Å"的UTF8字节序列是C3 85.C3在LATIN1代码页中恰好是"Ã" ,而85则是未定义*.因此,文件极有可能是UTF8,但读取就好像是LATIN1.
它应该像在COPY命令中指定适当的编码一样简单:
COPY movie FROM '/home/max/Schreibtisch/imdb_top100t.txt'
(DELIMITER E'\t', FORMAT CSV, NULL '', ENCODING 'UTF8');
Run Code Online (Sandbox Code Playgroud)
*我相信Postgres实际上将LATIN1中的这些"间隙"映射到相应的Unicode代码点.85变为U + 0085,又名"NEXT LINE",这解释了为什么它被视为CSV行终止符.
| 归档时间: |
|
| 查看次数: |
11881 次 |
| 最近记录: |