【问题标题】:What is the default charset for MySQL varbinary string interpretaion?MySQL varbinary 字符串解释的默认字符集是什么?
【发布时间】:2015-09-28 18:54:33
【问题描述】:

有时我会使用varbinary 而不是varchar,尤其是当我需要在= 比较期间计算尾随空格并且对此目的使用LIKE 运算符不感兴趣时​​。

选择时,我可以指定解码时使用的字符集,如下所示:
select convert(myvarbinary using utf8) from mytable

但大多数时候,我只是 select myvarbinary from mytable,它工作得很好。

我的问题是,在后者中,当我不指定字符集时,默认字符集来自什么?在 varchar 上,它实际上是按表甚至按列设置的,但对于 varbinary 则不然。

【问题讨论】:

    标签: mysql character-encoding varbinary


    【解决方案1】:

    VARBINARY 没有CHARACTER SET。所有的比较都是逐位进行的。这样的比较有点像COLLATE ..._bin

    对于大多数应用程序,最好在CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci 中完成所有操作。

    我能想到convert(myvarbinary using utf8) 的唯一原因是,如果您在单个列中有各种编码。 听起来像是一场噩梦。

    【讨论】:

    • 是的,那将是一场噩梦。我不明白这如何回答我的问题。我在问,如果我在从myvarbinary 中选择时不运行convert,那么它使用什么字符集来呈现其他二进制数据?我假设这是会话或数据库默认值,但我不确定。
    • 让我们在盘子上获得更多信息...你在使用VARBINARY吗? SELECT(或其他查询)是什么样的?您将VARBINARY 与什么进行比较?如果'='(等)的另一边也是VARBINARY,则不需要“转换”任何内容。还有一个“强制”的问题。见dev.mysql.com/doc/refman/5.6/en/information-functions.html(等)。
    • 我将varbinary 用于字符数据的主要原因是因为= 子句默认检查尾随空格和区分大小写。我也喜欢索引长度是逐字节的,而不是像varchar utf8 那样每个字符 3 个字节。 (我知道我可以使用latin1。我也承认我不完全了解索引长度)
    • = 的另一面可能是例如哈希的 Base-64 表示,由应用程序作为字符串提供。所以不,这不是在 MySQL 中比较两个 varbinaries。
    • 当我选择数据时,尤其是使用命令行mysql 工具时,它会呈现为文本,就像varchar 列一样。当我选择使用应用程序连接器时,这取决于我请求的是字符串还是字节数组,所以我想我应该将此问题限制在命令行mysql 工具中。问题是它使用哪个字符集来呈现 varbinary 列。
    猜你喜欢
    • 2019-02-07
    • 2011-01-04
    • 2011-09-17
    • 2011-05-04
    • 1970-01-01
    • 2010-12-20
    • 1970-01-01
    • 1970-01-01
    • 2012-12-29
    相关资源
    最近更新 更多