91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL DBA(103) - pgAdmin(Don't do this:Encoding)

發布時間:2020-08-10 07:59:16 來源:ITPUB博客 閱讀:188 作者:husthxd 欄目:關系型數據庫

no zuo no die系列,來自于pg的wiki。

這是第一部分,關于數據庫編碼,不要使用SQL_ASCII字符集編碼。原因是:

While the name suggests that this encoding is in some meaningful way related to ASCII, it is not. Instead, it simply forbids the use of NUL bytes.
More importantly, SQL_ASCII means “no conversions” for the purpose of all encoding conversion functions. That is to say, the original bytes are simply treated as being in the new encoding, subject to validity checks, without any regard for what they mean. Unless extreme care is taken, an SQL_ASCII database will usually end up storing a mixture of many different encodings with no way to recover the original characters reliably.

PostgreSQL中的SQL_ASCII類似于Oracle的單字節字符集如ISO8859P1,可存儲除0x00外(Oracle ISO8859P1字符集可存儲0x00)的其他所有字節碼(即0x01-0xFF)。

下面的實驗,創建SQL_ASCII的數據庫,分別通過Windows和Linux客戶端訪問數據庫并插入數據來驗證不同客戶端字符編碼的情況下,SQL_ASCII字符集下的數據存儲方式。

創建數據庫
使用create database創建數據庫

[local]:5432 pg12@testdb=# \help create database
Command:     CREATE DATABASE
Description: create a new database
Syntax:
CREATE DATABASE name
    [ [ WITH ] [ OWNER [=] user_name ]
           [ TEMPLATE [=] template ]
           [ ENCODING [=] encoding ]
           [ LC_COLLATE [=] lc_collate ]
           [ LC_CTYPE [=] lc_ctype ]
           [ TABLESPACE [=] tablespace_name ]
           [ ALLOW_CONNECTIONS [=] allowconn ]
           [ CONNECTION LIMIT [=] connlimit ]
           [ IS_TEMPLATE [=] istemplate ] ]
URL: https://www.postgresql.org/docs/12/sql-createdatabase.html
[local]:5432 pg12@testdb=# create database asciidb with encoding=sql_ascii;
ERROR:  new encoding (SQL_ASCII) is incompatible with the encoding of the template database (UTF8)
HINT:  Use the same encoding as in the template database, or use template0 as template.
Time: 3.200 ms
[local]:5432 pg12@testdb=# create database asciidb with encoding=sql_ascii template=template0;
CREATE DATABASE
Time: 633.163 ms
[local]:5432 pg12@testdb=# \l
                          List of databases
   Name    | Owner | Encoding  | Collate | Ctype | Access privileges 
-----------+-------+-----------+---------+-------+-------------------
 asciidb   | pg12  | SQL_ASCII | C       | C     | 
 monitor   | pg12  | UTF8      | C       | C     | 
 postgres  | pg12  | UTF8      | C       | C     | 
 template0 | pg12  | UTF8      | C       | C     | =c/pg12          +
           |       |           |         |       | pg12=CTc/pg12
 template1 | pg12  | UTF8      | C       | C     | =c/pg12          +
           |       |           |         |       | pg12=CTc/pg12
 testdb    | pg12  | UTF8      | C       | C     | 
(6 rows)

插入數據
Linux

[local]:5432 pg12@testdb=# \c asciidb
You are now connected to database "asciidb" as user "pg12".
[local]:5432 pg12@asciidb=# show client_encoding;
 client_encoding 
-----------------
 UTF8
(1 row)
Time: 0.486 ms
[local]:5432 pg12@asciidb=# create table t1(id int,c1 varchar(20));
CREATE TABLE
Time: 9.641 ms
[local]:5432 pg12@asciidb=# set client_encoding=sql_ascii;
SET
Time: 1.114 ms
[local]:5432 pg12@asciidb=# insert into t1 values(1,'測試');
INSERT 0 1
Time: 1.867 ms
[local]:5432 pg12@asciidb=#

Windows

192.168.26.28:5432 pg12@asciidb=# show client_encoding;
 client_encoding
-----------------
 GBK
(1 row)
Time: 1.953 ms
192.168.26.28:5432 pg12@asciidb=# set client_encoding=sql_ascii;
SET
Time: 1.753 ms
192.168.26.28:5432 pg12@asciidb=# insert into t1 values(2,'測試');
INSERT 0 1
Time: 4.439 ms
192.168.26.28:5432 pg12@asciidb=#

查詢數據
分別在Linux客戶端和Windows客戶端下查詢數據
Linux

[local]:5432 pg12@asciidb=# select id,c1,c1::bytea from t1;
 id |   c1   |       c1       
----+--------+----------------
  1 | 測試 | \xe6b58be8af95
  2 | 2?   | \xb2e2cad4
(2 rows)
Time: 2.254 ms
[local]:5432 pg12@asciidb=#

Windows

192.168.26.28:5432 pg12@asciidb=# select id,c1,c1::bytea from t1;
 id |   c1   |       c1
----+--------+----------------
  1 | 嫻嬭瘯 | \xe6b58be8af95
  2 | 測試   | \xb2e2cad4
(2 rows)
Time: 3.555 ms
192.168.26.28:5432 pg12@asciidb=#

可以看到,在Linux下插入的數據以UTF8編碼,而在Windows平臺下插入的數據則以GBK編碼,除了ASCII 0外的其他字符,“照單全收”。

[local]:5432 pg12@asciidb=# insert into t1 values (3, E'\xe6\xb5\x8b');  
INSERT 0 1
Time: 1.340 ms
[local]:5432 pg12@asciidb=# insert into t1 values (4, E'\xe6\xb5\x00');  
ERROR:  invalid byte sequence for encoding "SQL_ASCII": 0x00
Time: 1.164 ms
[local]:5432 pg12@asciidb=# select * from t1;
 id |   c1   
----+--------
  1 | 測試
  2 | 2?
  3 | 測
(3 rows)
Time: 2.117 ms
[local]:5432 pg12@asciidb=#

參考資料
PostgreSQL Server Encoding sql_ascii attention
Character Set Support
Don’t Do This

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蓬安县| 西林县| 应城市| 弋阳县| 天台县| 汨罗市| 西乌珠穆沁旗| 雷波县| 舟曲县| 赤城县| 哈尔滨市| 偃师市| 宜春市| 沂水县| 三门峡市| 泰顺县| 尼勒克县| 蒲城县| 丰城市| 娄烦县| 阳东县| 江都市| 瓮安县| 武城县| 泸水县| 锦州市| 远安县| 府谷县| 廊坊市| 肇州县| 钟山县| 田东县| 海阳市| 西林县| 乐平市| 聊城市| 建湖县| 凉城县| 永济市| 乾安县| 本溪市|