diff --git a/packages/tools/src/index.ts b/packages/tools/src/index.ts
index 5485b923a..c16604cd3 100644
--- a/packages/tools/src/index.ts
+++ b/packages/tools/src/index.ts
@@ -13,3 +13,4 @@ export * from './settingsExtractors';
export * from './filterName';
export * from './diffTools';
export * from './schemaEditorTools';
+export * from './stringTools';
diff --git a/packages/tools/src/stringTools.ts b/packages/tools/src/stringTools.ts
new file mode 100644
index 000000000..d3ba6cbe2
--- /dev/null
+++ b/packages/tools/src/stringTools.ts
@@ -0,0 +1,3 @@
+export function toHexString(byteArray) {
+ return byteArray.reduce((output, elem) => output + ('0' + elem.toString(16)).slice(-2), '');
+}
diff --git a/packages/web/src/datagrid/DataGridCore.svelte b/packages/web/src/datagrid/DataGridCore.svelte
index 5af89e44b..45bae5a19 100644
--- a/packages/web/src/datagrid/DataGridCore.svelte
+++ b/packages/web/src/datagrid/DataGridCore.svelte
@@ -192,14 +192,6 @@
return `Rows: ${allRowCount.toLocaleString()}`;
}
- function extractCopiedValue(row, col) {
- let value = row[col];
- if (value === undefined) value = _.get(row, col);
- if (value === null) return '(NULL)';
- if (value === undefined) return '(NoField)';
- if (_.isPlainObject(value) || _.isArray(value)) return JSON.stringify(value);
- return value;
- }
@@ -629,5 +627,4 @@
right: 40px;
bottom: 20px;
}
-
diff --git a/packages/web/src/utility/clipboard.js b/packages/web/src/utility/clipboard.js
index a2b7081c3..a4f046966 100644
--- a/packages/web/src/utility/clipboard.js
+++ b/packages/web/src/utility/clipboard.js
@@ -1,3 +1,6 @@
+import _ from 'lodash';
+import { toHexString } from 'dbgate-tools';
+
export function copyTextToClipboard(text) {
const oldFocus = document.activeElement;
@@ -58,3 +61,13 @@ export function copyTextToClipboard(text) {
if (oldFocus) oldFocus.focus();
}
+
+export function extractRowCopiedValue(row, col) {
+ let value = row[col];
+ if (value === undefined) value = _.get(row, col);
+ if (value === null) return '(NULL)';
+ if (value === undefined) return '(NoField)';
+ if (value.type == 'Buffer' && _.isArray(value.data)) return toHexString(value.data);
+ if (_.isPlainObject(value) || _.isArray(value)) return JSON.stringify(value);
+ return value;
+}
diff --git a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js
index c944ab357..476acdd26 100644
--- a/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js
+++ b/plugins/dbgate-plugin-mysql/src/frontend/Dumper.js
@@ -1,4 +1,5 @@
-const { SqlDumper } = global.DBGATE_TOOLS;
+const { SqlDumper, toHexString } = global.DBGATE_TOOLS;
+const _isArray = require('lodash/isArray');
class Dumper extends SqlDumper {
/** @param type {import('dbgate-types').TransformType} */
@@ -63,6 +64,11 @@ class Dumper extends SqlDumper {
selectTableIntoNewTable(sourceName, targetName) {
this.putCmd('^create ^table %f (^select * ^from %f)', targetName, sourceName);
}
+
+ putValue(value) {
+ if (value.type == 'Buffer' && _isArray(value.data)) this.putRaw(`unhex('${toHexString(value.data)}')`);
+ else super.putValue(value);
+ }
}
module.exports = Dumper;