diff --git a/src/HttpClient.ts b/src/HttpClient.ts
index 9ddd1bcb..a2a7f0e8 100644
--- a/src/HttpClient.ts
+++ b/src/HttpClient.ts
@@ -16,6 +16,7 @@ import { basename } from 'node:path';
 import { createReadStream } from 'node:fs';
 import { format as urlFormat } from 'node:url';
 import { performance } from 'node:perf_hooks';
+import querystring from 'node:querystring';
 import {
   FormData as FormDataNative,
   request as undiciRequest,
@@ -503,18 +504,15 @@ export class HttpClient extends EventEmitter {
           || isReadable(args.data);
         if (isGETOrHEAD) {
           if (!isStringOrBufferOrReadable) {
+            let query
             if (args.nestedQuerystring) {
-              const querystring = qs.stringify(args.data);
-              // reset the requestUrl
-              const href = requestUrl.href;
-              requestUrl = new URL(href + (href.includes('?') ? '&' : '?') + querystring);
+              query = qs.stringify(args.data);
             } else {
-              for (const field in args.data) {
-                const fieldValue = args.data[field];
-                if (fieldValue === undefined) continue;
-                requestUrl.searchParams.append(field, fieldValue);
-              }
+              query = querystring.stringify(args.data);
             }
+            // reset the requestUrl
+            const href = requestUrl.href;
+            requestUrl = new URL(href + (href.includes('?') ? '&' : '?') + query);
           }
         } else {
           if (isStringOrBufferOrReadable) {
diff --git a/test/options.data.test.ts b/test/options.data.test.ts
index 6e7e65ef..09979d70 100644
--- a/test/options.data.test.ts
+++ b/test/options.data.test.ts
@@ -29,6 +29,7 @@ describe('options.data.test.ts', () => {
         d: 1111,
         e() { return ''; },
         f: true,
+        g: [ 'a', 'b' ]
       },
       dataType: 'json',
     });
@@ -37,7 +38,7 @@ describe('options.data.test.ts', () => {
     assert.equal(response.data.method, 'GET');
     assert(response.url.startsWith(_url));
     assert(!response.redirected);
-    assert.equal(response.data.url, '/?sql=SELECT+*+from+table&data=%E5%93%88%E5%93%88&c=2222&d=1111&e=e%28%29+%7B%0A++++++++++return+%22%22%3B%0A++++++++%7D&f=true');
+    assert.equal(response.data.url, '/?sql=SELECT+*+from+table&data=%E5%93%88%E5%93%88&c=2222&d=1111&e=e%28%29+%7B%0A++++++++++return+%22%22%3B%0A++++++++%7D&f=true&g=a&g=b');
     const url = new URL(response.data.href);
     assert.equal(url.searchParams.get('sql'), 'SELECT * from table');
     assert.equal(url.searchParams.get('data'), '哈哈');