第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 psql 插入 postgres 數(shù)據(jù)庫時的特殊字符

使用 psql 插入 postgres 數(shù)據(jù)庫時的特殊字符

PHP
森林海 2021-12-24 10:08:07
我嘗試將特殊字符“?”與 psql 添加到 varchar 字段,但沒有成功。從 php 應(yīng)用程序它可以工作(php 用戶為 iso8859-1)。db 的設(shè)置是:encoding = LATIN1collation = fi_FIcharacter type = fi_FIclient both UTF8 & LATIN1 (on commandline PGCLIENTENCODING=LATIN1 or PGCLIENTENCODING=UTF8)從表中選擇顯示客戶端何時為 UTF8locationx \u0086如何將值從 psql 添加到數(shù)據(jù)庫?以下都不起作用。update tablex set field1 = 'locationY' || '?'update tablex set field1 = 'locationY' || U&'\86'給出錯誤信息。ERROR:  character with byte sequence 0xe2 0x80 0xa0 in encoding "UTF8" has no equivalent in encoding "LATIN1"ERROR:  invalid Unicode escape value at or near "\86' "如果我查看我的 PHP 應(yīng)用程序\x6c6f636174696f6e5986輸入的數(shù)據(jù),字節(jié)是,但是當(dāng)我輸入數(shù)據(jù)時psql,字節(jié)是\x6c6f636174696f6e59e280a0.
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經(jīng)驗 獲得超8個贊

它不適用于 PHP 或psql,因為該字符?在 LATIN-1 編碼中不存在。您只是無法將其存儲在數(shù)據(jù)庫中。

讓我解釋一下發(fā)生了什么。

  • 如果您的客戶端編碼是LATIN1并且您輸入psql

    INSERT INTO ... VALUES ('locationY?');

    成功存儲,因為您的終端設(shè)置為 UTF-8。所以?你輸入的實際上是三個字節(jié):\xE280A0,它們被解釋和存儲為三個單字節(jié)字符。

  • 如果您的客戶端編碼是UTF8并且您輸入psql

    同樣的insert會報錯,因為輸入時輸入的三個字節(jié)?會被正確解釋為dagger字符,而PostgreSQL嘗試將字符轉(zhuǎn)換為 時會報錯LATIN

    ERROR:  character with byte sequence 0xe2 0x80 0xa0 in encoding "UTF8" has no equivalent in encoding "LATIN1"
  • 使用 PHP,您的客戶端編碼可能設(shè)置為LATIN1,而 PHP 程序?qū)嶋H上使用的是 WINDOWS-1252 編碼。

    然后?由單個字節(jié)表示\x86。這是由 PostgreSQL 在LATIN1編碼中解釋的,它意味著完全不同的東西,即“所選區(qū)域的開始”控制字符U+0086

    現(xiàn)在,當(dāng)您的 PHP 程序讀回該字符時,一切似乎都正常工作,但數(shù)據(jù)庫實際上存儲的字符與您預(yù)期的不同。

    您會注意到,只要您嘗試通過任何其他方式(例如在您的psql控制臺上)選擇該值。那里的值將呈現(xiàn)為

    locationY\u0086

這是如何使事情正常工作的解決方案:

  • 創(chuàng)建一個帶有UTF8編碼的新數(shù)據(jù)庫。

  • 轉(zhuǎn)儲舊數(shù)據(jù)庫

    pg_dump -F p -E LATIN1 dbname
  • 手動編輯轉(zhuǎn)儲并更改行

    SET client_encoding = 'LATIN1';

    SET client_encoding = 'WIN1252';
  • 將轉(zhuǎn)儲加載到新數(shù)據(jù)庫中psql。

  • client_encoding您的 PHP 應(yīng)用程序更改為WIN1252并開始使用新數(shù)據(jù)庫。


查看完整回答
反對 回復(fù) 2021-12-24
  • 1 回答
  • 0 關(guān)注
  • 560 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號