diff --git a/ChangeLog b/ChangeLog
index d10a483ba0..7fdc416ea9 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -53,6 +53,7 @@ phpMyAdmin - ChangeLog
- bug #3299486 [prettyprint] Order By in a query containing comment character
- [interface] Improved ENUM/SET editor
+ patch #3428376 [pmadb] pmadb on a different MySQL server
++ patch #3410688 [interface] Improving field size for character columns
3.4.8.0 (not yet released)
- bug #3425230 [interface] enum data split at space char (more space to edit)
diff --git a/Documentation.html b/Documentation.html
index e1ce310ab4..0a403cee88 100644
--- a/Documentation.html
+++ b/Documentation.html
@@ -1699,6 +1699,14 @@ CREATE DATABASE,ALTER DATABASE,DROP DATABASE
Default is old behavior so input.
+
$cfg['MinSizeForInputField'] integer
+ Defines the minimum size for input fields generated for CHAR and
+ VARCHAR columns.
+
+ $cfg['MaxSizeForInputField'] integer
+ Defines the maximum size for input fields generated for CHAR and
+ VARCHAR columns.
+
$cfg['InsertRows'] integer
Defines the maximum number of concurrent entries for the Insert page.
diff --git a/libraries/config.default.php b/libraries/config.default.php
index 98ace3f677..8dff000dae 100644
--- a/libraries/config.default.php
+++ b/libraries/config.default.php
@@ -1027,6 +1027,20 @@ $cfg['ShowFieldTypesInDataEditView'] = true;
*/
$cfg['CharEditing'] = 'input';
+/**
+ * The minimum size for character input fields
+ *
+ * @global integer $cfg['MinSizeForInputField']
+ */
+$cfg['MinSizeForInputField'] = 4;
+
+/**
+ * The maximum size for character input fields
+ *
+ * @global integer $cfg['MinSizeForInputField']
+ */
+$cfg['MaxSizeForInputField'] = 60;
+
/**
* How many rows can be inserted at one time
*
diff --git a/libraries/config/messages.inc.php b/libraries/config/messages.inc.php
index 5d199227bd..35a8392cc6 100644
--- a/libraries/config/messages.inc.php
+++ b/libraries/config/messages.inc.php
@@ -31,6 +31,10 @@ $strConfigBZipDump_desc = __('Enable [a@http://en.wikipedia.org/wiki/Bzip2]bzip2
$strConfigBZipDump_name = __('Bzip2');
$strConfigCharEditing_desc = __('Defines which type of editing controls should be used for CHAR and VARCHAR columns; [kbd]input[/kbd] - allows limiting of input length, [kbd]textarea[/kbd] - allows newlines in columns');
$strConfigCharEditing_name = __('CHAR columns editing');
+$strConfigMinSizeForInputField_desc = __('Defines the minimum size for input fields generated for CHAR and VARCHAR columns');
+$strConfigMinSizeForInputField_name = __('Minimum size for input field');
+$strConfigMaxSizeForInputField_desc = __('Defines the maximum size for input fields generated for CHAR and VARCHAR columns');
+$strConfigMaxSizeForInputField_name = __('Maximum size for input field');
$strConfigCharTextareaCols_desc = __('Number of columns for CHAR/VARCHAR textareas');
$strConfigCharTextareaCols_name = __('CHAR textarea columns');
$strConfigCharTextareaRows_desc = __('Number of rows for CHAR/VARCHAR textareas');
diff --git a/libraries/config/setup.forms.php b/libraries/config/setup.forms.php
index a8b859184c..d42f60d740 100644
--- a/libraries/config/setup.forms.php
+++ b/libraries/config/setup.forms.php
@@ -213,6 +213,8 @@ $forms['Main_frame']['Edit'] = array(
'ShowFunctionFields',
'ShowFieldTypesInDataEditView',
'CharEditing',
+ 'MinSizeForInputField',
+ 'MaxSizeForInputField',
'CharTextareaCols',
'CharTextareaRows',
'TextareaCols',
diff --git a/libraries/config/user_preferences.forms.php b/libraries/config/user_preferences.forms.php
index e0b2d18ab4..44fad4b7d8 100644
--- a/libraries/config/user_preferences.forms.php
+++ b/libraries/config/user_preferences.forms.php
@@ -38,6 +38,8 @@ $forms['Features']['General'] = array(
'ShowHint');
$forms['Features']['Text_fields'] = array(
'CharEditing',
+ 'MinSizeForInputField',
+ 'MaxSizeForInputField',
'CharTextareaCols',
'CharTextareaRows',
'TextareaCols',
diff --git a/tbl_change.php b/tbl_change.php
index 2dbbc5bde5..4ffe4b2543 100644
--- a/tbl_change.php
+++ b/tbl_change.php
@@ -916,8 +916,17 @@ foreach ($rows as $row_id => $vrow) {
elseif (in_array($field['pma_type'], $no_support_types)) {
// ignore this column to avoid changing it
} else {
- // field size should be at least 4 and max 40
- $fieldsize = min(max($field['len'], 4), 40);
+ if ($field['is_char']) {
+ $fieldsize = $extracted_fieldspec['spec_in_brackets'];
+ } else {
+ /**
+ * This case happens for example for INT or DATE columns;
+ * in these situations, the value returned in $field['len']
+ * seems appropriate.
+ */
+ $fieldsize = $field['len'];
+ }
+ $fieldsize = min(max($fieldsize, $cfg['MinSizeForInputField']), $cfg['MaxSizeForInputField']);
echo $backup_field . "\n";
if ($field['is_char']
&& ($cfg['CharEditing'] == 'textarea'