10

I have set up the Collation of all my database tables as latin1_swedish_ci and now I realise that I should use utf8_bin or utf8_general_ci.

How can I change the Collation in the tables to utf8_bin or utf8_general_ci in one go? Can I use a query or something?

Teun Zengerink
  • 4,277
  • 5
  • 30
  • 32
Run
  • 54,938
  • 169
  • 450
  • 748

4 Answers4

29

You'll simply need to run an ALTER on each of the tables as follows:

ALTER TABLE <table name> COLLATE utf8_general_ci;

If you also need to update the existing character encoding (unlikely by the sounds of things), you can use:

ALTER TABLE <table name> CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
John Parker
  • 54,048
  • 11
  • 129
  • 129
10

You can also update the database collation with:

ALTER DATABASE  `DATABASE_NAME` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci
Enbee
  • 415
  • 5
  • 9
0

Here are two ways. First one worked for me. From the terminal (Just remember to backup before.)

mysql --database=dbname -B -N -e "SHOW TABLES"  | awk '{print "ALTER TABLE", $1, "CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;"}' | mysql --database=dbname &

Source: Commandlineinfu.com

From MySQL you will have to use the Concat command

SELECT CONCAT('ALTER TABLE `', tbl.`TABLE_SCHEMA`, '`.`', tbl.`TABLE_NAME`, '` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;') FROM `information_schema`.`TABLES` tbl WHERE tbl.`TABLE_SCHEMA` = 'dbname'
sivi
  • 10,654
  • 2
  • 52
  • 51
0

You can change the collation of a table with ALTER TABLE:

alter table table_name collate=utf8_general_ci;
Arnaud Le Blanc
  • 98,321
  • 23
  • 206
  • 194