MySQL - Change Column Type



In MySQL, users have the flexibility to modify the data type of a field. This is useful when you initially set the wrong data type for a column in a new database table, or when you need to adjust the storage size for the values in a particular column.

You can modify or update the column type in a MySQL table, using the ALTER TABLE command.

The MySQL ALTER TABLE Command

The ALTER TABLE command is used to modify any data related to a database table. This data can either be records in the table or the table definition itself. Changing the data type of a column is one such modification that can be performed using the ALTER TABLE command.

There are two methods to change a column's data type: the ALTER TABLE... MODIFY command and the ALTER TABLE... CHANGE command.

The MySQL ALTER TABLE... MODIFY Command

You can use MODIFY method with the ALTER TABLE statement to change the column/field data type.

Syntax

Following is the basic syntax to change the column type using ALTER TABLE... MODIFY command −

ALTER TABLE table_name MODIFY column_name new_datatype;

Example

Suppose you have created a table named 'test_table' using the following query −

CREATE TABLE test_table (
   field1 INT,
   field2 VARCHAR(100),
   field3 DATE,
   PRIMARY KEY(field1)
);

To check if the table is successfully created or not, use the DESC command as shown below −

DESC test_table;

This will display the table structure as follows −

Field Type Null Key Default Extra
field1 int NO PRI NULL
field2 varchar(100) YES NULL
field3 date YES NULL

Now, let us say you want to change the data type of 'field2' from VARCHAR(100) to TEXT for more simplicity. You can do this using the ALTER TABLE... MODIFY query as follows −

ALTER TABLE test_table MODIFY field2 TEXT;

Following is the output obtained −

Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0

To check if the column data type is successfully changed, use the DESC command as shown below −

DESC test_table;

This will display the modified table structure as follows −

Field Type Null Key Default Extra
field1 int NO PRI NULL
field2 text YES NULL
field3 date YES NULL

The MySQL ALTER TABLE... CHANGE Command

You can also use the CHANGE method with the ALTER TABLE statement to modify a column's data type. This method is used to alter all the data related to table after it is created.

The only difference between CHANGE and MODIFY methods is that the MODIFY method cannot rename a column whereas the CHANGE method can.

Syntax

Following is the basic syntax to change the column type using ALTER TABLE... CHANGE command −

ALTER TABLE table_name CHANGE column_name column_name new_datatype;

You must remember to specify the column name twice in the query whenever the CHANGE method is used.

Example

In this example, we are changing the datatype of 'field3' in the 'test_table' using the CHANGE method in ALTER TABLE command. Firstly, let us observe current definition of the table using DESC command −

DESC test_table;

Following is the table produced −

Field Type Null Key Default Extra
field1 int NO PRI NULL
field2 text YES NULL
field3 date YES NULL

Now, using ALTER TABLE... CHANGE method, change the column type of 'field3' −

ALTER TABLE test_table CHANGE field3 field3 VARCHAR(20);

Output of the above code is as follows −

Query OK, 0 rows affected (0.03 sec)
Records: 0  Duplicates: 0  Warnings: 0

You can verify whether the column data type is changed using the DESC command as shown below −

DESC test_table;

We get the following table as an output −

Field Type Null Key Default Extra
field1 int NO PRI NULL
field2 text YES NULL
field3 varchar(20) YES NULL

Changing Column type Using Client Program

We can also change column type using client program.

Syntax

To change column type through a PHP program, we need to execute the "ALTER TABLE" statement using the mysqli function query() as follows −

$sql = "ALTER TABLE test_table MODIFY field2 TEXT";
$mysqli->query($sql);

To change column type through a JavaScript program, we need to execute the "ALTER TABLE" statement using the query() function of mysql2 library as follows −

sql = "ALTER TABLE test_table MODIFY field2 TEXT";
con.query(sql)

To change column type through a Java program, we need to execute the "ALTER TABLE" statement using the JDBC function executeUpdate() as follows −

String sql = "ALTER TABLE test_table MODIFY field2 TEXT";
statement.executeUpdate(sql);

To change column type through a Python program, we need to execute the "ALTER TABLE" statement using the execute() function of the MySQL Connector/Python as follows −

change_column_type_query = "ALTER TABLE test_table MODIFY field2 TEXT"
cursorObj.execute(change_column_type_query)

Example

Following are the programs −

$dbhost = 'localhost';
$dbuser = 'root';
$dbpass = 'password';
$dbname = 'TUTORIALS';
$mysqli = new mysqli($dbhost, $dbuser, $dbpass, $dbname);
if ($mysqli->connect_errno) {
    printf("Connect failed: %s
", $mysqli->connect_error); exit(); } // Create table Myplayer $sql = 'CREATE TABLE IF NOT EXISTS test_table (field1 INT, field2 VARCHAR(100), field3 DATE, PRIMARY KEY(field1) )'; $result = $mysqli->query($sql); if ($result) { echo "Table created successfully...!\n"; } echo "Describe table before column modification...!\n"; $q = "DESC test_table"; if ($res = $mysqli->query($q)) { while ($row = $res->fetch_array()) { print_r($row[1]); printf("\n"); } } //modifie table column...! $sql = "ALTER TABLE test_table MODIFY field2 TEXT"; if ($mysqli->query($sql)) { echo "Table's column type modification done...!\n"; } echo "Describe table after modification of field2...!\n"; $sql = "DESC test_table"; if ($res = $mysqli->query($sql)) { while ($row = $res->fetch_array()) { print_r($row[1]); printf("\n"); } } $mysqli->close();

Output

The output obtained is as shown below −

Table created successfully...!
Describe table before column modification...!
int
varchar(100)
date
Table's column type modification done...!
Describe table after modification of field2...!
int
text
date        

var mysql = require('mysql2');
var con = mysql.createConnection({
    host: "localhost",
    user: "root",
    password: "Nr5a0204@123"
});

// Connecting to MySQL
con.connect(function (err) {
    if (err) throw err;
    console.log("Connected!");
    console.log("--------------------------");

    // Create a new database
    sql = "Create Database TUTORIALS";
    con.query(sql);

    sql = "USE TUTORIALS";
    con.query(sql);

    sql = "CREATE TABLE test_table (field1 INT,field2 VARCHAR(100),field3 DATE,PRIMARY KEY(field1));"
    con.query(sql);

    sql = "DESC test_table;"
    con.query(sql, function(err, result){
      if (err) throw err
      console.log("**Description of test_table:**");
      console.log(result);
    });

    sql = "ALTER TABLE test_table MODIFY field2 TEXT;"
    con.query(sql);

    sql = "DESC test_table;"
    con.query(sql, function(err, result){
      if (err) throw err
      console.log("**Description of test_table after modifying:**");
      console.log(result);
    });
});    

Output

The output obtained is as shown below −

 
Connected!
--------------------------
**Description of test_table:**
[
  {
    Field: 'field1',
    Type: 'int',
    Null: 'NO',
    Key: 'PRI',
    Default: null,
    Extra: ''
  },
  {
    Field: 'field2',
    Type: 'varchar(100)',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'field3',
    Type: 'date',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  }
]
**Description of test_table after modifying:**
[
  {
    Field: 'field1',
    Type: 'int',
    Null: 'NO',
    Key: 'PRI',
    Default: null,
    Extra: ''
  },
  {
    Field: 'field2',
    Type: 'text',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  },
  {
    Field: 'field3',
    Type: 'date',
    Null: 'YES',
    Key: '',
    Default: null,
    Extra: ''
  }
]    
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class ChangeColumnType {
   public static void main(String[] args) {
      String url = "jdbc:mysql://localhost:3306/TUTORIALS";
      String username = "root";
      String password = "password";
      try {
         Class.forName("com.mysql.cj.jdbc.Driver");
         Connection connection = DriverManager.getConnection(url, username, password);
         Statement statement = connection.createStatement();
         System.out.println("Connected successfully...!");

         //create a table...
         statement.execute("CREATE TABLE IF NOT EXISTS test_table (field1 INT, field2 VARCHAR(100), field3 DATE, PRIMARY KEY(field1))");
         System.out.println("Table created successfully...!");

         System.out.println("Describe table before column modification...!");
         ResultSet resultSet = statement.executeQuery("DESC test_table");
         while (resultSet.next()){
            System.out.println(resultSet.getNString(1)+" "+resultSet.getNString(2)+" "+resultSet.getNString(3)+" "+resultSet.getNString(4));
         }

         //Updating the table's column...!
         statement.executeUpdate("ALTER TABLE test_table MODIFY field2 TEXT");
         System.out.println("Table column updated successfully...!");

         System.out.println("Describe table After column modification...!");
         ResultSet resultSet1 = statement.executeQuery("DESC test_table");
         while (resultSet1.next()){
            System.out.println(resultSet1.getNString(1)+" "+resultSet1.getNString(2)+" "+resultSet1.getNString(3)+" "+resultSet1.getNString(4));
         }
         connection.close();
      } catch (Exception e) {
         e.printStackTrace();
      }
   }
}    

Output

The output obtained is as shown below −

Connected successfully...!
Table created successfully...!
Describe table before column modification...!
field1 int NO PRI
field2 text YES 
field3 date YES 
Table column updated successfully...!
Describe table After column modification...!
field1 int NO PRI
field2 text YES 
field3 date YES       
import mysql.connector
# Establishing the connection
connection = mysql.connector.connect(
    host='localhost',
    user='root',
    password='password',
    database='tut'
)
# Creating a cursor object
cursorObj = connection.cursor()
# Creating the table 'test_table'
create_table_query = '''
CREATE TABLE test_table (
    field1 INT,
    field2 VARCHAR(100),
    field3 DATE,
    PRIMARY KEY(field1)
)'''
cursorObj.execute(create_table_query)
print("Table 'test_table' is created successfully!")
# Checking whether the table is created
desc_query = "DESC test_table;"
cursorObj.execute(desc_query)
results = cursorObj.fetchall()
print("\nTable structure for 'test_table':")
for result in results:
    print(result)
# Changing column type
change_column_type_query = "ALTER TABLE test_table MODIFY field2 TEXT"
cursorObj.execute(change_column_type_query)
print("\nColumn 'field2' type has been changed to TEXT.")
# Verification
desc = "DESC test_table;"
cursorObj.execute(desc)
results = cursorObj.fetchall()
print("\nTable structure for 'test_table':")
for result in results:
    print(result)
# Closing the cursor and connectimon
cursorObj.close()
connection.close()    

Output

The output obtained is as shown below −

Table 'test_table' is created successfully!
Table structure for 'test_table':
('field1', b'int', 'NO', 'PRI', None, '')
('field2', b'varchar(100)', 'YES', '', None, '')
('field3', b'date', 'YES', '', None, '')

Column 'field2' type has been changed to TEXT.

Table structure for 'test_table':
('field1', b'int', 'NO', 'PRI', None, '')
('field2', b'text', 'YES', '', None, '')
('field3', b'date', 'YES', '', None, '')       
Advertisements