diff --git a/django/db/backends/utils.py b/django/db/backends/utils.py
index 597e6b3a9d..a2271831d5 100644
--- a/django/db/backends/utils.py
+++ b/django/db/backends/utils.py
@@ -45,7 +45,7 @@ class CursorWrapper:
     # The following methods cannot be implemented in __getattr__, because the
     # code must run when the method is invoked, not just when it is accessed.
 
-    def callproc(self, procname, params=None, kparams=None):
+    def callproc(self, procname, params=(), kparams=None):
         # Keyword parameters for callproc aren't supported in PEP 249, but the
         # database driver may support them (e.g. cx_Oracle).
         if kparams is not None and not self.db.features.supports_callproc_kwargs:
@@ -60,7 +60,6 @@ class CursorWrapper:
             elif kparams is None:
                 return self.cursor.callproc(procname, params)
             else:
-                params = params or ()
                 return self.cursor.callproc(procname, params, kparams)
 
     def execute(self, sql, params=None):
diff --git a/django/db/models/query.py b/django/db/models/query.py
index ffd8626f4b..2469edf81e 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -778,7 +778,7 @@ class QuerySet:
     # PUBLIC METHODS THAT RETURN A QUERYSET SUBCLASS #
     ##################################################
 
-    def raw(self, raw_query, params=None, translations=None, using=None):
+    def raw(self, raw_query, params=(), translations=None, using=None):
         if using is None:
             using = self.db
         qs = RawQuerySet(raw_query, model=self.model, params=params, translations=translations, using=using)
@@ -1332,14 +1332,14 @@ class RawQuerySet:
     Provide an iterator which converts the results of raw SQL queries into
     annotated model instances.
     """
-    def __init__(self, raw_query, model=None, query=None, params=None,
+    def __init__(self, raw_query, model=None, query=None, params=(),
                  translations=None, using=None, hints=None):
         self.raw_query = raw_query
         self.model = model
         self._db = using
         self._hints = hints or {}
         self.query = query or sql.RawQuery(sql=raw_query, using=self.db, params=params)
-        self.params = params or ()
+        self.params = params
         self.translations = translations or {}
         self._result_cache = None
         self._prefetch_related_lookups = ()
diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index b99f0e90ef..0a4cddbf83 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -71,8 +71,8 @@ def _get_col(target, field, alias, simple_col):
 class RawQuery:
     """A single raw SQL query."""
 
-    def __init__(self, sql, using, params=None):
-        self.params = params or ()
+    def __init__(self, sql, using, params=()):
+        self.params = params
         self.sql = sql
         self.using = using
         self.cursor = None
@@ -113,9 +113,13 @@ class RawQuery:
 
     @property
     def params_type(self):
+        if self.params is None:
+            return None
         return dict if isinstance(self.params, Mapping) else tuple
 
     def __str__(self):
+        if self.params_type is None:
+            return self.sql
         return self.sql % self.params_type(self.params)
 
     def _execute_query(self):
@@ -129,6 +133,8 @@ class RawQuery:
             params = tuple(adapter(val) for val in self.params)
         elif params_type is dict:
             params = {key: adapter(val) for key, val in self.params.items()}
+        elif params_type is None:
+            params = None
         else:
             raise RuntimeError("Unexpected params type: %s" % params_type)
 
diff --git a/tests/raw_query/tests.py b/tests/raw_query/tests.py
index 703a6b311e..e62d752fe5 100644
--- a/tests/raw_query/tests.py
+++ b/tests/raw_query/tests.py
@@ -180,6 +180,12 @@ class RawQueryTests(TestCase):
         self.assertEqual(len(results), 1)
         self.assertIsInstance(repr(qset), str)
 
+    def test_like_param(self):
+        query = "SELECT * FROM raw_query_author WHERE first_name like 'J%'"
+        qset = Author.objects.raw(query, params=None)
+        results = list(qset)
+        self.assertEqual(len(results), 2)
+
     @skipUnlessDBFeature('supports_paramstyle_pyformat')
     def test_pyformat_params(self):
         """
