2

我编写了一个 PHP 脚本来使用 Unicode 数据填充 MySQL 表。不过,我遇到了一些小问题。例如,空格character字符 (id = 32) 的列是空的,即使我单独运行以下命令:

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

有任何想法吗?这是我用来填充表的脚本(包含的脚本common.php定义了database函数,它是一个 PDO 对象):

<?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如果未配置为保留数据,某些驱动程序甚至可能在数据上执行此操作。

您可以通过选择十六进制编码版本来检查数据库中的实际内容:

SELECT HEX(character) FROM unicode WHERE id=32

您应该看到2032 的十六进制等价物。

于 2012-09-18T20:02:34.097 回答
0

character必须是类型CHAR

于 2012-09-18T20:02:59.847 回答