我们在SQL中有类似于以下内容的内容,用于构建用于phpunit测试的测试数据库:

INSERT (101, 23, 'test1', 'something', 0x3C2F756C3E)
INSERT INTO `tableA` (`field1`, `field2`, `field3`, `field4`, `field5`)
VALUES
    (102, 23, 'test2', 'something', X'3C2F756C3E');

令我惊讶的是,当我将其作为查询运行,并将</ul>插入字段5时,它实际上会运行.

我试着搜索关于"X"部分的一些信息,但没有找到任何东西,我可以看到这里有一些与HTML实体相关的东西,但是"X"是什么?这是如何工作的?

推荐答案

X表示以下是十六进制编码的二进制字符串文字.ISO-9075-2:2016 SQL标准将其定义为<;二进制字符串文字>;:

<binary string literal> ::=
  X <quote> [ <space>... ] [ { <hexit> [ <space>... ] <hexit> [ <space>... ] }... ] <quote>
    [ { <separator> <quote> [ <space>... ] [ { <hexit> [ <space>... ]
    <hexit> [ <space>... ] }... ] <quote> }... ]

<hexit> ::=
  <digit> | A | B | C | D | E | F | a | b | c | d | e | f

用ASCII或UTF-8解释时,文字X'3C2F756C3E'为:

  • 3C->;<
  • 2F->;/
  • 75->;u
  • 6C->;l
  • 3E->;>

或者</ul>.

另请参阅MySQL文档第Hexadecimal Literals节(注意:MySQL语法比标准语法更严格,也就是说,MySQL不允许在十六进制之间使用空格,也不允许拆分为多个以引号分隔的部分).

Mysql相关问答推荐

在MySQL和JavaFX中保存和检索图像文件

使用字符串文字与使用日期文字时的SQL行为

为什么 MAX 函数通过调用在 group 中生成正确的结果

MySQL:获取连续记录的数量(日期)?

Mysql,从两个不同的表中添加原始数据,从第一个表中获取所有内容,仅从第二个表中获取curdate内容

使用Workbench时如何添加mysqldump配置标志

高效的 SQL 查询,用于计算半小时时间序列中已发生的行的一部分

如何获取每日登录用户数?

sequelize 中最好的更新方法是什么

为什么没有创建此触发器?

谁能帮我优化低性能的mysql查询

如何在任何连续范围内获得最大值

基于两个单元格值的 SQL 过滤表

MySQL SELECT 增量计数器

MySQL 整数与日期时间索引

我可以在单个 Amazon RDS 实例上创建多少个数据库

如何在 MySQL 中删除此索引?

MySQL:唯一字段需要是索引吗?

在 Ubuntu 上安装 mysql gem 的困难

cron 启动的 mysqldump 和密码安全