0

latin1 形式のデータベースがあり、格納されているすべての utf8 文字が ???? として表示されます。

 +------+---------+-------+---------+--------------------+----------+--------------------      -----+---------------------+---------------------+---------+
 | id   | user_id | fname | lname   | designation        | location | email                    | created_at          | updated_at          | country |
 +------+---------+-------+---------+--------------------+----------+------------------------- +---------------------+---------------------+---------+
 | 6035 |    6035 | ????? | ??????? | ???????? ????????? |          |  ccc@rddd.net            | 2011-04-11 06:05:54 | 2011-04-10 06:13:04 | xxxxxxxxx |
 +------+---------+-------+---------+--------------------+----------+-------------------------+---------------------+---------------------+---------+

このコマンドを使用して、データベースとテーブルの形式を utf8 に変更します。

  ALTER TABLE <table_name> CONVERT TO CHARACTER SET utf8;

  ALTER DATABASE <database_name> CHARACTER SET utf8;

latin1 はすべての文字に 1 バイトを使用しますが、utf8 はすべての文字に 3 バイトを使用することを読みました。私の質問は、(すでに大量のデータを含む) テーブルを latin1 から utf8 に変更すると、古い文字データは 3 バイトまたは 1 バイトを消費することになります。データを変更して変換すると、古いデータに問題が発生しますか? 新しいデータは utf8 になると確信しています。

4

1 に答える 1

0

まず、試してみてください:

SET NAMES 'utf8'
SET CHARACTER SET utf8

記録されたデータが破損しておらず、UTF8 形式でエンコードされているかどうかを確認するために、行 #6085 を選択します。

UTF8 (UTF16 とは異なり) は、後方互換性を保つために、ASCII 文字に 1 バイトを使用します。他の文字 ( unicode faq )には最大 4 バイトを使用します。

データが既に UTF8 形式で保存されている場合は、データを変換しないでください。


警告

  1. バックアップで ALTER TABLE を試してください。
  2. ALTER TABLE はデータベースをロックします。
于 2012-08-08T12:06:37.610 に答える