今日だけ、PHPスクリプトでこれが欠落していることに気付きました。
_mysql_set_charset('utf8');
_
私のテーブルはすべてInnoDB、照合「utf8_unicode_ci」であり、すべてのVARCHAR列も「utf8_unicode_ci」です。 PHPスクリプトにmb_internal_encoding('UTF-8');
があり、すべてのPHPファイルはUTF-8としてエンコードされています。
したがって、これまで、発音区別記号付きの何かを「挿入」するたびに、例:
_mysql_query('INSERT INTO `table` SET `name`="Jáuò Iñe"');
_
「名前」の内容は、この場合は_Jáuò Iñe
_です。
PHPとMySQLの間の文字セットを修正したため、新しいINSERTが正しく格納されるようになりました。しかし、現時点で「乱れた」古い行をすべて修正したいです。 、しかし、それは常に最初の「違法」文字の文字列を壊します。これが私の現在のコードです:
_$m = mysql_real_escape_string('¿<?php echo "¬<b>\'PHP á (á)ţăriîş </b>"; ?> ă-ţi abcdd;//;ñç´พดแทฝใจคçăâξβψδπλξξςαยนñ ;');
mysql_set_charset('utf8');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('latin1');
mysql_query('INSERT INTO `table` SET `name`="'.$m.'"');
mysql_set_charset('utf8');
$result = mysql_iquery('SELECT * FROM `table`');
while ($row = mysql_fetch_assoc($result)) {
$message = $row['name'];
$message = mb_convert_encoding($message, 'ISO-8859-15', 'UTF-8');
//$message = iconv("UTF-8", "ISO-8859-1//IGNORE", $message);
mysql_iquery('UPDATE `table` SET `name`="'.mysql_real_escape_string($message).'" WHERE `a1`="'.$row['a1'].'"');
}
_
文字列「ă」の後に文字列が切り捨てられることを除いて、期待される文字で「更新」されます。つまり、文字と後続の文字は文字列に含まれません。
また、// IGNOREおよび// TRANSLITを使用しても、「iconv()」(コードにコメントされている)を使用したテストは同じことを行います。
また、ISO-8859-1とISO-8859-15の間のいくつかの文字セットをテストしました。
ここで本当に助けが必要です!ありがとうございました。
説明から、元々Latin-1として保存されたUTF-8データがあり、UTF-8に正しく変換されていないようです。データは回復可能です。次のようなMySQL関数が必要です。
convert(cast(convert(name using latin1) as binary) using utf8)
エンコード変換中にデータが変更された方法によっては、内部変換を省略する必要がある場合があります。
この答えを1〜2時間検索した後。古いtt_news dbをtypoから新しいtypo3バージョンに移行する必要がありました。エクスポートファイルの文字セットを既に変換してインポートしようとしましたが、動作しませんでした。
次に、ABSから上記の答えを試し、テーブルの更新を開始しました:
UPDATE tt_news SET
title=convert(cast(convert(title using latin1) as binary) using utf8),
short=convert(cast(convert(short using latin1) as binary) using utf8),
bodytext=convert(cast(convert(bodytext using latin1) as binary) using utf8)
WHERE 1
必要に応じて、imagecaption、imagealttext、imagetitletext、およびキーワードを変換することもできます。これが、tt_newsを新しいtypo3バージョンに移行するのに役立つことを願っています。
方法は、データベースの通常の接続を使用するより良い方法です
次に、このコードを使用して必要なものを作成します。ヘッダーcod htmlのメタによってutf-8をエンコードするページを作成する必要があります(これを忘れないでください)
次に、このコードを使用します
$result = mysql_query('SELECT * FROM shops');
while ($row = mysql_fetch_assoc($
$name= iconv("windows-1256", "UTF-8", $row['name']);
mysql_query("SET NAMES 'utf8'");
mysql_query("update `shops` SET `name`='".$name."' where ID='$row[ID]' ");
}