Postgresql
對於類型字元變化(5),如何更正此值太長?
我創建了一個小型開發數據庫以供練習。它有一個
cities
帶有列cityname
和的表state
。裡面有“cityname
辛辛那提”,長名字對嗎?mytestdb=# SELECT * FROM cities; cityid | cityname | state --------+------------+------- 12345 | Cincinnati | Ohio (1 row)
我不清楚在嘗試添加“舊金山”時如何以及為什麼會收到此錯誤消息。
mytestdb=# INSERT INTO cities VALUES ('San Francisco','CA'); ERROR: value too long for type character varying(5)
所以首先,有什麼區別..
SELECT x, length(x) FROM ( VALUES ('Cincinnati'), ('San Francisco') ) AS t(x);
這是輸出
x | length ---------------+-------- Cincinnati | 10 San Francisco | 13
所以..
- 舊金山長了三個字元。
- 他們都超過5個字元。
- 那不可能是問題。
而且,如果
Cincinnati
在 a 中varchar(5)
,它必須被截斷。所以問題出在你的
cityid
. 它是varchar(5)
。你可能希望它成為一個int
無論如何 - 它會更緊湊和更快。所以ALTER
表並修復它。ALTER TABLE cities ALTER COLUMN cityid SET DATA TYPE int USING cityid::int;
作為旁注……也許有一天PostgreSQL會在錯誤消息中說出列名。在那之前,至少它比 SQL Server 更冗長。