8.3. СимволÑнÑе ÑипÑ
ТаблиÑа 8.4. СимволÑнÑе ÑипÑ
| ÐÐ¼Ñ | ÐпиÑание |
|---|---|
character varying(, varchar( | ÑÑÑока огÑаниÑенной пеÑеменной Ð´Ð»Ð¸Ð½Ñ |
character(, char( | ÑÑÑока ÑикÑиÑованной длинÑ, Ð´Ð¾Ð¿Ð¾Ð»Ð½ÐµÐ½Ð½Ð°Ñ Ð¿Ñобелами |
text | ÑÑÑока неогÑаниÑенной пеÑеменной Ð´Ð»Ð¸Ð½Ñ |
РТаблиÑе 8.4 пеÑеÑиÑÐ»ÐµÐ½Ñ ÑимволÑнÑе ÑÐ¸Ð¿Ñ Ð¾Ð±Ñего назнаÑениÑ, доÑÑÑпнÑе в Postgres Pro.
SQL опÑеделÑÐµÑ Ð´Ð²Ð° оÑновнÑÑ
ÑимволÑнÑÑ
Ñипа: character varying( и n)character(, где n)n â положиÑелÑное ÑиÑло. Ðба ÑÑи Ñипа могÑÑ Ñ
ÑаниÑÑ ÑекÑÑовÑе ÑÑÑоки длиной до n Ñимволов (не байÑ). ÐопÑÑка ÑоÑ
ÑаниÑÑ Ð² ÑÑолбÑе Ñакого Ñипа более длиннÑÑ ÑÑÑÐ¾ÐºÑ Ð¿ÑиведÑÑ Ðº оÑибке, еÑли ÑолÑко вÑе лиÑние ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð½Ðµ ÑвлÑÑÑÑÑ Ð¿Ñобелами (Ñогда они бÑдÑÑ ÑÑеÑÐµÐ½Ñ Ð´Ð¾ макÑималÑно допÑÑÑимой длинÑ). (ÐÑо неÑколÑко ÑÑÑанное иÑклÑÑение пÑодикÑовано ÑÑандаÑÑом SQL.) ÐÑли длина ÑоÑ
ÑанÑемой ÑÑÑоки оказÑваеÑÑÑ Ð¼ÐµÐ½ÑÑе обÑÑвленной, знаÑÐµÐ½Ð¸Ñ Ñипа character бÑдÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑÑ Ð¿Ñобелами; а Ñип character varying пÑоÑÑо ÑоÑ
ÑÐ°Ð½Ð¸Ñ ÐºÐ¾ÑоÑкÑÑ ÑÑÑокÑ.
ÐÑи попÑÑке Ñвно пÑивеÑÑи знаÑение к ÑÐ¸Ð¿Ñ character varying( или n)character(, ÑаÑÑÑ ÑÑÑоки, вÑÑ
одÑÑÐ°Ñ Ð·Ð° гÑаниÑÑ Ð² n)n Ñимволов, ÑдалÑеÑÑÑ, не вÑзÑÐ²Ð°Ñ Ð¾Ñибки. (ÐÑо Ñакже пÑодикÑовано ÑÑандаÑÑом SQL.)
ÐапиÑи varchar( и n)char( ÑвлÑÑÑÑÑ Ñинонимами n)character varying( и n)character( ÑооÑвеÑÑÑвенно. ÐÑли n)n задано, оно должно бÑÑÑ Ð±Ð¾Ð»ÑÑе нÑÐ»Ñ Ð¸ менÑÑе или Ñавно 10485760. ÐапиÑи character без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð»Ð¸Ð½Ñ ÑооÑвеÑÑÑвÑÐµÑ character(1). ÐÑли же длина не ÑказÑваеÑÑÑ Ð´Ð»Ñ character varying, ÑÑÐ¾Ñ Ñип бÑÐ´ÐµÑ Ð¿ÑинимаÑÑ ÑÑÑоки лÑбого ÑазмеÑа. ÐÑо поведение ÑвлÑеÑÑÑ ÑаÑÑиÑением Postgres Pro.
Ðомимо ÑÑого, Postgres Pro пÑÐµÐ´Ð»Ð°Ð³Ð°ÐµÑ Ñип text, в коÑоÑом можно Ñ
ÑаниÑÑ ÑÑÑоки пÑоизволÑной длинÑ. ХоÑÑ Ñип text не опиÑан в ÑÑандаÑÑе SQL, его поддеÑживаÑÑ Ð¸ некоÑоÑÑе дÑÑгие СУÐÐ SQL.
ÐнаÑÐµÐ½Ð¸Ñ Ñипа character ÑизиÑеÑки дополнÑÑÑÑÑ Ð¿Ñобелами до n Ñимволов и Ñ
ÑанÑÑÑÑ, а заÑем оÑобÑажаÑÑÑÑ Ð² Ñаком виде. Ðднако пÑи ÑÑавнении двÑÑ
знаÑений Ñипа character дополнÑÑÑие пÑÐ¾Ð±ÐµÐ»Ñ ÑÑиÑаÑÑÑÑ Ð½ÐµÐ·Ð½Ð°ÑаÑими и игноÑиÑÑÑÑÑÑ. С пÑавилами ÑоÑÑиÑовки, где пÑобелÑнÑе ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ ÑвлÑÑÑÑÑ Ð·Ð½Ð°ÑаÑими, ÑÑо поведение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑиводиÑÑ Ðº неожиданнÑм ÑезÑлÑÑаÑам, напÑÐ¸Ð¼ÐµÑ SELECT 'a '::CHAR(2) collate "C" < E'a\n'::CHAR(2) веÑнÑÑ true (ÑÑловие бÑÐ´ÐµÑ Ð¸ÑÑиннÑм), Ñ
оÑÑ Ð² локали C Ñимвол пÑобела ÑÑиÑаеÑÑÑ Ð±Ð¾Ð»ÑÑе Ñимвола новой ÑÑÑоки. ÐÑи пÑиведении знаÑÐµÐ½Ð¸Ñ character к дÑÑÐ³Ð¾Ð¼Ñ ÑимволÑÐ½Ð¾Ð¼Ñ ÑÐ¸Ð¿Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð¾ÑбÑаÑÑваÑÑÑÑ. ÐамеÑÑÑе, ÑÑо ÑÑи пÑÐ¾Ð±ÐµÐ»Ñ Ð½ÐµÑÑÑ ÑмÑÑловÑÑ Ð½Ð°Ð³ÑÑÐ·ÐºÑ Ð² ÑипаÑ
character varying и text и в пÑовеÑкаÑ
по Ñаблонам, Ñо еÑÑÑ Ð² LIKE и ÑегÑлÑÑнÑÑ
вÑÑажениÑÑ
.
Ðакие именно ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ ÑÐ¾Ñ ÑаниÑÑ Ð² ÑÑÐ¸Ñ ÑÐ¸Ð¿Ð°Ñ Ð´Ð°Ð½Ð½ÑÑ , завиÑÐ¸Ñ Ð¾Ñ Ñого, какой Ð½Ð°Ð±Ð¾Ñ Ñимволов бÑл вÑбÑан пÑи Ñоздании Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ . Ðднако Ñимвол Ñ ÐºÐ¾Ð´Ð¾Ð¼ 0 (иногда назÑваемÑй NUL) ÑÐ¾Ñ ÑаниÑÑ Ð½ÐµÐ»ÑзÑ, вне завиÑимоÑÑи Ð¾Ñ Ð²ÑбÑанного набоÑа Ñимволов. Ðа подÑобноÑÑÑми обÑаÑиÑеÑÑ Ðº РазделÑ 22.3.
ÐÐ»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ ÐºÐ¾ÑоÑкой ÑÑÑоки (до 126 байÑ) ÑÑебÑеÑÑÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½Ð¸ÑелÑнÑй 1 Ð±Ð°Ð¹Ñ Ð¿Ð»ÑÑ ÑÐ°Ð·Ð¼ÐµÑ Ñамой ÑÑÑоки, вклÑÑÐ°Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð´Ð»Ñ Ñипа character. ÐÐ»Ñ ÑÑÑок длиннее ÑÑебÑеÑÑÑ Ð½Ðµ 1, а 4 дополниÑелÑнÑÑ
байÑа. СиÑÑема Ð¼Ð¾Ð¶ÐµÑ Ð°Ð²ÑомаÑиÑеÑки ÑжимаÑÑ Ð´Ð»Ð¸Ð½Ð½Ñе ÑÑÑоки, Ñак ÑÑо ÑизиÑеÑкий ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° диÑке Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¼ÐµÐ½ÑÑе. ÐÑÐµÐ½Ñ Ð´Ð»Ð¸Ð½Ð½Ñе ÑекÑÑовÑе ÑÑÑоки пеÑеноÑÑÑÑÑ Ð² оÑделÑнÑе ÑаблиÑÑ, ÑÑÐ¾Ð±Ñ Ð¾Ð½Ð¸ не замедлÑли ÑабоÑÑ Ñ Ð´ÑÑгими ÑÑолбÑами. РлÑбом ÑлÑÑае макÑималÑно возможнÑй ÑÐ°Ð·Ð¼ÐµÑ ÑÑÑоки ÑоÑÑавлÑÐµÑ Ð¾ÐºÐ¾Ð»Ð¾ 1 ÐÐ. (ÐопÑÑÑимое знаÑение n в обÑÑвлении Ñипа даннÑÑ
менÑÑе ÑÑого ÑиÑла. ÐÑо обÑÑÑнÑеÑÑÑ Ñем, ÑÑо в завиÑимоÑÑи Ð¾Ñ ÐºÐ¾Ð´Ð¸Ñовки каждÑй Ñимвол Ð¼Ð¾Ð¶ÐµÑ Ð·Ð°Ð½Ð¸Ð¼Ð°ÑÑ Ð½ÐµÑколÑко байÑ. ÐÑли Ð²Ñ Ð¶ÐµÐ»Ð°ÐµÑе ÑоÑ
ÑанÑÑÑ ÑÑÑоки без опÑеделÑнного пÑедела длинÑ, иÑполÑзÑйÑе ÑÐ¸Ð¿Ñ text или character varying без ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ Ð´Ð»Ð¸Ð½Ñ, а не задавайÑе какое-либо болÑÑое макÑималÑное знаÑение.)
ÐодÑказка
Ðо бÑÑÑÑодейÑÑÐ²Ð¸Ñ ÑÑи ÑÑи Ñипа пÑакÑиÑеÑки не оÑлиÑаÑÑÑÑ Ð´ÑÑг Ð¾Ñ Ð´ÑÑга, не ÑÑиÑÐ°Ñ Ð±Ð¾Ð»ÑÑего ÑазмеÑа Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð´Ð»Ñ Ñипа Ñ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑими пÑобелами и неÑколÑкиÑ
маÑиннÑÑ
опеÑаÑий Ð´Ð»Ñ Ð¿ÑовеÑки Ð´Ð»Ð¸Ð½Ñ Ð¿Ñи ÑоÑ
Ñанении ÑÑÑок в ÑÑолбÑе Ñ Ð¾Ð³ÑаниÑенной длиной. ХоÑÑ Ð² некоÑоÑÑÑ
СУÐÐ Ñип character( ÑабоÑÐ°ÐµÑ Ð±ÑÑÑÑее дÑÑгиÑ
, в Postgres Pro ÑÑо не Ñак; на деле n)character( обÑÑно оказÑваеÑÑÑ Ð¼ÐµÐ´Ð»ÐµÐ½Ð½ÐµÐµ оÑÑалÑнÑÑ
Ñипов из-за болÑÑего ÑазмеÑа даннÑÑ
и более медленной ÑоÑÑиÑовки. РболÑÑинÑÑве ÑлÑÑаев вмеÑÑо него лÑÑÑе пÑименÑÑÑ n)text или character varying.
Ðа инÑоÑмаÑией о ÑинÑакÑиÑе ÑÑÑоковÑÑ ÐºÐ¾Ð½ÑÑÐ°Ð½Ñ Ð¾Ð±ÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 4.1.2.1, а об имеÑÑÐ¸Ñ ÑÑ Ð¾Ð¿ÐµÑаÑоÑÐ°Ñ Ð¸ ÑÑнкÑиÑÑ Ð²Ñ Ð¼Ð¾Ð¶ÐµÑе ÑзнаÑÑ Ð² Ðлаве 9.
ÐÑÐ¸Ð¼ÐµÑ 8.1. ÐÑполÑзование ÑимволÑнÑÑ Ñипов
CREATE TABLE test1 (a character(4));
INSERT INTO test1 VALUES ('ok');
SELECT a, char_length(a) FROM test1; -- (1)
a | char_length
------+-------------
ok | 2
CREATE TABLE test2 (b varchar(5));
INSERT INTO test2 VALUES ('ok');
INSERT INTO test2 VALUES ('good ');
INSERT INTO test2 VALUES ('too long');
ÐШÐÐÐÐ: знаÑение не ÑмеÑаеÑÑÑ Ð² Ñип character varying(5)
INSERT INTO test2 VALUES ('too long'::varchar(5)); -- Ñвное ÑÑеÑение
SELECT b, char_length(b) FROM test2;
b | char_length
-------+-------------
ok | 2
good | 5
too l | 5
ФÑнкÑÐ¸Ñ |
Ð Postgres Pro еÑÑÑ ÐµÑÑ Ð´Ð²Ð° ÑимволÑнÑÑ
Ñипа ÑикÑиÑованной длинÑ, пÑиведÑннÑе в ТаблиÑе 8.5. Ðни пÑедназнаÑÐµÐ½Ñ Ð½Ðµ Ð´Ð»Ñ ÑиÑокого пÑименениÑ, а Ð´Ð»Ñ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑолÑко во внÑÑÑенниÑ
ÑиÑÑемнÑÑ
каÑалогаÑ
. Тип name Ñоздан Ð´Ð»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð¸Ð´ÐµÐ½ÑиÑикаÑоÑов. РнаÑÑоÑÑее вÑÐµÐ¼Ñ ÐµÐ³Ð¾ длина ÑоÑÑавлÑÐµÑ 64 байÑа (63 ASCII-Ñимвола плÑÑ Ð·Ð°Ð²ÐµÑÑаÑÑий нолÑ), но в иÑÑ
одном коде C она задаÑÑÑÑ ÐºÐ¾Ð½ÑÑанÑой NAMEDATALEN. ÐÑа конÑÑанÑа опÑеделÑеÑÑÑ Ð²Ð¾ вÑÐµÐ¼Ñ ÐºÐ¾Ð¼Ð¿Ð¸Ð»ÑÑии (и ÐµÑ Ð¼Ð¾Ð¶Ð½Ð¾ менÑÑÑ Ð² оÑобÑÑ
ÑлÑÑаÑÑ
), а кÑоме Ñого, макÑималÑÐ½Ð°Ñ Ð´Ð»Ð¸Ð½Ð° по ÑмолÑÐ°Ð½Ð¸Ñ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÑвелиÑена в ÑледÑÑÑиÑ
веÑÑиÑÑ
. Тип "char" (обÑаÑиÑе внимание на кавÑÑки) оÑлиÑаеÑÑÑ Ð¾Ñ char(1) Ñем, ÑÑо он Ð·Ð°Ð½Ð¸Ð¼Ð°ÐµÑ ÑолÑко один Ð±Ð°Ð¹Ñ Ñ
ÑанилиÑа и поÑÑÐ¾Ð¼Ñ Ð¼Ð¾Ð¶ÐµÑ Ñ
ÑаниÑÑ ÑолÑко один ASCII-Ñимвол. Ðн иÑполÑзÑеÑÑÑ Ð² ÑиÑÑемнÑÑ
каÑалогаÑ
Ð´Ð»Ñ Ð¿ÑоÑÑÑÑ
пеÑеÑиÑлений.
ТаблиÑа 8.5. СпеÑиалÑнÑе ÑимволÑнÑе ÑипÑ
| ÐÐ¼Ñ | Ð Ð°Ð·Ð¼ÐµÑ | ÐпиÑание |
|---|---|---|
"char" | 1 Ð±Ð°Ð¹Ñ | внÑÑÑенний однобайÑнÑй Ñип |
name | 64 байÑа | внÑÑÑенний Ñип Ð´Ð»Ñ Ð¸Ð¼Ñн обÑекÑов |