diff --git a/tools/kv_typed/src/as_bytes.rs b/tools/kv_typed/src/as_bytes.rs
index 4e79a4f8006eb12c81c00d30e95049d08b7a1196..4e8cebea2a66c091964ad8024e3fec0c5fc52191 100644
--- a/tools/kv_typed/src/as_bytes.rs
+++ b/tools/kv_typed/src/as_bytes.rs
@@ -67,11 +67,11 @@ mod tests {
 
     #[test]
     fn test_btreeset_as_bytes() {
-        BTreeSet::<u64>::new().as_bytes(|bytes| assert_eq!(bytes, &[]));
+        BTreeSet::<u64>::new().as_bytes(|bytes| assert!(bytes.is_empty()));
     }
     #[test]
     fn test_hashset_as_bytes() {
-        HashSet::<u64>::new().as_bytes(|bytes| assert_eq!(bytes, &[]));
+        HashSet::<u64>::new().as_bytes(|bytes| assert!(bytes.is_empty()));
     }
 }
 
diff --git a/tools/kv_typed/src/backend/leveldb.rs b/tools/kv_typed/src/backend/leveldb.rs
index 1ecd676c8a07ed59e73ac81c77eeacb08406a37f..22692c7ad8f2472d42b3a30d40ef5a917e92c073 100644
--- a/tools/kv_typed/src/backend/leveldb.rs
+++ b/tools/kv_typed/src/backend/leveldb.rs
@@ -171,7 +171,9 @@ impl BackendCol for LevelDbCol {
             self.0
                 .get(ReadOptions::new(), k_bytes)?
                 .map(|bytes| {
-                    if let Some(layout_verified) =
+                    if bytes.is_empty() {
+                        f(&[])
+                    } else if let Some(layout_verified) =
                         zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(
                             &bytes[V::prefix_len()..],
                         )
diff --git a/tools/kv_typed/src/backend/lmdb.rs b/tools/kv_typed/src/backend/lmdb.rs
index ceb728f23659142347e925f5c253145d864a619c..e30532868e2aadad117e5404438c5aa1f660d444 100644
--- a/tools/kv_typed/src/backend/lmdb.rs
+++ b/tools/kv_typed/src/backend/lmdb.rs
@@ -324,7 +324,9 @@ impl BackendCol for LmdbCol {
                 .get::<_, [u8]>(&self.inner.tree, k_bytes)
                 .to_opt()?
                 .map(|bytes| {
-                    if let Some(layout_verified) =
+                    if bytes.is_empty() {
+                        f(&[])
+                    } else if let Some(layout_verified) =
                         zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(
                             &bytes[V::prefix_len()..],
                         )
diff --git a/tools/kv_typed/src/backend/memory.rs b/tools/kv_typed/src/backend/memory.rs
index f9c41870f73524584a6193d0c91e1ffa60490cc1..0d50e7857043483c19abb07bbfc1f9a96d272adc 100644
--- a/tools/kv_typed/src/backend/memory.rs
+++ b/tools/kv_typed/src/backend/memory.rs
@@ -138,7 +138,9 @@ impl BackendCol for MemCol {
             self.tree
                 .get(k_bytes)
                 .map(|bytes| {
-                    if let Some(layout_verified) =
+                    if bytes.is_empty() {
+                        f(&[])
+                    } else if let Some(layout_verified) =
                         zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(
                             &bytes[V::prefix_len()..],
                         )
diff --git a/tools/kv_typed/src/backend/memory_singleton.rs b/tools/kv_typed/src/backend/memory_singleton.rs
index 5f49a8cf3eb6ba4d6afce5618fd8fe59eb4f16d7..786ca4e69c002ce0c8e0410e8ac55921d2c11513 100644
--- a/tools/kv_typed/src/backend/memory_singleton.rs
+++ b/tools/kv_typed/src/backend/memory_singleton.rs
@@ -121,7 +121,9 @@ impl BackendCol for MemCol {
         self.0
             .as_ref()
             .map(|bytes| {
-                if let Some(layout_verified) =
+                if bytes.is_empty() {
+                    f(&[])
+                } else if let Some(layout_verified) =
                     zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(&bytes[V::prefix_len()..])
                 {
                     f(&layout_verified)
diff --git a/tools/kv_typed/src/backend/sled.rs b/tools/kv_typed/src/backend/sled.rs
index 592a6bd7653febcc47df77dbebb6f78504a550b1..9d1358026612b72ada811c057520d3a8dfba1c7f 100644
--- a/tools/kv_typed/src/backend/sled.rs
+++ b/tools/kv_typed/src/backend/sled.rs
@@ -121,7 +121,9 @@ impl BackendCol for SledCol {
             self.0
                 .get(k_bytes)?
                 .map(|bytes| {
-                    if let Some(layout_verified) =
+                    if bytes.is_empty() {
+                        f(&[])
+                    } else if let Some(layout_verified) =
                         zerocopy::LayoutVerified::<_, [V::Elem]>::new_slice(
                             &bytes[V::prefix_len()..],
                         )