diff --git a/hasql.cabal b/hasql.cabal
--- a/hasql.cabal
+++ b/hasql.cabal
@@ -1,6 +1,6 @@
 cabal-version: 3.0
 name: hasql
-version: 1.9.3
+version: 1.9.3.1
 category: Hasql, Database, PostgreSQL
 synopsis: Fast PostgreSQL driver with a flexible mapping API
 description:
@@ -240,10 +240,13 @@
   hs-source-dirs: hspec
   main-is: Main.hs
   other-modules:
+    Hasql.ConnectionSpec
     Hasql.PipelineSpec
 
   build-tool-depends: hspec-discover:hspec-discover
   build-depends:
+    hasql,
     hasql:testing-kit,
     hspec,
     rerebase >=1 && <2,
+    testcontainers-postgresql >=0.0.1 && <0.1,
diff --git a/hspec/Hasql/ConnectionSpec.hs b/hspec/Hasql/ConnectionSpec.hs
new file mode 100644
--- /dev/null
+++ b/hspec/Hasql/ConnectionSpec.hs
@@ -0,0 +1,48 @@
+module Hasql.ConnectionSpec (spec) where
+
+import Hasql.Connection qualified
+import Hasql.Connection.Setting qualified
+import Hasql.Connection.Setting.Connection qualified
+import Hasql.Connection.Setting.Connection.Param qualified
+import Test.Hspec
+import TestcontainersPostgresql qualified
+import Prelude
+
+spec :: Spec
+spec = do
+  describe "acquire" do
+    let itConnects :: Text -> Text -> Spec
+        itConnects username password =
+          describe ("username: " <> toList username) do
+            describe ("password: " <> toList password) do
+              it "connects" do
+                TestcontainersPostgresql.run
+                  ( TestcontainersPostgresql.Config
+                      { forwardLogs = False,
+                        distro = TestcontainersPostgresql.Distro17,
+                        auth = TestcontainersPostgresql.CredentialsAuth username password
+                      }
+                  )
+                  ( \(host, port) -> do
+                      result <-
+                        Hasql.Connection.acquire
+                          [ Hasql.Connection.Setting.connection
+                              ( Hasql.Connection.Setting.Connection.params
+                                  [ Hasql.Connection.Setting.Connection.Param.host host,
+                                    Hasql.Connection.Setting.Connection.Param.port (fromIntegral port),
+                                    Hasql.Connection.Setting.Connection.Param.user username,
+                                    Hasql.Connection.Setting.Connection.Param.password password
+                                  ]
+                              )
+                          ]
+                      case result of
+                        Left err -> expectationFailure ("Connection failed: " <> show err <> ". Host: " <> show host <> ", port: " <> show port)
+                        Right connection -> do
+                          Hasql.Connection.release connection
+                          pure ()
+                  )
+     in do
+          itConnects "user" "new password"
+          itConnects "user" "new\\password"
+          itConnects "user" "new'password"
+          itConnects "new user" "password"
diff --git a/library/Hasql/Connection/Config/ConnectionString.hs b/library/Hasql/Connection/Config/ConnectionString.hs
--- a/library/Hasql/Connection/Config/ConnectionString.hs
+++ b/library/Hasql/Connection/Config/ConnectionString.hs
@@ -1,6 +1,7 @@
 module Hasql.Connection.Config.ConnectionString where
 
 import Data.ByteString qualified as B
+import Data.ByteString.Char8 qualified as BC
 import Data.Map.Strict qualified as Map
 import Data.Text.Encoding qualified
 import Hasql.Connection.Config.ConnectionString.Params qualified as Params
@@ -18,4 +19,13 @@
 fromParams =
   B.intercalate " " . fmap renderParam . Map.toList
   where
-    renderParam (k, v) = mconcat [k, "=", v]
+    renderParam (k, v) = mconcat [k, "=", "'", escapeSingleQuote v, "'"]
+
+    escapeSingleQuote =
+      BC.concatMap
+        ( \w ->
+            case w of
+              '\'' -> BC.pack "\\'"
+              '\\' -> BC.pack "\\\\"
+              _ -> BC.singleton w
+        )
