我需要将英文和阿拉伯文本插入PostgreSQL数据库。
我通过.bat脚本运行以下命令:
psql.exe --echo-all --username=postgres --dbname=dbname -f populate.sql
populate.sql
有这样的陈述:
insert into table1 (column1, column2) VALUES (2, 'المستخدم ');
如果我通过pgadmin执行此操作,则可行。问题是我需要通过启动应用程序后运行的一些.sql填充脚本来完成此操作。
在那种情况下,我得到了胡言乱语,像这样:
العرض
我使用Encode in UTF-8 without BOM
选项在Notepad ++中创建了脚本,因为UTF-8中的普通编码会在文件的开头添加一个额外的字符,并且不会进行某些插入。
我假设这是一个编码问题,但我还没弄清楚到底出了什么问题。 数据库采用UTF-8格式。
提前致谢!
答案 0 :(得分:8)
默认情况下,Windows控制台不会说任何形式的Unicode,它会说" native"代码页。哪个代码页取决于您的Windows安装的语言设置。
如果你chcp 65001
那么它会切换到utf-8。
总的来说,批处理/ cmd文件和Windows命令行中的文本编码处理非常糟糕。我通常建议您将基本上不是7位ASCII的任何内容放入单独的.sql文件中,并通过psql -f
使用合适的client_encoding
执行; PGCLIENTENCODING
环境变量对此很有用。
所以试试:
SET PGCLIENTENCODING=utf-8
psql.exe --username=postgres --dbname=dbname -f populate.sql