2

MySQLテーブルにUnicodeデータを入力するPHPスクリプトを作成しました。しかし、私はいくつかの小さな問題に遭遇しました。たとえば、次のコマンドを個別に実行した場合でも、スペースcharacter文字(id = 32)の列は空です。

UPDATE unicode SET `character` = ' ' WHERE id = 32;

何か案は?テーブルにデータを入力するために使用しているスクリプトは次のとおりです(含まれているスクリプトは、PDOオブジェクトである関数をcommon.php定義します)。database

<?php

include_once('common.php');

// Fetch data from Unicode website
$file = fopen('http://www.unicode.org/Public/UNIDATA/UnicodeData.txt', 'r');

// Iterate through each line of the file
while($row = fgets($file)) {

    // Gather data
    $column = explode(';', $row);
    $id = hexdec($column[0]);
    $name = $column[1];
    $general_category = $column[2];
    $uppercase_mapping = hexdec($column[12]);
    $lowercase_mapping = hexdec($column[13]);
    $titlecase_mapping = hexdec($column[14]);

    // Build the database query
    $query = sprintf("INSERT IGNORE INTO unicode VALUES (%d, CHAR(%d USING UTF8), '%s', '%s', %d, %d, %d)",
        $id,
        $id,
        $name,
        $general_category,
        $uppercase_mapping,
        $lowercase_mapping,
        $titlecase_mapping);

    database()->query($query);
    echo $id.' ';
}

?>
4

2 に答える 2

2

列タイプがある場合CHAR、データベースドライバが末尾のスペースを自動的に削除している可能性があります。一部のドライバーは、データを保持するように構成されていない場合でも、VARCHARデータに対してこれを実行している可能性があります。

16進エンコードされたバージョンを選択することにより、データベースに実際に何があるかを確認できます。

SELECT HEX(character) FROM unicode WHERE id=32

2032に相当する16進数が表示されているはずです。

于 2012-09-18T20:02:34.097 に答える
0

characterタイプでなければなりませんCHAR

于 2012-09-18T20:02:59.847 に答える