diff --git a/src/include/catalog/pg_operator.dat b/src/include/catalog/pg_operator.dat
index fa7dc96..1b430ef 100644
--- a/src/include/catalog/pg_operator.dat
+++ b/src/include/catalog/pg_operator.dat
@@ -1166,15 +1166,6 @@
   oprnegate => '<>(bpchar,bpchar)', oprcode => 'bpchareq', oprrest => 'eqsel',
   oprjoin => 'eqjoinsel' },
 
-{ oid => '1055', oid_symbol => 'OID_BPCHAR_REGEXEQ_OP',
-  descr => 'matches regular expression, case-sensitive',
-  oprname => '~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
-  oprnegate => '!~(bpchar,text)', oprcode => 'bpcharregexeq',
-  oprrest => 'regexeqsel', oprjoin => 'regexeqjoinsel' },
-{ oid => '1056', descr => 'does not match regular expression, case-sensitive',
-  oprname => '!~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
-  oprnegate => '~(bpchar,text)', oprcode => 'bpcharregexne',
-  oprrest => 'regexnesel', oprjoin => 'regexnejoinsel' },
 { oid => '1057', descr => 'not equal',
   oprname => '<>', oprleft => 'bpchar', oprright => 'bpchar',
   oprresult => 'bool', oprcom => '<>(bpchar,bpchar)',
@@ -1444,15 +1435,6 @@
   oprname => '!~~', oprleft => 'text', oprright => 'text', oprresult => 'bool',
   oprnegate => '~~(text,text)', oprcode => 'textnlike', oprrest => 'nlikesel',
   oprjoin => 'nlikejoinsel' },
-{ oid => '1211', oid_symbol => 'OID_BPCHAR_LIKE_OP',
-  descr => 'matches LIKE expression',
-  oprname => '~~', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
-  oprnegate => '!~~(bpchar,text)', oprcode => 'bpcharlike',
-  oprrest => 'likesel', oprjoin => 'likejoinsel' },
-{ oid => '1212', descr => 'does not match LIKE expression',
-  oprname => '!~~', oprleft => 'bpchar', oprright => 'text',
-  oprresult => 'bool', oprnegate => '~~(bpchar,text)', oprcode => 'bpcharnlike',
-  oprrest => 'nlikesel', oprjoin => 'nlikejoinsel' },
 
 # case-insensitive regex hacks
 { oid => '1226', oid_symbol => 'OID_NAME_ICREGEXEQ_OP',
@@ -1475,17 +1457,6 @@
   oprname => '!~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
   oprnegate => '~*(text,text)', oprcode => 'texticregexne',
   oprrest => 'icregexnesel', oprjoin => 'icregexnejoinsel' },
-{ oid => '1234', oid_symbol => 'OID_BPCHAR_ICREGEXEQ_OP',
-  descr => 'matches regular expression, case-insensitive',
-  oprname => '~*', oprleft => 'bpchar', oprright => 'text', oprresult => 'bool',
-  oprnegate => '!~*(bpchar,text)', oprcode => 'bpcharicregexeq',
-  oprrest => 'icregexeqsel', oprjoin => 'icregexeqjoinsel' },
-{ oid => '1235',
-  descr => 'does not match regular expression, case-insensitive',
-  oprname => '!~*', oprleft => 'bpchar', oprright => 'text',
-  oprresult => 'bool', oprnegate => '~*(bpchar,text)',
-  oprcode => 'bpcharicregexne', oprrest => 'icregexnesel',
-  oprjoin => 'icregexnejoinsel' },
 
 # timestamptz operators
 { oid => '1320', descr => 'equal',
@@ -2034,17 +2005,6 @@
   oprname => '!~~*', oprleft => 'text', oprright => 'text', oprresult => 'bool',
   oprnegate => '~~*(text,text)', oprcode => 'texticnlike',
   oprrest => 'icnlikesel', oprjoin => 'icnlikejoinsel' },
-{ oid => '1629', oid_symbol => 'OID_BPCHAR_ICLIKE_OP',
-  descr => 'matches LIKE expression, case-insensitive',
-  oprname => '~~*', oprleft => 'bpchar', oprright => 'text',
-  oprresult => 'bool', oprnegate => '!~~*(bpchar,text)',
-  oprcode => 'bpchariclike', oprrest => 'iclikesel',
-  oprjoin => 'iclikejoinsel' },
-{ oid => '1630', descr => 'does not match LIKE expression, case-insensitive',
-  oprname => '!~~*', oprleft => 'bpchar', oprright => 'text',
-  oprresult => 'bool', oprnegate => '~~*(bpchar,text)',
-  oprcode => 'bpcharicnlike', oprrest => 'icnlikesel',
-  oprjoin => 'icnlikejoinsel' },
 
 # NUMERIC type - OID's 1700-1799
 { oid => '1751', descr => 'negate',
diff --git a/src/include/catalog/pg_proc.dat b/src/include/catalog/pg_proc.dat
index 58ea5b9..54a2de2 100644
--- a/src/include/catalog/pg_proc.dat
+++ b/src/include/catalog/pg_proc.dat
@@ -3360,13 +3360,6 @@
   proname => 'mul_d_interval', prorettype => 'interval',
   proargtypes => 'float8 interval', prosrc => 'mul_d_interval' },
 
-{ oid => '1631',
-  proname => 'bpcharlike', prosupport => 'textlike_support',
-  prorettype => 'bool', proargtypes => 'bpchar text', prosrc => 'textlike' },
-{ oid => '1632',
-  proname => 'bpcharnlike', prorettype => 'bool', proargtypes => 'bpchar text',
-  prosrc => 'textnlike' },
-
 { oid => '1633',
   proname => 'texticlike', prosupport => 'texticlike_support',
   prorettype => 'bool', proargtypes => 'text text', prosrc => 'texticlike' },
@@ -3386,26 +3379,6 @@
   proname => 'like_escape', prorettype => 'text', proargtypes => 'text text',
   prosrc => 'like_escape' },
 
-{ oid => '1656',
-  proname => 'bpcharicregexeq', prosupport => 'texticregexeq_support',
-  prorettype => 'bool', proargtypes => 'bpchar text',
-  prosrc => 'texticregexeq' },
-{ oid => '1657',
-  proname => 'bpcharicregexne', prorettype => 'bool',
-  proargtypes => 'bpchar text', prosrc => 'texticregexne' },
-{ oid => '1658',
-  proname => 'bpcharregexeq', prosupport => 'textregexeq_support',
-  prorettype => 'bool', proargtypes => 'bpchar text', prosrc => 'textregexeq' },
-{ oid => '1659',
-  proname => 'bpcharregexne', prorettype => 'bool',
-  proargtypes => 'bpchar text', prosrc => 'textregexne' },
-{ oid => '1660',
-  proname => 'bpchariclike', prosupport => 'texticlike_support',
-  prorettype => 'bool', proargtypes => 'bpchar text', prosrc => 'texticlike' },
-{ oid => '1661',
-  proname => 'bpcharicnlike', prorettype => 'bool',
-  proargtypes => 'bpchar text', prosrc => 'texticnlike' },
-
 # Oracle Compatibility Related Functions - By Edmund Mergl <E.Mergl@bawue.de>
 { oid => '868', descr => 'position of substring',
   proname => 'strpos', prorettype => 'int4', proargtypes => 'text text',
diff --git a/src/test/regress/expected/char.out b/src/test/regress/expected/char.out
index 991c771..db2624d 100644
--- a/src/test/regress/expected/char.out
+++ b/src/test/regress/expected/char.out
@@ -1,8 +1,10 @@
 --
 -- CHAR
 --
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
+-- This type, known internally as bpchar, is the same as varchar or text
+-- except that trailing blanks are considered insignificant in comparisons
+-- (so we strip them when converting to text), and we blank-pad to the
+-- declared length if there is one.
 SELECT char 'c' = char 'c' AS true;
  true 
 ------
@@ -120,3 +122,50 @@ SELECT '' AS four, * FROM CHAR_TBL;
       | abcd
 (4 rows)
 
+--
+-- Check regex and LIKE comparisons
+--
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'a';
+  f1  
+------
+ a   
+(1 row)
+
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'ab%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ILIKE 'AB%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ 'b';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab$';
+  f1  
+------
+ ab  
+(1 row)
+
diff --git a/src/test/regress/expected/char_1.out b/src/test/regress/expected/char_1.out
index 8eff75a..758f9ef 100644
--- a/src/test/regress/expected/char_1.out
+++ b/src/test/regress/expected/char_1.out
@@ -1,8 +1,10 @@
 --
 -- CHAR
 --
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
+-- This type, known internally as bpchar, is the same as varchar or text
+-- except that trailing blanks are considered insignificant in comparisons
+-- (so we strip them when converting to text), and we blank-pad to the
+-- declared length if there is one.
 SELECT char 'c' = char 'c' AS true;
  true 
 ------
@@ -120,3 +122,50 @@ SELECT '' AS four, * FROM CHAR_TBL;
       | abcd
 (4 rows)
 
+--
+-- Check regex and LIKE comparisons
+--
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'a';
+  f1  
+------
+ a   
+(1 row)
+
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'ab%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ILIKE 'AB%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ 'b';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab$';
+  f1  
+------
+ ab  
+(1 row)
+
diff --git a/src/test/regress/expected/char_2.out b/src/test/regress/expected/char_2.out
index f54736c..566ba1e 100644
--- a/src/test/regress/expected/char_2.out
+++ b/src/test/regress/expected/char_2.out
@@ -1,8 +1,10 @@
 --
 -- CHAR
 --
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
+-- This type, known internally as bpchar, is the same as varchar or text
+-- except that trailing blanks are considered insignificant in comparisons
+-- (so we strip them when converting to text), and we blank-pad to the
+-- declared length if there is one.
 SELECT char 'c' = char 'c' AS true;
  true 
 ------
@@ -120,3 +122,50 @@ SELECT '' AS four, * FROM CHAR_TBL;
       | abcd
 (4 rows)
 
+--
+-- Check regex and LIKE comparisons
+--
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'a';
+  f1  
+------
+ a   
+(1 row)
+
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'ab%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ILIKE 'AB%';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ 'b';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab';
+  f1  
+------
+ ab  
+ abcd
+ abcd
+(3 rows)
+
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab$';
+  f1  
+------
+ ab  
+(1 row)
+
diff --git a/src/test/regress/sql/char.sql b/src/test/regress/sql/char.sql
index 235ec62..eed81e7 100644
--- a/src/test/regress/sql/char.sql
+++ b/src/test/regress/sql/char.sql
@@ -2,8 +2,10 @@
 -- CHAR
 --
 
--- fixed-length by value
--- internally passed by value if <= 4 bytes in storage
+-- This type, known internally as bpchar, is the same as varchar or text
+-- except that trailing blanks are considered insignificant in comparisons
+-- (so we strip them when converting to text), and we blank-pad to the
+-- declared length if there is one.
 
 SELECT char 'c' = char 'c' AS true;
 
@@ -73,3 +75,14 @@ INSERT INTO CHAR_TBL (f1) VALUES ('abcde');
 INSERT INTO CHAR_TBL (f1) VALUES ('abcd    ');
 
 SELECT '' AS four, * FROM CHAR_TBL;
+
+--
+-- Check regex and LIKE comparisons
+--
+
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'a';
+SELECT * FROM CHAR_TBL WHERE f1 LIKE 'ab%';
+SELECT * FROM CHAR_TBL WHERE f1 ILIKE 'AB%';
+SELECT * FROM CHAR_TBL WHERE f1 ~ 'b';
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab';
+SELECT * FROM CHAR_TBL WHERE f1 ~ '^ab$';
