【问题标题】:PHP and MySQL: Store and print hex charPHP 和 MySQL:存储和打印十六进制字符
【发布时间】:2011-04-10 20:22:56
【问题描述】:

我正在尝试在 MySql 数据库中存储一个十六进制值 (\xC1)。当我用 PHP 打印它时,我得到:xC1lcool 而不是正确的词。

INSERT INTO veiculos VALUES (1, 'Ford', 'Ka RoCam Flex', 25850.00, 1998, 1999, 'Vermelho', 15000, '\xC1lcool;Gasolina;GNV', 'Ar-Condicionado;4 portas;Câmbio automático', 'imagem1.jpg;imagem2.jpg;imagem3.jpg;imagem4.jpg;imagem5.jpg;'), (2, 'Ford', 'Ka RoCam Flex', 223850.00, 1999, 2001, 'Prata', 10000, '\xC1lcool;GNV', 'Ar-Condicionado;4 portas;Câmbio automático;', 'imagem1.jpg;imagem2.jpg;imagem3.jpg;imagem4.jpg;imagem5.jpg;'), (3, '福特', '嘉年华', 21380.00, 1998, 2002, 'Preto', 23043, 'Gasolina', '', 'imagem1.jpg;imagem2.jpg;imagem3.jpg;imagem4.jpg;imagem5.jpg;');

我该怎么做?

【问题讨论】:

标签: php sql mysql hex


【解决方案1】:

\x 不是有效的转义序列。有效序列详见http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html

引用手册:

对于所有其他转义序列, 反斜杠被忽略。那就是 转义字符被解释为 它没有逃脱。例如,“\x” 只是“x”。

您可以指定一个完整的十六进制字符串:

SELECT 0x61626364 -- Prints abcd

如果你想混合两种风格,你必须连接:

SELECT CONCAT('a', 0x6263, 'd') -- Prints abcd

【讨论】:

    【解决方案2】:

    将 MySQL UNHEX() 函数与 CONCAT() 一起使用。像这样

    insert into tablename values (CONCAT(UNHEX('C1'), 'other-part-of-string'))
    

    【讨论】:

      【解决方案3】:

      您可以在 MySQL 数据库中存储完整的二进制数据,例如图像或 pdf。插入值时,请确保执行 "insert ... values(".mysql_real_escape_string($value).")";。建议您对该列使用 blob 数据类型,但如果您确实需要,也可以使用 varchar。之后,当您选择数据时,它将是正常的,您无需执行任何其他操作。如果是图像,只需使用header(content-type: ...) 并正常打印出变量,图像就会显示给最终用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-18
        • 1970-01-01
        • 2020-11-07
        • 2011-12-25
        • 1970-01-01
        • 1970-01-01
        • 2015-07-26
        相关资源
        最近更新 更多