Change the character set & collation in MySQL / MariaDB

Change the character set & collation in MySQL/MariaDB

Note: For check the character set in MySQL/MariaDB. Please click on it.

Change the character set & collation in MySQL/MariaDB for the table:

ALTER TABLE table_name
 CONVERT TO CHARACTER SET charset_name [COLLATE collation_name];

OR 

CREATE TABLE table_name (column1  datatype1, column2 datatype2 .....) 
  CHARACTER SET 'character_name' 
  COLLATE 'collation_name';

Change or set character set & collation at the database level:

CREATE DATABASE database_name 
  CHARACTER SET = 'character_name'
  COLLATE = 'collation_name';

OR

ALTER DATABASE database_name COLLATE = 'collation_name';

Change character set & collation at the Server level:

SET character_set_server = 'character_name';


SET collation_server = 'collation_name';

Note: Both parameter are dynamic

Change character set & collation at column level:

ALTER TABLE table_name MODIFY column_name DATA_TYPE CHARACTER SET character_name COLLATE collation_name;

Script to change multiple columns for a table or all tables:

---Change column with VARCHAR datatype
SELECT CONCAT('ALTER TABLE `', table_name,
        '` MODIFY `', column_name, '` ', DATA_TYPE, '(', CHARACTER_MAXIMUM_LENGTH, 
        ') CHARACTER SET UTF8 COLLATE utf8_bin',
        (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database_name'
AND DATA_TYPE = 'varchar'
AND
(
    CHARACTER_SET_NAME != 'utf8'
    OR
    COLLATION_NAME != 'utf8_bin'
);


--Change columns other than Varchar
SELECT CONCAT('ALTER TABLE `', table_name,
    '` MODIFY `', column_name, '` ', DATA_TYPE,
    ' CHARACTER SET UTF8 COLLATE utf8_bin',
    (CASE WHEN IS_NULLABLE = 'NO' THEN ' NOT NULL' ELSE '' END), ';')
FROM information_schema.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database_name'
AND DATA_TYPE != 'varchar'
AND
(
    CHARACTER_SET_NAME != 'utf8'
    OR
    COLLATION_NAME != 'utf8_bin'
);

Script for changing all the tables character set or collation

SELECT CONCAT('ALTER TABLE ',  table_name, ' CHARACTER SET utf8 COLLATE utf8_bin;')
FROM information_schema.TABLES AS T, information_schema.`COLLATION_CHARACTER_SET_APPLICABILITY` AS C
WHERE C.collation_name = T.table_collation
AND T.table_schema = 'my_database_name'
AND
(
    C.CHARACTER_SET_NAME != 'utf8'
    OR
    C.COLLATION_NAME != 'utf8_bin'
);
Advertisement

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.