diff --git a/Lib/sqlite3/test/dbapi.py b/Lib/sqlite3/test/dbapi.py
index c356d47..615ebf5 100644
--- a/Lib/sqlite3/test/dbapi.py
+++ b/Lib/sqlite3/test/dbapi.py
@@ -24,6 +24,7 @@
 import unittest
 import sys
 import sqlite3 as sqlite
+from test import test_support
 try:
     import threading
 except ImportError:
@@ -653,7 +654,8 @@
         ts = sqlite.TimestampFromTicks(42)
 
     def CheckBinary(self):
-        b = sqlite.Binary(chr(0) + "'")
+        with test_support.check_py3k_warnings():
+            b = sqlite.Binary(chr(0) + "'")
 
 class ExtensionTests(unittest.TestCase):
     def CheckScriptStringSql(self):
diff --git a/Lib/sqlite3/test/types.py b/Lib/sqlite3/test/types.py
index 400a4f2..a31446e 100644
--- a/Lib/sqlite3/test/types.py
+++ b/Lib/sqlite3/test/types.py
@@ -24,6 +24,7 @@
 import datetime
 import unittest
 import sqlite3 as sqlite
+from test import test_support
 try:
     import zlib
 except ImportError:
@@ -67,7 +68,8 @@
         self.assertEqual(row[0], val)
 
     def CheckBlob(self):
-        val = buffer("Guglhupf")
+        with test_support.check_py3k_warnings():
+            val = buffer("Guglhupf")
         self.cur.execute("insert into test(b) values (?)", (val,))
         self.cur.execute("select b from test")
         row = self.cur.fetchone()
@@ -231,7 +233,8 @@
 
     def CheckBlob(self):
         # default
-        val = buffer("Guglhupf")
+        with test_support.check_py3k_warnings():
+            val = buffer("Guglhupf")
         self.cur.execute("insert into test(bin) values (?)", (val,))
         self.cur.execute("select bin from test")
         row = self.cur.fetchone()
@@ -347,7 +350,8 @@
 
     def CheckBinaryInputForConverter(self):
         testdata = "abcdefg" * 10
-        result = self.con.execute('select ? as "x [bin]"', (buffer(zlib.compress(testdata)),)).fetchone()[0]
+        with test_support.check_py3k_warnings():
+            result = self.con.execute('select ? as "x [bin]"', (buffer(zlib.compress(testdata)),)).fetchone()[0]
         self.assertEqual(testdata, result)
 
 class DateTimeTests(unittest.TestCase):
diff --git a/Lib/sqlite3/test/userfunctions.py b/Lib/sqlite3/test/userfunctions.py
index 634812d..1d19151 100644
--- a/Lib/sqlite3/test/userfunctions.py
+++ b/Lib/sqlite3/test/userfunctions.py
@@ -24,6 +24,7 @@
 
 import unittest
 import sqlite3 as sqlite
+from test import test_support
 
 def func_returntext():
     return "foo"
@@ -36,7 +37,8 @@
 def func_returnnull():
     return None
 def func_returnblob():
-    return buffer("blob")
+    with test_support.check_py3k_warnings():
+        return buffer("blob")
 def func_returnlonglong():
     return 1<<31
 def func_raiseexception():
@@ -202,8 +204,9 @@
         cur = self.con.cursor()
         cur.execute("select returnblob()")
         val = cur.fetchone()[0]
-        self.assertEqual(type(val), buffer)
-        self.assertEqual(val, buffer("blob"))
+        with test_support.check_py3k_warnings():
+            self.assertEqual(type(val), buffer)
+            self.assertEqual(val, buffer("blob"))
 
     def CheckFuncReturnLongLong(self):
         cur = self.con.cursor()
@@ -246,7 +249,8 @@
 
     def CheckParamBlob(self):
         cur = self.con.cursor()
-        cur.execute("select isblob(?)", (buffer("blob"),))
+        with test_support.check_py3k_warnings():
+            cur.execute("select isblob(?)", (buffer("blob"),))
         val = cur.fetchone()[0]
         self.assertEqual(val, 1)
 
@@ -269,8 +273,9 @@
                 b blob
                 )
             """)
-        cur.execute("insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)",
-            ("foo", 5, 3.14, None, buffer("blob"),))
+        with test_support.check_py3k_warnings():
+            cur.execute("insert into test(t, i, f, n, b) values (?, ?, ?, ?, ?)",
+                ("foo", 5, 3.14, None, buffer("blob"),))
 
         self.con.create_aggregate("nostep", 1, AggrNoStep)
         self.con.create_aggregate("nofinalize", 1, AggrNoFinalize)
@@ -362,7 +367,8 @@
 
     def CheckAggrCheckParamBlob(self):
         cur = self.con.cursor()
-        cur.execute("select checkType('blob', ?)", (buffer("blob"),))
+        with test_support.check_py3k_warnings():
+            cur.execute("select checkType('blob', ?)", (buffer("blob"),))
         val = cur.fetchone()[0]
         self.assertEqual(val, 1)
 
