日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

PostgreSQL字符集问题

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

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

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

問題的原因:
默認(rèn)情況下,PostgreSQL是不轉(zhuǎn)換字符集的,如果你的數(shù)據(jù)庫是UTF8的字符集,一般終端的中文字符集會(huì)設(shè)置為GBK,或en_US(查看終端的字符集可以看LANG環(huán)境變量的設(shè)置),所以你輸入的中文是GBK的編碼,這個(gè)編碼不經(jīng)轉(zhuǎn)換的存入數(shù)據(jù)庫中,而數(shù)據(jù)庫是UTF8的,PostgreSQL一看沒有這樣的UTF8編碼,所以當(dāng)然報(bào)錯(cuò)了。
解決方法為:
方法一:設(shè)置postgresql的客戶端編碼為GBK,這時(shí)PostgreSQL就知道輸入的內(nèi)容是GBK編碼的,這樣PostgreSQL數(shù)據(jù)庫會(huì)自動(dòng)做字符集的轉(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->外觀->字符編碼,把那個(gè)下拉框的內(nèi)容改成“UTF8”:

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

[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字符集问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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