Mysql
 sql >> база данни >  >> RDS >> Mysql

Това безопасен начин ли е да конвертирате MySQL таблици от latin1 в utf-8?

Има 3 различни случая, които трябва да имате предвид:

Стойностите наистина са кодирани с помощта на Latin1

Това е последователният случай:декларираният набор от знаци и кодирането на съдържанието съвпадат. Това беше единственият случай, който обхванах в първоначалния си отговор.

Използвайте предложената от вас команда:

ALTER TABLE tablename CONVERT TO CHARSET utf8 COLLATE utf8_bin

Обърнете внимание, че CONVERT TO CHARACTER SET командата се появи само в MySQL 4.1.2, така че всеки, който използва база данни, инсталирана преди 2005 г., трябваше да използва трик за експортиране/импортиране. Ето защо има толкова много наследени скриптове и документи в Интернет, които го правят по стария начин.

Стойностите вече са кодирани с помощта на utf8

В този случай не искате mysql да преобразува никакви данни, трябва само да промените метаданните на колоната.

За това трябва първо да промените типа на BLOB, а след това на TEXT utf8 за всяка колона, така че да няма преобразувания на стойност:

ALTER TABLE t1 CHANGE c1 c1 BLOB;
ALTER TABLE t1 CHANGE c1 c1 TEXT CHARACTER SET utf8

Това е препоръчителният начин и е изрично документиран в Alter Документация за синтаксис на таблица .

Стойностите се използват в различно кодиране

Кодирането по подразбиране беше Latin1 в продължение на няколко години в някои дистрибуции на Linux. В този случай трябва да използвате комбинация от двете техники:

  • Поправете метаданните на таблицата, като използвате трика с типа BLOB
  • Преобразувайте стойностите с помощта на CONVERT TO .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Грешка при събитие в Mysql при използване на php

  2. VARCHAR като външен ключ/първичен ключ в базата данни добро или лошо?

  3. Балансиране на натоварването, съобразено с базата данни:Как да мигрираме от HAProxy към ProxySQL

  4. Има ли ограничения за дължината на низа в mysql?

  5. Каква е алтернативата на клаузата LIMIT в JPQL?