diff --git a/Docs/changelog-4.0.xml b/Docs/changelog-4.0.xml
new file mode 100755
index 0000000000000000000000000000000000000000..f0f9aa881f1ae2d72ddb06e291f39508532dee18
--- /dev/null
+++ b/Docs/changelog-4.0.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE appendix PUBLIC "-//OASIS//DTD DocBook XML V4.3//EN"
+"http://www.oasis-open.org/docbook/xml/4.3/docbookx.dtd">
+<!--
+This is a dummy changelog file. Don't use it yet.
+It merges upward without conflict.
+-->
+<appendix id="news-4-0-x">
+
+ <title>
+  Changes in release 4.0.x
+ </title>
+
+ <para>
+  This is a dummy changelog file. Don't use it yet.
+ </para>
+
+</appendix>
diff --git a/mysql-test/r/func_str.result b/mysql-test/r/func_str.result
index 9b93fe2ad1c0390564b0e0d94d79eb7853dca72a..92c7d46550f42b0a01cda2d965af16075668aeb5 100644
--- a/mysql-test/r/func_str.result
+++ b/mysql-test/r/func_str.result
@@ -748,3 +748,18 @@ ySQL
 SELECT CHAR_LENGTH(CHAR(NULL,121,83,81,'76')) as my_column;
 my_column
 4
+CREATE TABLE t1 (id int PRIMARY KEY, str char(255) NOT NULL);
+CREATE TABLE t2 (id int NOT NULL UNIQUE);
+INSERT INTO t2 VALUES (1),(2);
+INSERT INTO t1 VALUES (1, aes_encrypt('foo', 'bar'));
+INSERT INTO t1 VALUES (2, 'not valid');
+SELECT t1.id, aes_decrypt(str, 'bar') FROM t1, t2 WHERE t1.id = t2.id;
+id	aes_decrypt(str, 'bar')
+1	foo
+2	NULL
+SELECT t1.id, aes_decrypt(str, 'bar') FROM t1, t2 WHERE t1.id = t2.id
+ORDER BY t1.id;
+id	aes_decrypt(str, 'bar')
+1	foo
+2	NULL
+DROP TABLE t1, t2;
diff --git a/mysql-test/t/func_str.test b/mysql-test/t/func_str.test
index a69febef340b8c753ef44eb2ad1d2e9dc0a226bf..2fa6b603155dc4341717541ef65313dc894ce813 100644
--- a/mysql-test/t/func_str.test
+++ b/mysql-test/t/func_str.test
@@ -485,3 +485,19 @@ DROP TABLE t1;
 #
 SELECT CHAR(NULL,121,83,81,'76') as my_column;
 SELECT CHAR_LENGTH(CHAR(NULL,121,83,81,'76')) as my_column;
+#
+# Test case for bug #8669: null aes_decrypt result in order by query
+#
+
+CREATE TABLE t1 (id int PRIMARY KEY, str char(255) NOT NULL);
+CREATE TABLE t2 (id int NOT NULL UNIQUE);
+INSERT INTO t2 VALUES (1),(2);
+INSERT INTO t1 VALUES (1, aes_encrypt('foo', 'bar'));
+INSERT INTO t1 VALUES (2, 'not valid');
+
+SELECT t1.id, aes_decrypt(str, 'bar') FROM t1, t2 WHERE t1.id = t2.id;
+SELECT t1.id, aes_decrypt(str, 'bar') FROM t1, t2 WHERE t1.id = t2.id
+ ORDER BY t1.id;
+
+DROP TABLE t1, t2;
+
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index 298418e157470bfa6903c821b25ad106630f70d0..a9ec7139ea73647dc4f5b1ae046df734064b6047 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -225,6 +225,7 @@ String *Item_func_aes_decrypt::val_str(String *str)
 void Item_func_aes_decrypt::fix_length_and_dec()
 {
    max_length=args[0]->max_length;
+   maybe_null= 1;
 }