Як конвертувати цілий набір символів та порівняння баз даних MySQL в UTF-8?


459

Як я можу конвертувати цілий набір символів бази даних MySQL в UTF-8 і порівняння в UTF-8?


22
Для пізніших відвідувачів: Зверніть увагу на пов'язані питання на бічній панелі та використовуйте utf8_unicode_ci, не utf8_general_ci.
fuxia

14
Якщо ви хочете отримати повну підтримку UTF-8, ви, ймовірно, також хочете використовувати набір символів, utf8mb4а не utf8як utf8тільки підтримує основну багатомовну площину, а не повний діапазон. Він вимагає MySQL 5.5.3 або вище.
Мартін Сталь

4
Я забув згадати у своєму коментарі вище, якщо ви перейдете на utf8mb4вас, вам також потрібно буде перейти зіставлення наutf8mb4_unicode_ci
Martin Steel

3
Ще краще, порівняння utf8mb4_unicode_520_ciчи будь-яка інша версія - остання доступна версія.
Рік Джеймс

@MartinSteel Я вважаю, що це за замовчуванням порівняння з цим набором символів.
VaTo

Відповіді:


715

Використовуйте ALTER DATABASEі ALTER TABLEкоманди.

ALTER DATABASE databasename CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Або якщо ви все ще знаходитесь на MySQL 5.5.2 або старшій версії, яка не підтримувала 4-байтний UTF-8, використовуйте utf8замість utf8mb4:

ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;
ALTER TABLE tablename CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci;

12
CONVERT TOМетодика передбачає , що текст був правильно зберігатися в який - або іншому кодуванні (наприклад, latin1), а не підігнані (наприклад, UTF-8 байт забиті в latin1 колонку без перетворення в latin1).
Рік Джеймс

1
Це відновлює таблицю, роблячи її нездійсненною для великих виробничих систем. Якщо впевнено, що лише ASCII символи зберігаються в стовпцях latin1, чи можливо змінити схему / порівняння таблиці без повторної побудови?
Андрій

@Andrew Великі виробничі системи зазвичай мають дзеркальний БД для обслуговування.
BalusC

1
зміна діаграми, встановленої на utf8, змінює мій тип даних з тексту на середній текст. Чи очікується?
Джеррі

1
@Jerry Напевно, оскільки: "Якщо стовпець перетворений на utf8, кожному символу може знадобитися до трьох байт, максимально можлива довжина 3 × 65 555 = 196 605 байт. Ця довжина не вписується в довжину байтів стовпця TEXT, так MySQL перетворює тип даних у MEDIUMTEXT, що є найменшим типом рядка, для якого довжина байтів може записувати значення 196 605. Аналогічно, стовпець VARCHAR може бути перетворений в MEDIUMTEXT. " Зміна набору символів
jabbascript

129
  1. Зробіть резервну копію!

  2. Потім потрібно встановити типові набори символів у базі даних. Це не конвертує існуючі таблиці, воно встановлює лише стандартні настройки для новостворених таблиць.

    ALTER DATABASE dbname CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. Потім вам потрібно буде перетворити набір знаків для всіх існуючих таблиць та їх стовпців. Це передбачає, що ваші поточні дані фактично є у поточному наборі знаків. Якщо для ваших стовпців встановлено один набір знаків, але ваші дані дійсно зберігаються в іншому, вам потрібно буде перевірити посібник MySQL, як це впоратися.

    ALTER TABLE tbl_name CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;

44
Примітка: Ім'я таблиці ALTER TABLE CHARACTER SET utf8 встановлює лише стандартний набір знаків на таблиці, яка використовується для новостворених стовпців. Він не конвертує існуючі стовпці, у яких вже встановлений набір символів.
новина

Я мав би прочитати спочатку резервну копію резервної копії ... але моя удача полягала в тому, що це було в середовищі розробки. тому моє звернення йде до вас!
ДомінікАнгерер

4
@DominikAngerer: Що зламалося?
cic

16
Зауважте, що utf8_general_ciце більше не рекомендується найкраща практика. Оскільки MySQL 5.5.3 вам слід використовувати, utf8mb4а не використовувати utf8. Вони обоє посилаються на кодування UTF-8, але старші utf8мали специфічне обмеження для MySQL, що запобігало використанню символів, пронумерованих вище 0xFFFD.
u01jmg3

76

На оболонці командного рядка

Якщо ви є однією оболонкою командного рядка, ви можете це зробити дуже швидко. Просто заповніть "dbname": D

DB="dbname"
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"

Однолінійка для простого копіювання / вставки

DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"

2
Чи можете ви ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DB="dbname"
докладати

@ 4485670 Вам потрібно запустити це в оболонці командного рядка . Якщо у вас є тільки підключення клієнта MySQL, використовуйте код sdfor нижче.
Арнольд Даніельс

6
Цей код чудово працює, просто не забудьте додати -h [ім'я хоста] -u [ім'я користувача] -p [пароль] після mysql, як потрібно.
розійтися

3
Ви, ймовірно, захочете відключити перевірку зовнішніх ключів у реальній системі: DB="db_name"; ( echo 'ALTER DATABASE '"$ DB"' `CHARACTER SET utf8 COLLATE utf8_general_ci; '; mysql --uuser -ppassword -hhost "$ DB" -e "SHOW TABLES" --batch --skip-column-names | xargs -I {} відлуння 'SET Foreign_key_checks = 0; ALTER TABLE '{}'CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; ' ) | mysql -uuser -ppassword -hhost "$ DB" `
Адам Нельсон

1
Не працювало для мене, поки я не використав "показати повні таблиці, де Table_Type =" BASE TABLE "" замість "SHOW TABLES"
Брайан Петерсон

68

Ви можете створити sql, щоб оновити всі таблиці за допомогою:

SELECT CONCAT("ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CHARACTER SET utf8 COLLATE utf8_general_ci;   ",
    "ALTER TABLE ",TABLE_SCHEMA,".",TABLE_NAME," CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ") 
    AS alter_sql
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = your_database_name;

Зробіть результат і запустіть його.

Відповідь Арнольда Деніелса вище є більш елегантною.


чому ви додали два запити на зміну таблиці? одного недостатньо?
Акшай

7
@Akshay, гарне запитання. Перший запит alter-table встановлює за замовчуванням для нових стовпців, а другий запит alter-table перетворює існуючі стовпці.
UnlimitedInfinity

4
FYI: згідно з dev.mysql.com/doc/refman/5.5/en/alter-table.html документацією на MySQL, версія “CONVERT TO CHARACTER SET” оператора ALTER робить обидва в один крок: “Щоб змінити таблицю за замовчуванням набір символів і всі стовпці символів (CHAR, VARCHAR, TEXT) до нового набору символів ...
devGuy

2
У мене є ця помилка №1054 - Невідомий стовпчик 'webdb_playground' у «Де пункт», але я впевнений, що мій db є правильним
Yannis Dran,

1
@YannisDran Ваше ім'я db, можливо, не було в рядку, яке WHERE TABLE_SCHEMA=webdb_playgroundдало б вам невідому помилку стовпця, але WHERE TABLE_SCHEMA="webdb_playground"було б успішною. Щось спробувати на випадок, якщо хтось інший натрапить на це.
jabbascript

17

Перш ніж продовжувати, переконайтесь, що ви: виконали повне резервне копіювання бази даних!

Крок 1: Зміни рівня бази даних

  • Визначення набору зібраних даних та символів вашої бази даних

    SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM 
    information_schema.SCHEMATA S
    WHERE schema_name = 'your_database_name'
    AND
    (DEFAULT_CHARACTER_SET_NAME != 'utf8'
        OR
     DEFAULT_COLLATION_NAME not like 'utf8%');
  • Виправлення порівняння для бази даних

    ALTER DATABASE databasename CHARACTER SET utf8 COLLATE utf8_unicode_ci;

Крок 2: Зміни рівня таблиці

  • Визначення таблиць бази даних з неправильним набором символів або зіставленням

    SELECT CONCAT(
    'ALTER TABLE ',  table_name, ' CHARACTER SET utf8 COLLATE utf8_general_ci;  ', 
    'ALTER TABLE ',  table_name, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  ')
    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 = 'your_database_name'
    AND
    (C.CHARACTER_SET_NAME != 'utf8'
        OR
     C.COLLATION_NAME not like 'utf8%')
  • Налаштування зіставлення стовпців та набору символів

Зробіть верхній вихідний sql та запустіть його. (як і далі)

ALTER TABLE rma CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_products CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_products CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_report_period CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_report_period CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_reservation CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_reservation CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_history CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_history CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;  
ALTER TABLE rma_supplier_return_product CHARACTER SET utf8 COLLATE utf8_general_ci;ALTER TABLE rma_supplier_return_product CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci; 

зверніться до: https://confluence.atlassian.com/display/CONFKB/How+to+Fix+the+Collation+and+Character+Set+of+a+MySQL+Database


1
В даний час цей сценарій використовує 'utf8_unicode_ci' для db, але 'utf8_general_ci' для таблиць - це було навмисно? (Я думаю, що обидва повинні використовувати один і той же
шарс

stackoverflow.com/questions/10957238/… тут залишили більш повну відповідь
VH

8

Використовуйте HeidiSQL . Його безкоштовний і дуже хороший інструмент для db.

У меню інструментів введіть редактор масових таблиць

Виберіть повну базу даних або виберіть таблиці для перетворення,

  • галочка Змінити зіставлення за замовчуванням: utf8mb4_general_ci
  • галочка Перетворити в діаграму: utf8

Виконати

Це перетворює повну базу даних з латинської мови на utf8 за кілька секунд.

Працює як шарм :)

HeidiSQL підключається за замовчуванням як utf8, тому будь-які спеціальні символи тепер повинні розглядатися як символ (æ ø å), а не як кодовані під час огляду даних таблиці.

Справжня помилка при переході з латини на utf8 полягає в тому, щоб переконатися, що pdo з'єднується з charf utf8. Якщо ні, ви отримаєте дані сміття, вставлені в таблицю utf8 та знаки запитань повсюдно на вашій веб-сторінці, тому ви вважаєте, що дані таблиці не є utf8 ...


Не могли б ви детальніше розглянути? У мене саме це питання - спеціальні символи та пробіли відображаються як знаки запитань. Я намагаюся конвертувати базу даних в MAMP за допомогою PHPMyAdmin. Розробивши офлайн, я тепер виявляю, що мій хост не підтримує utf8mb4. У мене немає Windows, тому не можу використовувати HeidiSQL. Чи є спосіб я досягти цього за допомогою PHPMyAdmin?
RexTheRunt

як це. особливо у вас є багато столу.
tyan

Я отримую і помилки при спробі перетворити CHARSET: SQL Error (1025): Помилка перейменування ... але це дивовижний інструмент SQL-менеджера!
marcolopes

Якщо комусь потрібен хороший огляд та підручник для heidisql, ознайомтеся з цією статтею .
DougB

6

Натхненний коментарем @sdfor, ось базовий сценарій, який виконує цю роботу

#!/bin/bash

printf "### Converting MySQL character set ###\n\n"

printf "Enter the encoding you want to set: "
read -r CHARSET

# Get the MySQL username
printf "Enter mysql username: "
read -r USERNAME

# Get the MySQL password
printf "Enter mysql password for user %s:" "$USERNAME"
read -rs PASSWORD

DBLIST=( mydatabase1 mydatabase2 )

printf "\n"


for DB in "${DBLIST[@]}"
do
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE `'"$CHARSET"'`;'
    mysql "$DB" -u"$USERNAME" -p"$PASSWORD" -e "SHOW TABLES" --batch --skip-column-names \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE `'"$CHARSET"'`;'
) \
| mysql "$DB" -u"$USERNAME" -p"$PASSWORD"

echo "$DB database done..."
done

echo "### DONE ###"
exit

4

Якщо дані не в одному наборі символів, ви можете розглянути цей фрагмент з http://dev.mysql.com/doc/refman/5.0/uk/charset-conversion.html

Якщо стовпець має небінарний тип даних (CHAR, VARCHAR, TEXT), його вміст повинен бути закодований у наборі символів стовпця, а не в іншому наборі символів. Якщо вміст кодується в іншому наборі символів, ви можете перетворити стовпець, щоб спочатку використовувати тип бінарних даних, а потім у небінарний стовпець із потрібним набором символів.

Ось приклад:

 ALTER TABLE t1 CHANGE c1 c1 BLOB;
 ALTER TABLE t1 CHANGE c1 c1 VARCHAR(100) CHARACTER SET utf8;

Переконайтесь, що ви вибираєте правильне порівняння, інакше у вас можуть виникнути унікальні конфлікти ключів. наприклад, Елеанор та Елеанора можуть вважатися однаковими в деяких збірках.

Убік:

У мене була ситуація, коли певні символи "ламалися" в електронних листах, хоча вони зберігалися як UTF-8 у базі даних. Якщо ви надсилаєте електронні листи за допомогою даних utf8, ви можете також перетворити свої листи для надсилання у UTF8.

У PHPMailer просто оновіть цей рядок: public $CharSet = 'utf-8';


4

Для баз даних, що мають велику кількість таблиць, ви можете використовувати простий скрипт php для оновлення діаграми бази даних та всіх таблиць, використовуючи наступне:

$conn = mysqli_connect($host, $username, $password, $database);

if ($conn->connect_error) {
  die("Connection failed: " . $conn->connect_error);
}

$alter_database_charset_sql = "ALTER DATABASE ".$database." CHARACTER SET utf8 COLLATE utf8_unicode_ci";
mysqli_query($conn, $alter_database_charset_sql);

$show_tables_result = mysqli_query($conn, "SHOW TABLES");
$tables  = mysqli_fetch_all($show_tables_result);

foreach ($tables as $index => $table) {
  $alter_table_sql = "ALTER TABLE ".$table[0]." CONVERT TO CHARACTER SET utf8  COLLATE utf8_unicode_ci";
  $alter_table_result = mysqli_query($conn, $alter_table_sql);
  echo "<pre>";
  var_dump($alter_table_result);
  echo "</pre>";
}

Звідки ми запускаємо цей сценарій?
Янніс Дран

1
@YannisDran Це не має значення, доки IP не має доступу до бази даних. Переконайтесь, що спочатку берете резервну копію!
Дан Лукас

Добре, а як ми це запускаємо? Чи потрібно завантажити його на сервер, а потім запустити ввести шлях до його положення?
Янніс Дран

4
DELIMITER $$  

CREATE PROCEDURE `databasename`.`update_char_set`()  

BEGIN  
 DECLARE done INT DEFAULT 0;  
 DECLARE t_sql VARCHAR(256);  
 DECLARE tableName VARCHAR(128);  
 DECLARE lists CURSOR FOR SELECT table_name FROM `information_schema`.`TABLES` WHERE table_schema = 'databasename';  
 DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;  
 OPEN lists;  
 FETCH lists INTO tableName;  
 REPEAT  
    SET @t_sql = CONCAT('ALTER TABLE ', tableName, ' CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci');  
    PREPARE stmt FROM @t_sql;  
    EXECUTE stmt;  
    DEALLOCATE PREPARE stmt;  
 FETCH lists INTO tableName;  
 UNTIL done END REPEAT;  
 CLOSE lists;  
END$$  

DELIMITER ;  

CALL databasename.update_char_set();

Дякую, це одна з небагатьох відповідей, яка насправді показує, як це зробити для всієї бази даних (тобто кожної таблиці). Працював як шарм.
Макісуджі

3
mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql
cp dump.sql dump-fixed.sql
vim dump-fixed.sql


:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

mysql -uusername -ppassword < dump-fixed.sql

3

Найбезпечніший спосіб - змінити спочатку стовпці до двійкового типу, а потім змінити їх назад до типу, використовуючи потрібну схему.

Кожен тип стовпця має відповідний бінарний тип:

  1. ЧАР = = БІНАРІЯ
  2. ТЕКСТ => BLOB
  3. TINYTEXT => TINYBLOB
  4. MEDIUMTEXT => MEDIUMBLOB
  5. LONGTEXT => LONGBLOB
  6. ВАРХАР => ВАРБІНАР

Напр .:

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARBINARY;

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] MODIFY [COLUMN_NAME] VARCHAR(140) CHARACTER SET utf8mb4;

Я спробував у кількох таблицях latin1, і це зберігало всю діакритику.

Ви можете отримати цей запит для всіх стовпців, які роблять це:

SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' VARBINARY;'),
CONCAT('ALTER TABLE ', TABLE_SCHEMA,'.', TABLE_NAME,' MODIFY ', COLUMN_NAME,' ', COLUMN_TYPE,' CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM information_schema.columns
WHERE TABLE_SCHEMA IN ('[TABLE_SCHEMA]')
AND COLUMN_TYPE LIKE 'varchar%'
AND (COLLATION_NAME IS NOT NULL AND COLLATION_NAME NOT LIKE 'utf%');

Після того, як ви це зробите у всіх своїх стовпцях, ви робите це на всіх таблицях:

ALTER TABLE [TABLE_SCHEMA].[TABLE_NAME] CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

Щоб створити цей запит для всієї таблиці, використовуйте такий запит:

SELECT
CONCAT('ALTER TABLE ', TABLE_SCHEMA, '.', TABLE_NAME, ' CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;')
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_COLLATION NOT LIKE 'utf8%'
and TABLE_SCHEMA in ('[TABLE_SCHEMA]');

А тепер, коли ви змінили всі свої стовпці та таблиці, зробіть те саме в базі даних:

ALTER DATABASE [DATA_BASE_NAME] CHARSET = utf8mb4 COLLATE = utf8mb4_general_ci;

1

Якщо ви не можете змусити конвертувати ваші таблиці або ваш стіл завжди встановлений на деякий набір символів, який не є utf8, але ви хочете, щоб utf8, найкращим варіантом може бути його стерти і почати заново і чітко вказати:

create database database_name character set utf8;

0

Єдине рішення, яке працювало для мене: http://docs.moodle.org/23/en/Converting_your_MySQL_database_to_UTF8

Перетворення бази даних, що містить таблиці

mysqldump -uusername -ppassword -c -e --default-character-set=utf8 --single-transaction --skip-set-charset --add-drop-database -B dbname > dump.sql

cp dump.sql dump-fixed.sql
vim dump-fixed.sql

:%s/DEFAULT CHARACTER SET latin1/DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci/
:%s/DEFAULT CHARSET=latin1/DEFAULT CHARSET=utf8/
:wq

mysql -uusername -ppassword < dump-fixed.sql

0

alter table table_name charset = 'utf8';

Це простий запит, який я зміг використати для мого випадку, ви можете змінити ім’я_матеріалу відповідно до ваших вимог.


Зазвичай відповідь повинна супроводжуватися деяким поясненням того, що ви пропонуєте зробити.
RiggsFolly

0

Щоб змінити кодування набору символів на UTF-8 для самої бази даних, введіть таку команду в командному рядку mysql>. Замініть DBNAME на ім'я бази даних:

ALTER DATABASE DBNAME CHARACTER SET utf8 COLLATE utf8_general_ci;

0

Ви також можете скористатися інструментом БД Navicat, що робить це простіше.

  • Сива.

Клацніть правою кнопкою миші свою базу даних і виберіть "Властивості та зміни БД" за бажанням у спадному меню

введіть тут опис зображення


0

Рішення командного рядка та виключення подань

Я просто комплектуючі @ Jasny в відповідь на інші , як @Brianі я , у кого є думки в нашій базі даних.

Якщо у вас є така помилка:

ERROR 1347 (HY000) at line 17: 'dbname.table_name' is not of type 'BASE TABLE'

Це тому, що у вас, мабуть, є перегляди, і їх потрібно виключити. Але при спробі їх виключити, MySQL повертає 2 стовпчики замість 1.

SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE';
-- table_name1  BASE TABLE
-- table_name2  BASE TABLE

Таким чином, ми повинні адаптувати команду Jasny, awkщоб витягти лише 1-й стовпець, який містить ім'я таблиці.

DB="dbname"
(
    echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'
    mysql "$DB" -e "SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE'" --batch --skip-column-names \
    | awk '{print $1 }' \
    | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;'
) \
| mysql "$DB"

Однолінійка для простого копіювання / вставки

DB="dbname"; ( echo 'ALTER DATABASE `'"$DB"'` CHARACTER SET utf8 COLLATE utf8_general_ci;'; mysql "$DB" -e "SHOW FULL TABLES WHERE Table_Type = 'BASE TABLE'" --batch --skip-column-names | awk '{print $1 }' | xargs -I{} echo 'ALTER TABLE `'{}'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;' ) | mysql "$DB"

-1

Щоб змінити кодування набору символів на UTF-8, виконайте прості дії в PHPMyAdmin

  1. Виберіть свою базу даних СС

  2. Перейдіть до операцій СС

  3. На вкладці "Операції" у спадному меню нижнього зіставлення виберіть потрібне кодування, тобто (utf8_general_ci), а також встановіть прапорець (1) змінити всі таблиці таблиць, (2) Змінити всі зіставлення стовпців таблиць. і натисніть Go.

СС

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.