PostgreSQL数据库表名大小写,空间数据导入后乱码两个问题
2018-03-05 12:40
375 查看
今天使用shp2pgsql导入了一个表到自己的空间数据库中,但是遇到几个问题,在这里贴出自己的解决方法。
如图,新建一个空的空间数据库,此时编码显示正常,服务器和客户端都是正常的UTF编码,但是导入shpfile的数据后出现了显示的乱码:
将客户端编码设置为UTF-8,则刚才插入的“汉字”不能正常显示。因为此时客户端和服务端的编码一样,在取数据时不进行任何转换,直接将存在服务端的UTF8编码的字节传到客户端,之后psgl直接显示,所以就乱码了。
此环境下插入“汉字”,则添加不成功,因为“汉字”直接以GBK的形式传到服务端,UTF8编码不认识,所以就报错。(现在客户端编码为UTF8,所以提示的中文信息也乱码了)。
导入数据的乱码问题
如图,新建一个空的空间数据库,此时编码显示正常,服务器和客户端都是正常的UTF编码,但是导入shpfile的数据后出现了显示的乱码:
原因分析:
假设服务端编码为UTF-8,客户端工具psgl默认为GBK,在此环境下插入“汉字”,一切正常。此时传到客户的“汉字”为GBK编码,自动转为UTF-8编码存到服务端;而查询时,又自动将服务端的UTF-8编码转为GBK来显示,所以没有出现乱码。将客户端编码设置为UTF-8,则刚才插入的“汉字”不能正常显示。因为此时客户端和服务端的编码一样,在取数据时不进行任何转换,直接将存在服务端的UTF8编码的字节传到客户端,之后psgl直接显示,所以就乱码了。
此环境下插入“汉字”,则添加不成功,因为“汉字”直接以GBK的形式传到服务端,UTF8编码不认识,所以就报错。(现在客户端编码为UTF8,所以提示的中文信息也乱码了)。
解决方法:
客户端默认编码为 utf-8, 改为 gbk (\encoding 查看当前客户端编码字符集): * set client_encoding to 'gbk'
[b]导入的数据表的表名大小写问题[/b]
第二个问题是查询表的时候,直接输入表名提示无法表关系不存在。原因分析:
PostgreSQL 是大小写敏感的,并默认对SQL语句中的数据库对象名称转换为小写,因此如果你在创建数据库对象时指定了大小写混和的对象名称,那么在通过SQL语句访问 这些对象时,由于Postgresql数据库里表名应该是分大小写的,导致找不到City_P这个表。解决方法:
使用双引号“”将数据库对象括起来,以提示 PostgreSQL 不用帮你转换对象名为小写,否则将激发“xxxxx对象不存在”的异常,譬如刚才名为 City_P 的表,在 PostgreSQL 命令行下中必须使用类似这样的查询语句才能正确执行:SELECT * FROM “City_P”,当然它对 SQL 标准中的保留字和关键字是不区分大小写的,所以写成 select * From “City_P” 这样也是完全可以的。相关文章推荐
- C#中mySQL 使用语句LOAD DATA LOCAL INFILE 'record.log' INTO TABLE PT_LOG;导入数据时乱码问题
- mysql-front导入导出数据乱码的问题
- 关于使用PHPExcel将页面数据导入EXCEL表时乱码的问题
- 导入数据乱码问题
- java 实现Excel数据导入数据库时,中文乱码问题
- java中将数据导入excel,解决乱码,缺少jar包问题
- Mysql中文乱码问题完美解决方案(包括建库、导入数据、网页)
- 解决mysql命令行导入数据时出现乱码问题
- 搭建HIVE数据仓库导入带有中文的HQL及查看表数据时遇到的乱码问题
- 解决关于导入数据到mysql数据库时出现的乱码问题
- PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
- Excel的数据导入到数据库中出现的两个问题及解决方案
- sybase数据库bcp导入数据乱码、换行问题
- MySQL导入数据乱码、出错等问题的解决办法
- 如何解决mysql导入数据乱码问题
- oracle 导入(imp)数据时的表空间(tablespace users)问题
- Linux环境中往MySQl数据库导入数据文件乱码问题
- 解决mysql导入导出数据乱码问题
- PLSQL数据导入导出问题解决(空表、大字段表、表空间错误等)
- 解决Excel数据导入sqlite中的中文乱码问题