diff --git a/simplest-sqlite.cabal b/simplest-sqlite.cabal
--- a/simplest-sqlite.cabal
+++ b/simplest-sqlite.cabal
@@ -2,7 +2,7 @@
 cabal-version: >= 1.10
 
 name: simplest-sqlite
-version: 0.1.0.8
+version: 0.1.0.9
 stability: Experimental
 author: YoshikuniJujo <PAF01143@nifty.ne.jp>
 maintainer: YoshikuniJujo <PAF01143@nifty.ne.jp>
diff --git a/src/Database/SmplstSQLite3.hs b/src/Database/SmplstSQLite3.hs
--- a/src/Database/SmplstSQLite3.hs
+++ b/src/Database/SmplstSQLite3.hs
@@ -107,6 +107,8 @@
 	c_sqlite3_column_text :: Ptr Stmt -> CInt -> IO CString
 foreign import ccall unsafe "sqlite3.h sqlite3_column_blob"
 	c_sqlite3_column_blob :: Ptr Stmt -> CInt -> IO CString
+foreign import ccall unsafe "sqlite3.h sqlite3_column_bytes"
+	c_sqlite3_column_bytes :: Ptr Stmt -> CInt -> IO CInt
 
 class SQLiteDataList a where
 	bindNList :: Stmt -> Int -> [a] -> IO ()
@@ -158,8 +160,10 @@
 
 instance SQLiteData BS.ByteString where
 	bindN = sqlite3BindBlob
-	column (Stmt sm) i = packCString' "ByteString column"
-		=<< c_sqlite3_column_blob sm (fromIntegral i)
+	column (Stmt sm) i = do
+		ln <- c_sqlite3_column_bytes sm (fromIntegral i)
+		cs <- c_sqlite3_column_blob sm (fromIntegral i)
+		packCStringLen' "ByteString column" (cs, fromIntegral ln)
 
 instance SQLiteData T.Text where
 	bindN sm i = sqlite3BindByteString sm i . T.encodeUtf8
@@ -176,6 +180,11 @@
 	| cstr == nullPtr = nullPointerException em
 	| otherwise = BS.packCString cstr
 
+packCStringLen' :: String -> CStringLen -> IO BS.ByteString
+packCStringLen' em csln@(cstr, _)
+	| cstr == nullPtr = nullPointerException em
+	| otherwise = BS.packCStringLen csln
+
 foreign import ccall unsafe "sqlite3.h sqlite3_bind_null"
 	c_sqlite3_bind_null :: Ptr Stmt -> CInt -> IO CInt
 foreign import ccall unsafe "sqlite3.h sqlite3_bind_int"
@@ -223,8 +232,9 @@
 	when (ret /= sQLITE_OK) $ sqliteThrow "Cannot bind text" ret
 
 sqlite3BindBlob :: Stmt -> Int -> BS.ByteString -> IO ()
-sqlite3BindBlob (Stmt sm) i s = BS.useAsCString s $ \cs -> do
-	ret <- c_sqlite3_bind_blob sm (fromIntegral i) cs (- 1) nullPtr
+sqlite3BindBlob (Stmt sm) i s = BS.useAsCStringLen s $ \(cs, n) -> do
+	ret <- c_sqlite3_bind_blob
+		sm (fromIntegral i) cs (fromIntegral n) nullPtr
 	when (ret /= sQLITE_OK) $ sqliteThrow "Cannot bind text" ret
 
 foreign import ccall unsafe "sqlite3.h sqlite3_bind_parameter_index"
diff --git a/src/Database/SmplstSQLite3/Exception/Internal.hs b/src/Database/SmplstSQLite3/Exception/Internal.hs
--- a/src/Database/SmplstSQLite3/Exception/Internal.hs
+++ b/src/Database/SmplstSQLite3/Exception/Internal.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE TemplateHaskell, ExistentialQuantification, DeriveDataTypeable #-}
+{-# LANGUAGE TemplateHaskell, ExistentialQuantification #-}
 
 module Database.SmplstSQLite3.Exception.Internal (
 	sqliteThrow, sqliteThrowBindError,
@@ -124,7 +124,6 @@
 
 import Control.Exception
 import Control.Exception.Hierarchy
-import Data.Typeable
 import Foreign.C.Types
 
 import Database.SmplstSQLite3.Constants
@@ -233,7 +232,7 @@
 	"SQLITE_BIND_ERROR" ]
 
 
-data SQLITE_ERROR_OTHER = SQLITE_ERROR_OTHER CInt String deriving (Typeable, Show)
+data SQLITE_ERROR_OTHER = SQLITE_ERROR_OTHER CInt String deriving Show
 
 exceptionHierarchy Nothing $
 	ExNode "SQLiteException" [
@@ -449,7 +448,7 @@
 sqliteThrowBindError em = throw $ SQLITE_BIND_ERROR em
 
 newtype NullPointerException = NullPointerException String
-	deriving (Typeable, Show)
+	deriving Show
 
 exceptionHierarchy Nothing (ExType ''NullPointerException)
 
