日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL字符集问题

發(fā)布時間:2025/5/22 数据库 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL字符集问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

轉(zhuǎn)自:osdba的文章《初學者遇到的PostgreSQL字符集問題的解決》

當初學者在使用PostgreSQL數(shù)據(jù)庫,輸入中文時,會遇到“ERROR: invalid byte sequence for encoding “UTF8”: 0xd6d0”的錯誤,原因是由于沒有正確設(shè)置客戶端字符集。

問題的原因:
默認情況下,PostgreSQL是不轉(zhuǎn)換字符集的,如果你的數(shù)據(jù)庫是UTF8的字符集,一般終端的中文字符集會設(shè)置為GBK,或en_US(查看終端的字符集可以看LANG環(huán)境變量的設(shè)置),所以你輸入的中文是GBK的編碼,這個編碼不經(jīng)轉(zhuǎn)換的存入數(shù)據(jù)庫中,而數(shù)據(jù)庫是UTF8的,PostgreSQL一看沒有這樣的UTF8編碼,所以當然報錯了。
解決方法為:
方法一:設(shè)置postgresql的客戶端編碼為GBK,這時PostgreSQL就知道輸入的內(nèi)容是GBK編碼的,這樣PostgreSQL數(shù)據(jù)庫會自動做字符集的轉(zhuǎn)換,把其轉(zhuǎn)換成UTF8編碼。
方法二:直接設(shè)置終端的字符集編碼為UTF8,讓輸入的編碼直接為UTF8,而不是GBK。

看我具體的演示:

方法一:設(shè)置postgresql的客戶端編碼:
設(shè)置psql客戶端字符集為GBK,方法有兩種,一種是在psql中輸入“\encoding GBK” ,另一種是設(shè)置環(huán)境變量“export PGCLIENTENCODING=GBK”,看我的演示:

#psql -d dsc dsc=# insert into t values(1,'中國'); ERROR: invalid byte sequence for encoding "UTF8": 0xd6d0 HINT: This error can also happen if the byte sequence does not match the encoding expected by the server, which is controlled by "client_encoding". dsc=# show client_encoding; client_encoding -----------------UTF8 (1 row) dsc=# \encoding GBK dsc=# show client_encoding;client_encoding -----------------GBK (1 row) dsc=# insert into t values(1,'中國'); INSERT 0 1 dsc=# commit; WARNING: there is no transaction in progress COMMIT dsc=# select * from t;id | name ----+------1 | 中國 (1 row) [postgres@dsc ~]$ export PGCLIENTENCODING=GBK [postgres@dsc ~]$ psql psql: FATAL: conversion between GBK and LATIN1 is not supported [postgres@dsc ~]$ psql -d dsc psql (8.4.3) Type "help" for help. dsc=# select * from t; id | name ----+------ 1 | 中國 (1 row) dsc=# insert into t values(2,'我的中國'); INSERT 0 1 dsc=# select * from t; id | name ----+---------- 1 | 中國 2 | 我的中國 (2 rows)

方法二:設(shè)置終端的編碼為UTF8:

[postgres@dsc ~]$ export LANG=zh_CN.UTF8

然后修改終端軟件的字符集編碼,我使用的是SecureCRT,修改方法為:
Option->Session Option->外觀->字符編碼,把那個下拉框的內(nèi)容改成“UTF8”:

然后再插入數(shù)據(jù)測試:

[postgres@dsc ~]$ psql -d dsc psql (8.4.3) Type "help" for help. dsc=# select * from t; id | name ----+---------- 1 | 中國 2 | 我的中國 (2 rows) dsc=# insert into t values(3,'我的中國'); INSERT 0 1 dsc=# select * from t; id | name ----+---------- 1 | 中國 2 | 我的中國 3 | 我的中國 (3 rows)

總結(jié)

以上是生活随笔為你收集整理的PostgreSQL字符集问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。