diff --git a/mysql-test/r/view.result b/mysql-test/r/view.result
index dcbd3b411fb7a08b604a1f9c48ee41ff7e2c1f01..7a76ae1db03e79899186f134c93d46d8dd24993f 100644
--- a/mysql-test/r/view.result
+++ b/mysql-test/r/view.result
@@ -472,11 +472,11 @@ create view v3 (x,y,z) as select b, a, b from t1;
 create view v4 (x,y,z) as select c+1, b, a from t1;
 create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 insert into v3 values (-60,4,30);
-ERROR HY000: The target table v3 of the INSERT is not updatable
+ERROR HY000: The target table v3 of the INSERT is not insertable-into
 insert into v4 values (-60,4,30);
-ERROR HY000: The target table v4 of the INSERT is not updatable
+ERROR HY000: The target table v4 of the INSERT is not insertable-into
 insert into v5 values (-60,4,30);
-ERROR HY000: The target table v5 of the INSERT is not updatable
+ERROR HY000: The target table v5 of the INSERT is not insertable-into
 insert into v1 values (-60,4,30);
 insert into v1 (z,y,x) values (50,6,-100);
 insert into v2 values (5,40);
@@ -499,11 +499,11 @@ create view v3 (x,y,z) as select b, a, b from t1;
 create view v4 (x,y,z) as select c+1, b, a from t1;
 create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 insert into v3 select c, b, a from t2;
-ERROR HY000: The target table v3 of the INSERT is not updatable
+ERROR HY000: The target table v3 of the INSERT is not insertable-into
 insert into v4 select c, b, a from t2;
-ERROR HY000: The target table v4 of the INSERT is not updatable
+ERROR HY000: The target table v4 of the INSERT is not insertable-into
 insert into v5 select c, b, a from t2;
-ERROR HY000: The target table v5 of the INSERT is not updatable
+ERROR HY000: The target table v5 of the INSERT is not insertable-into
 insert into v1 select c, b, a from t2;
 insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
 insert into v2 select b+1, a+10 from t2;
@@ -1352,14 +1352,14 @@ drop table t1;
 create table t1 (s1 smallint);
 create view v1 as select * from t1 where 20 < (select (s1) from t1);
 insert into v1 values (30);
-ERROR HY000: The target table v1 of the INSERT is not updatable
+ERROR HY000: The target table v1 of the INSERT is not insertable-into
 create view v2 as select * from t1;
 create view v3 as select * from t1 where 20 < (select (s1) from v2);
 insert into v3 values (30);
-ERROR HY000: The target table v3 of the INSERT is not updatable
+ERROR HY000: The target table v3 of the INSERT is not insertable-into
 create view v4 as select * from v2 where 20 < (select (s1) from t1);
 insert into v4 values (30);
-ERROR HY000: The target table v4 of the INSERT is not updatable
+ERROR HY000: The target table v4 of the INSERT is not insertable-into
 drop view v4, v3, v2, v1;
 drop table t1;
 create table t1 (a int);
@@ -2911,7 +2911,7 @@ INSERT INTO v2 VALUES (0);
 RETURN 0;
 END |
 SELECT f2();
-ERROR HY000: The target table v2 of the INSERT is not updatable
+ERROR HY000: The target table v2 of the INSERT is not insertable-into
 DROP FUNCTION f1;
 DROP FUNCTION f2;
 DROP VIEW v1, v2;
@@ -2935,6 +2935,13 @@ id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 2	SUBQUERY	t1	ALL	NULL	NULL	NULL	NULL	3	
 DROP VIEW v1;
 DROP TABLE t1;
+create table t1 (s1 int);
+create view v1 as select s1 as a, s1 as b from t1;
+insert into v1 values (1,1);
+ERROR HY000: The target table v1 of the INSERT is not insertable-into
+update v1 set a = 5;
+drop view v1;
+drop table t1;
 CREATE TABLE t1(pk int PRIMARY KEY);
 CREATE TABLE t2(pk int PRIMARY KEY, fk int, ver int, org int);
 CREATE ALGORITHM=MERGE VIEW v1 AS 
diff --git a/mysql-test/t/view.test b/mysql-test/t/view.test
index fcc27ee928a1e35529a9e522f57fbbad78d889bb..09ee734860664d355b9f079e786e4a3f8403b7e6 100644
--- a/mysql-test/t/view.test
+++ b/mysql-test/t/view.test
@@ -347,13 +347,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
 create view v4 (x,y,z) as select c+1, b, a from t1;
 create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 # try insert to VIEW with fields duplicate
--- error 1288
+-- error 1471
 insert into v3 values (-60,4,30);
 # try insert to VIEW with expression in SELECT list
--- error 1288
+-- error 1471
 insert into v4 values (-60,4,30);
 # try insert to VIEW using temporary table algorithm
--- error 1288
+-- error 1471
 insert into v5 values (-60,4,30);
 insert into v1 values (-60,4,30);
 insert into v1 (z,y,x) values (50,6,-100);
@@ -375,13 +375,13 @@ create view v3 (x,y,z) as select b, a, b from t1;
 create view v4 (x,y,z) as select c+1, b, a from t1;
 create algorithm=temptable view v5 (x,y,z) as select c, b, a from t1;
 # try insert to VIEW with fields duplicate
--- error 1288
+-- error 1471
 insert into v3 select c, b, a from t2;
 # try insert to VIEW with expression in SELECT list
--- error 1288
+-- error 1471
 insert into v4 select c, b, a from t2;
 # try insert to VIEW using temporary table algorithm
--- error 1288
+-- error 1471
 insert into v5 select c, b, a from t2;
 insert into v1 select c, b, a from t2;
 insert into v1 (z,y,x) select a+20,b+2,-100 from t2;
@@ -1249,14 +1249,14 @@ drop table t1;
 #
 create table t1 (s1 smallint);
 create view v1 as select * from t1 where 20 < (select (s1) from t1);
--- error 1288
+-- error 1471
 insert into v1 values (30);
 create view v2 as select * from t1;
 create view v3 as select * from t1 where 20 < (select (s1) from v2);
--- error 1288
+-- error 1471
 insert into v3 values (30);
 create view v4 as select * from v2 where 20 < (select (s1) from t1);
--- error 1288
+-- error 1471
 insert into v4 values (30);
 drop view v4, v3, v2, v1;
 drop table t1;
@@ -2830,7 +2830,7 @@ BEGIN
 END |
 delimiter ;|
 
---error ER_NON_UPDATABLE_TABLE
+--error ER_NON_INSERTABLE_TABLE
 SELECT f2();
 
 DROP FUNCTION f1;
@@ -2856,6 +2856,17 @@ EXPLAIN SELECT * FROM v1 t WHERE t.s1+1 < (SELECT MAX(t1.s1) FROM t1);
 DROP VIEW v1;
 DROP TABLE t1;
 
+#
+# Bug #5505: Wrong error message on INSERT into a view
+#
+create table t1 (s1 int);
+create view v1 as select s1 as a, s1 as b from t1;
+--error 1471
+insert into v1 values (1,1); 
+update v1 set a = 5;
+drop view v1;
+drop table t1;
+
 #
 # Bug #21646: view qith a subquery in ON expression 
 #
diff --git a/sql/share/errmsg.txt b/sql/share/errmsg.txt
index c90e771fd40eb43aa6b3d2fa9dafa54d256a7b8a..51b91ece468fa9e3c12b412b98df6932625648b7 100644
--- a/sql/share/errmsg.txt
+++ b/sql/share/errmsg.txt
@@ -5986,6 +5986,8 @@ ER_HOSTNAME
 	eng "host name"
 ER_WRONG_STRING_LENGTH
 	eng "String '%-.70s' is too long for %s (should be no longer than %d)"
+ER_NON_INSERTABLE_TABLE  
+	eng "The target table %-.100s of the %s is not insertable-into"
 ER_UNSUPORTED_LOG_ENGINE
         eng "This storage engine cannot be used for log tables""
 ER_BAD_LOG_STATEMENT
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index 9e3049d433bfe64bffba1fa5c967857b9a3ce037..a530c7f7fdc72ae1a5facef79917cfedc39eacf6 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -1461,8 +1461,11 @@ void update_non_unique_table_error(TABLE_LIST *update,
     */
     if (update->view)
     {
+      /* Issue the ER_NON_INSERTABLE_TABLE error for an INSERT */
       if (update->view == duplicate->view)
-        my_error(ER_NON_UPDATABLE_TABLE, MYF(0), update->alias, operation);
+        my_error(!strncmp(operation, "INSERT", 6) ?
+                 ER_NON_INSERTABLE_TABLE : ER_NON_UPDATABLE_TABLE, MYF(0),
+                 update->alias, operation);
       else
         my_error(ER_VIEW_PREVENT_UPDATE, MYF(0),
                  (duplicate->view ? duplicate->alias : update->alias),
diff --git a/sql/sql_insert.cc b/sql/sql_insert.cc
index 946a6233bc240e0411155b3274abe7108e53ca55..c0bc662875430c4858e33a7315384f1c72c0ec5d 100644
--- a/sql/sql_insert.cc
+++ b/sql/sql_insert.cc
@@ -112,7 +112,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
 
   if (!table_list->updatable)
   {
-    my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "INSERT");
+    my_error(ER_NON_INSERTABLE_TABLE, MYF(0), table_list->alias, "INSERT");
     return -1;
   }
 
@@ -228,7 +228,7 @@ static int check_insert_fields(THD *thd, TABLE_LIST *table_list,
       (table_list->view &&
        check_view_insertability(thd, table_list)))
   {
-    my_error(ER_NON_UPDATABLE_TABLE, MYF(0), table_list->alias, "INSERT");
+    my_error(ER_NON_INSERTABLE_TABLE, MYF(0), table_list->alias, "INSERT");
     return -1;
   }
 
diff --git a/sql/sql_view.cc b/sql/sql_view.cc
index 187d289cb16fa9fff9e2d8cd5f2b1fe3742f285f..7f6d935ff5e8fbef48a4146c5eb69fe9e8bdd31b 100644
--- a/sql/sql_view.cc
+++ b/sql/sql_view.cc
@@ -1603,7 +1603,7 @@ bool insert_view_fields(THD *thd, List<Item> *list, TABLE_LIST *view)
       list->push_back(fld);
     else
     {
-      my_error(ER_NON_UPDATABLE_TABLE, MYF(0), view->alias, "INSERT");
+      my_error(ER_NON_INSERTABLE_TABLE, MYF(0), view->alias, "INSERT");
       DBUG_RETURN(TRUE);
     }
   }