MYSQL/Coldfusion 替换注册符号不起作用

标签 mysql sql coldfusion

我想通过用 <sup> 包裹所有注册符号来使它们成为上标HTML 标签。所以,我可以在 SQL 中毫无问题地做到这一点:

SELECT s.id,
Replace(s.name,'®','<sup>&reg;</sup>') AS name
FROM staff s
WHERE name LIKE '%®%'

结果:

id | name
 1 | Name1 CFP<sup>&reg;</sup>, CDFA
 2 | Jeffrey test CFP<sup>&reg;</sup>
 3 | Matthew hello CFP<sup>&reg;</sup> CFA

但是当我在 Coldfusion 中从 cfquery 运行它时标签,看起来好像 ®字符被解释为 ® .

<cfquery name="getStaff" dataSource="#this.dsn#">
    SELECT s.id,
    Replace(s.name,'®','<sup>&reg;</sup>') AS name
    FROM staff s
    WHERE 1=1
    <cfif isDefined("arguments.permalink")>
        AND s.permalink=<cfqueryparam value="#arguments.permalink#" />
    </cfif>
</cfquery>

Screenshot of query cfdump

有没有更好的方法来解决这个问题?我最初在 Coldfusion 中使用 <cfset getStaff.name = Replace(getStaff.name,Chr(174),'<sup>&reg;</sup>') /> 做到了这一点,在我切换到 Mustache 模板之前效果很好。

我绝对更愿意使用 CHAR()如果我能找出数字字符 ® 的函数在Mysql中。 (注意,在这个和所有数据库表上使用 utf8_general_ci)我试过 CHAR(174)在 Mysql 中,但它不会工作,因为(据我所知)Mysql 没有使用相同的字符集 - SELECT CHAR(174)返回一个 blob。

最佳答案

更新:

I'd definitely prefer to use the CHAR() function if I could figure out what numeric character ® is in Mysql. (Note, using utf8_general_ci on this and all DB tables) I tried CHAR(174) in Mysql, but it won't work because (as far as I can tell) Mysql isn't using the same character set - SELECT CHAR(174) returns a blob.

如评论中所述,听起来您的数据库的默认字符集是 utf8 .所以大概它失败了,因为十进制的 174 不是表示 registered sign in utf8 的正确方法。 .该符号需要两个字节。为您的默认字符集(即 utf8)使用正确的十六进制或十进制值,它按预期工作:

  • 十六进制:CHAR(0xC2AE)
  • 十进制:CHAR(194,174)

尽管用USING 明确指定字符集会更好:

  • 十六进制:CHAR(194,174 USING utf8)
  • 十进制:CHAR(0xC2AE USING utf8)

符号是否硬编码到 .cfm 脚本中?如果是这样,则可能是脚本的字符编码问题。在解释文件中的文字字符时,页面编码很重要。尝试:

关于 cfqueryparam 的旁注,始终指定 cfsqltype 是一个好习惯.如果省略,则默认为 CF_SQL_CHAR,这可能会强制隐式转换和 cause wrong/unintended results in some cases (数字、日期等)。即使对于字符串值,指定类型也是一个好主意,因为在数据库端处理 CHAR 和 VARCHAR 类型的方式可能略有不同。

关于MYSQL/Coldfusion 替换注册符号不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40770614/

相关文章:

php - 如何显示 24 小时的报价

php - 更新只有一列数据发生变化的表

java - HQL语言如何像代码一样连接查询两个表

sql - Postgres - 仅为一列插入另一个表中的数据

coldfusion - 在 CFML 中循环一个集合(结构)有什么更好的方法吗?

Coldfusion 查询对象操作

php - 警告 : mysql_real_escape_string() [function. mysql-real-escape-string]:用户 'a8221325' @'localhost' 的访问被拒绝(使用密码:NO)

mysql - 选择先前查询中未选择的行

database - coldfusion 如何将pdf文件保存在数据库中并在浏览器中获取

PHP 在尝试使用 PDO 连接到错误的数据库时不显示错误